| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 7c903ec commit bbc0d14
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -12,7 +12,6 @@ using v8::HandleScope; | |||
| 12 | 12 | using v8::Isolate; | |
| 13 | 13 | using v8::Local; | |
| 14 | 14 | using v8::MaybeLocal; | |
| 15 | - using v8::MicrotasksScope; | ||
| 16 | 15 | using v8::Object; | |
| 17 | 16 | using v8::String; | |
| 18 | 17 | using v8::Value; | |
@@ -111,7 +110,7 @@ void InternalCallbackScope::Close() { | |||
| 111 | 110 | auto weakref_cleanup = OnScopeLeave([&]() { env_->RunWeakRefCleanup(); }); | |
| 112 | 111 | ||
| 113 | 112 | if (!tick_info->has_tick_scheduled()) { | |
| 114 | - MicrotasksScope::PerformCheckpoint(env_->isolate()); | ||
| 113 | + env_->context()->GetMicrotaskQueue()->PerformCheckpoint(env_->isolate()); | ||
| 115 | 114 | ||
| 116 | 115 | perform_stopping_check(); | |
| 117 | 116 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -21,7 +21,6 @@ using v8::kPromiseRejectAfterResolved; | |||
| 21 | 21 | using v8::kPromiseRejectWithNoHandler; | |
| 22 | 22 | using v8::kPromiseResolveAfterResolved; | |
| 23 | 23 | using v8::Local; | |
| 24 | - using v8::MicrotasksScope; | ||
| 25 | 24 | using v8::Number; | |
| 26 | 25 | using v8::Object; | |
| 27 | 26 | using v8::Promise; | |
@@ -101,7 +100,8 @@ static void EnqueueMicrotask(const FunctionCallbackInfo<Value>& args) { | |||
| 101 | 100 | } | |
| 102 | 101 | ||
| 103 | 102 | static void RunMicrotasks(const FunctionCallbackInfo<Value>& args) { | |
| 104 | - MicrotasksScope::PerformCheckpoint(args.GetIsolate()); | ||
| 103 | + Environment* env = Environment::GetCurrent(args); | ||
| 104 | + env->context()->GetMicrotaskQueue()->PerformCheckpoint(env->isolate()); | ||
| 105 | 105 | } | |
| 106 | 106 | ||
| 107 | 107 | static void SetTickCallback(const FunctionCallbackInfo<Value>& args) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -629,13 +629,14 @@ TEST_F(EnvironmentTest, NestedMicrotaskQueue) { | |||
| 629 | 629 | node::InitializeContext(context); | |
| 630 | 630 | v8::Context::Scope context_scope(context); | |
| 631 | 631 | ||
| 632 | - int callback_calls = 0; | ||
| 632 | + using IntVec = std::vector<int>; | ||
| 633 | + IntVec callback_calls; | ||
| 633 | 634 | v8::Local<v8::Function> must_call = v8::Function::New( | |
| 634 | 635 | context, | |
| 635 | 636 | [](const v8::FunctionCallbackInfo<v8::Value>& info) { | |
| 636 | - int* callback_calls = | ||
| 637 | - static_cast<int*>(info.Data().As<v8::External>()->Value()); | ||
| 638 | - *callback_calls |= info[0].As<v8::Int32>()->Value(); | ||
| 637 | + IntVec* callback_calls = static_cast<IntVec*>( | ||
| 638 | + info.Data().As<v8::External>()->Value()); | ||
| 639 | + callback_calls->push_back(info[0].As<v8::Int32>()->Value()); | ||
| 639 | 640 | }, | |
| 640 | 641 | v8::External::New(isolate_, static_cast<void*>(&callback_calls))) | |
| 641 | 642 | .ToLocalChecked(); | |
@@ -652,23 +653,40 @@ TEST_F(EnvironmentTest, NestedMicrotaskQueue) { | |||
| 652 | 653 | isolate_data, context, {}, {}); | |
| 653 | 654 | CHECK_NE(nullptr, env); | |
| 654 | 655 | ||
| 655 | - node::LoadEnvironment( | ||
| 656 | + v8::Local<v8::Function> eval_in_env = node::LoadEnvironment( | ||
| 656 | 657 | env, | |
| 657 | - "Promise.resolve().then(() => mustCall(1 << 0));\n" | ||
| 658 | + "mustCall(1);\n" | ||
| 659 | + "Promise.resolve().then(() => mustCall(2));\n" | ||
| 658 | 660 | "require('vm').runInNewContext(" | |
| 659 | - " 'Promise.resolve().then(() => mustCall(1 << 1))'," | ||
| 661 | + " 'Promise.resolve().then(() => mustCall(3))'," | ||
| 660 | 662 | " { mustCall }," | |
| 661 | 663 | " { microtaskMode: 'afterEvaluate' }" | |
| 662 | - ");" | ||
| 664 | + ");\n" | ||
| 663 | 665 | "require('vm').runInNewContext(" | |
| 664 | - " 'Promise.resolve().then(() => mustCall(1 << 2))'," | ||
| 666 | + " 'Promise.resolve().then(() => mustCall(4))'," | ||
| 665 | 667 | " { mustCall }" | |
| 666 | - ");").ToLocalChecked(); | ||
| 667 | - EXPECT_EQ(callback_calls, 1 << 1); | ||
| 668 | + ");\n" | ||
| 669 | + "setTimeout(() => {" | ||
| 670 | + " Promise.resolve().then(() => mustCall(5));" | ||
| 671 | + "}, 10);\n" | ||
| 672 | + "mustCall(6);\n" | ||
| 673 | + "return eval;\n").ToLocalChecked().As<v8::Function>(); | ||
| 674 | + EXPECT_EQ(callback_calls, (IntVec { 1, 3, 6, 2, 4 })); | ||
| 675 | + v8::Local<v8::Value> queue_microtask_code = v8::String::NewFromUtf8Literal( | ||
| 676 | + isolate_, "queueMicrotask(() => mustCall(7));"); | ||
| 677 | + eval_in_env->Call(context, | ||
| 678 | + v8::Null(isolate_), | ||
| 679 | + 1, | ||
| 680 | + &queue_microtask_code).ToLocalChecked(); | ||
| 681 | + EXPECT_EQ(callback_calls, (IntVec { 1, 3, 6, 2, 4 })); | ||
| 668 | 682 | isolate_->PerformMicrotaskCheckpoint(); | |
| 669 | - EXPECT_EQ(callback_calls, 1 << 1); | ||
| 683 | + EXPECT_EQ(callback_calls, (IntVec { 1, 3, 6, 2, 4 })); | ||
| 670 | 684 | queue->PerformCheckpoint(isolate_); | |
| 671 | - EXPECT_EQ(callback_calls, (1 << 0) | (1 << 1) | (1 << 2)); | ||
| 685 | + EXPECT_EQ(callback_calls, (IntVec { 1, 3, 6, 2, 4, 7 })); | ||
| 686 | + | ||
| 687 | + int exit_code = SpinEventLoop(env).FromJust(); | ||
| 688 | + EXPECT_EQ(exit_code, 0); | ||
| 689 | + EXPECT_EQ(callback_calls, (IntVec { 1, 3, 6, 2, 4, 7, 5 })); | ||
| 672 | 690 | ||
| 673 | 691 | node::FreeEnvironment(env); | |
| 674 | 692 | node::FreeIsolateData(isolate_data); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments