5#include "fxjs/gc/heap.h"
9#include "core/fxcrt/check.h"
10#include "core/fxcrt/fx_system.h"
11#include "v8/include/cppgc/heap.h"
15size_t g_platform_ref_count = 0;
16v8::Platform* g_platform =
nullptr;
17v8::Isolate* g_isolate =
nullptr;
24class CFXGC_Platform
final :
public cppgc::Platform {
30 return g_platform->GetPageAllocator();
34 return g_platform->MonotonicallyIncreasingTime();
41 return g_platform->GetForegroundTaskRunner(g_isolate);
45 cppgc::TaskPriority priority,
46 std::unique_ptr<cppgc::JobTask> job_task)
override {
47 return g_platform->PostJob(priority,
std::move(job_task));
54 g_platform = platform;
60 if (g_platform && g_platform_ref_count == 0) {
74 ++g_platform_ref_count;
75 auto heap = cppgc::Heap::Create(
76 std::make_shared<CFXGC_Platform>(),
77 cppgc::Heap::HeapOptions{
79 cppgc::Heap::StackSupport::kNoConservativeStackScan,
80 cppgc::Heap::MarkingType::kAtomic,
81 cppgc::Heap::SweepingType::kIncrementalAndConcurrent,
87 heap->ForceGarbageCollectionSlow(
"FXGC",
"ForceGarbageCollection",
88 cppgc::Heap::StackState::kNoHeapPointers);
93 DCHECK(g_platform_ref_count > 0);
94 --g_platform_ref_count;
FXGCScopedHeap FXGC_CreateHeap()
void FXGC_Initialize(v8::Platform *platform, v8::Isolate *isolate)
void FXGC_ForceGarbageCollection(cppgc::Heap *heap)
std::unique_ptr< cppgc::Heap, FXGCHeapDeleter > FXGCScopedHeap
void operator()(cppgc::Heap *heap)