diff --git a/NativeScript/runtime/Runtime.h b/NativeScript/runtime/Runtime.h index 43f7aa68..162aecf2 100644 --- a/NativeScript/runtime/Runtime.h +++ b/NativeScript/runtime/Runtime.h @@ -55,6 +55,7 @@ class Runtime { void DefineNativeScriptVersion(v8::Isolate* isolate, v8::Local globalTemplate); void DefinePerformanceObject(v8::Isolate* isolate, v8::Local globalTemplate); void DefineTimeMethod(v8::Isolate* isolate, v8::Local globalTemplate); + void DefineDrainMicrotaskMethod(v8::Isolate* isolate, v8::Local globalTemplate); static void PerformanceNowCallback(const v8::FunctionCallbackInfo& args); v8::Isolate* isolate_; std::unique_ptr moduleInternal_; diff --git a/NativeScript/runtime/Runtime.mm b/NativeScript/runtime/Runtime.mm index f536ef7e..91cc9884 100644 --- a/NativeScript/runtime/Runtime.mm +++ b/NativeScript/runtime/Runtime.mm @@ -93,6 +93,7 @@ Worker::Init(isolate, globalTemplate, mainThreadInitialized_); DefinePerformanceObject(isolate, globalTemplate); DefineTimeMethod(isolate, globalTemplate); + DefineDrainMicrotaskMethod(isolate, globalTemplate); ObjectManager::Init(isolate, globalTemplate); // SetTimeout::Init(isolate, globalTemplate); MetadataBuilder::RegisterConstantsOnGlobalObject(isolate, globalTemplate, mainThreadInitialized_); @@ -230,6 +231,13 @@ globalTemplate->Set(ToV8String(isolate, "__time"), timeFunctionTemplate); } +void Runtime::DefineDrainMicrotaskMethod(v8::Isolate* isolate, v8::Local globalTemplate) { + Local drainMicrotaskTemplate = FunctionTemplate::New(isolate, [](const FunctionCallbackInfo& info) { + isolate->PerformMicrotaskCheckpoint(); + }); + globalTemplate->Set(ToV8String(isolate, "__drainMicrotaskQueue"), drainMicrotaskTemplate); +} + bool Runtime::IsAlive(Isolate* isolate) { return std::find(Runtime::isolates_.begin(), Runtime::isolates_.end(), isolate) != Runtime::isolates_.end(); }