@@ -277,19 +277,29 @@ void MarkGarbageCollectionEnd(Isolate* isolate,
277
277
});
278
278
}
279
279
280
- static void SetupGarbageCollectionTracking (
280
+ void GarbageCollectionCleanupHook (void * data) {
281
+ Environment* env = static_cast <Environment*>(data);
282
+ env->isolate ()->RemoveGCPrologueCallback (MarkGarbageCollectionStart, data);
283
+ env->isolate ()->RemoveGCEpilogueCallback (MarkGarbageCollectionEnd, data);
284
+ }
285
+
286
+ static void InstallGarbageCollectionTracking (
281
287
const FunctionCallbackInfo<Value>& args) {
282
288
Environment* env = Environment::GetCurrent (args);
283
289
284
290
env->isolate ()->AddGCPrologueCallback (MarkGarbageCollectionStart,
285
291
static_cast <void *>(env));
286
292
env->isolate ()->AddGCEpilogueCallback (MarkGarbageCollectionEnd,
287
293
static_cast <void *>(env));
288
- env->AddCleanupHook ([](void * data) {
289
- Environment* env = static_cast <Environment*>(data);
290
- env->isolate ()->RemoveGCPrologueCallback (MarkGarbageCollectionStart, data);
291
- env->isolate ()->RemoveGCEpilogueCallback (MarkGarbageCollectionEnd, data);
292
- }, env);
294
+ env->AddCleanupHook (GarbageCollectionCleanupHook, env);
295
+ }
296
+
297
+ static void RemoveGarbageCollectionTracking (
298
+ const FunctionCallbackInfo<Value> &args) {
299
+ Environment* env = Environment::GetCurrent (args);
300
+
301
+ env->RemoveCleanupHook (GarbageCollectionCleanupHook, env);
302
+ GarbageCollectionCleanupHook (env);
293
303
}
294
304
295
305
// Gets the name of a function
@@ -575,8 +585,12 @@ void Initialize(Local<Object> target,
575
585
env->SetMethod (target, " markMilestone" , MarkMilestone);
576
586
env->SetMethod (target, " setupObservers" , SetupPerformanceObservers);
577
587
env->SetMethod (target, " timerify" , Timerify);
578
- env->SetMethod (
579
- target, " setupGarbageCollectionTracking" , SetupGarbageCollectionTracking);
588
+ env->SetMethod (target,
589
+ " installGarbageCollectionTracking" ,
590
+ InstallGarbageCollectionTracking);
591
+ env->SetMethod (target,
592
+ " removeGarbageCollectionTracking" ,
593
+ RemoveGarbageCollectionTracking);
580
594
env->SetMethod (target, " notify" , Notify);
581
595
582
596
Local<Object> constants = Object::New (isolate);
0 commit comments