Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Unified Diff: test/unittests/compiler-dispatcher/compiler-dispatcher-unittest.cc

Issue 2686673002: [Compiler] Avoid blocking on inner function parallel compilation. (Closed)
Patch Set: Fix outer_scope_info handling Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler-dispatcher/compiler-dispatcher-job.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/unittests/compiler-dispatcher/compiler-dispatcher-unittest.cc
diff --git a/test/unittests/compiler-dispatcher/compiler-dispatcher-unittest.cc b/test/unittests/compiler-dispatcher/compiler-dispatcher-unittest.cc
index 2c9b47e371482b88408d8ae501cbe42794efe2be..5c2abf0faa462cb2840626f6c4d12eadb1dafa95 100644
--- a/test/unittests/compiler-dispatcher/compiler-dispatcher-unittest.cc
+++ b/test/unittests/compiler-dispatcher/compiler-dispatcher-unittest.cc
@@ -843,18 +843,19 @@ TEST_F(CompilerDispatcherTest, EnqueueParsed) {
MockPlatform platform;
CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size);
- const char script[] =
+ const char source[] =
"function g() { var y = 1; function f17(x) { return x * y }; return f17; "
"} g();";
- Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script));
+ Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), source));
Handle<SharedFunctionInfo> shared(f->shared(), i_isolate());
+ Handle<Script> script(Script::cast(shared->script()), i_isolate());
ParseInfo parse_info(shared);
ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info));
std::shared_ptr<DeferredHandles> handles;
ASSERT_FALSE(dispatcher.IsEnqueued(shared));
- ASSERT_TRUE(dispatcher.Enqueue(shared, parse_info.literal(),
+ ASSERT_TRUE(dispatcher.Enqueue(script, shared, parse_info.literal(),
parse_info.zone_shared(), handles, handles));
ASSERT_TRUE(dispatcher.IsEnqueued(shared));
@@ -870,18 +871,19 @@ TEST_F(CompilerDispatcherTest, EnqueueAndStepParsed) {
MockPlatform platform;
CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size);
- const char script[] =
+ const char source[] =
"function g() { var y = 1; function f18(x) { return x * y }; return f18; "
"} g();";
- Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script));
+ Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), source));
Handle<SharedFunctionInfo> shared(f->shared(), i_isolate());
+ Handle<Script> script(Script::cast(shared->script()), i_isolate());
ParseInfo parse_info(shared);
ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info));
std::shared_ptr<DeferredHandles> handles;
ASSERT_FALSE(dispatcher.IsEnqueued(shared));
- ASSERT_TRUE(dispatcher.EnqueueAndStep(shared, parse_info.literal(),
+ ASSERT_TRUE(dispatcher.EnqueueAndStep(script, shared, parse_info.literal(),
parse_info.zone_shared(), handles,
handles));
ASSERT_TRUE(dispatcher.IsEnqueued(shared));
@@ -895,55 +897,16 @@ TEST_F(CompilerDispatcherTest, EnqueueAndStepParsed) {
platform.ClearBackgroundTasks();
}
-TEST_F(CompilerDispatcherTest, FinishAllNow) {
- MockPlatform platform;
- CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size);
-
- const char script1[] =
- "function g() { var y = 1; function f19(x) { return x + y }; return f19; "
- "} g();";
- Handle<JSFunction> f1 = Handle<JSFunction>::cast(RunJS(isolate(), script1));
- Handle<SharedFunctionInfo> shared1(f1->shared(), i_isolate());
-
- const char script2[] =
- "function g() { var y = 1; function f20(x) { return x * y }; return f20; "
- "} g();";
- Handle<JSFunction> f2 = Handle<JSFunction>::cast(RunJS(isolate(), script2));
- Handle<SharedFunctionInfo> shared2(f2->shared(), i_isolate());
-
- ASSERT_FALSE(shared1->is_compiled());
- ASSERT_FALSE(shared2->is_compiled());
-
- // Enqueue shared1 as already parsed.
- ParseInfo parse_info(shared1);
- ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info));
- std::shared_ptr<DeferredHandles> handles;
- ASSERT_TRUE(dispatcher.Enqueue(shared1, parse_info.literal(),
- parse_info.zone_shared(), handles, handles));
-
- // Enqueue shared2 for parsing and compiling
- ASSERT_TRUE(dispatcher.Enqueue(shared2));
-
- ASSERT_TRUE(dispatcher.FinishAllNow());
-
- // Finishing removes the SFI from the queue.
- ASSERT_FALSE(dispatcher.IsEnqueued(shared1));
- ASSERT_FALSE(dispatcher.IsEnqueued(shared2));
- ASSERT_TRUE(shared1->is_compiled());
- ASSERT_TRUE(shared2->is_compiled());
- ASSERT_TRUE(platform.IdleTaskPending());
- platform.ClearIdleTask();
-}
-
TEST_F(CompilerDispatcherTest, CompileParsedOutOfScope) {
MockPlatform platform;
CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size);
- const char script[] =
+ const char source[] =
"function g() { var y = 1; function f20(x) { return x + y }; return f20; "
"} g();";
- Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script));
+ Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), source));
Handle<SharedFunctionInfo> shared(f->shared(), i_isolate());
+ Handle<Script> script(Script::cast(shared->script()), i_isolate());
{
HandleScope scope(i_isolate()); // Create handles scope for parsing.
@@ -959,7 +922,7 @@ TEST_F(CompilerDispatcherTest, CompileParsedOutOfScope) {
ASSERT_FALSE(platform.IdleTaskPending());
ASSERT_TRUE(dispatcher.Enqueue(
- shared, parse_info.literal(), parse_info.zone_shared(),
+ script, shared, parse_info.literal(), parse_info.zone_shared(),
parse_info.deferred_handles(), compilation_handles));
ASSERT_TRUE(platform.IdleTaskPending());
}
@@ -1033,7 +996,7 @@ TEST_F(CompilerDispatcherTestWithoutContext, CompileExtensionWithoutContext) {
ASSERT_FALSE(platform.IdleTaskPending());
ASSERT_TRUE(dispatcher.Enqueue(
- shared, parse_info.literal(), parse_info.zone_shared(),
+ script, shared, parse_info.literal(), parse_info.zone_shared(),
parse_info.deferred_handles(), compilation_handles));
ASSERT_TRUE(platform.IdleTaskPending());
}
@@ -1047,5 +1010,55 @@ TEST_F(CompilerDispatcherTestWithoutContext, CompileExtensionWithoutContext) {
ASSERT_TRUE(shared->is_compiled());
}
+TEST_F(CompilerDispatcherTest, CompileLazyFinishesDispatcherJob) {
+ // Use the real dispatcher so that CompileLazy checks the same one for
+ // enqueued functions.
+ CompilerDispatcher* dispatcher = i_isolate()->compiler_dispatcher();
+
+ const char source[] =
+ "function g() { var y = 1; function f16(x) { return x * y }; return f16; "
+ "} g();";
+ Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), source));
+ Handle<SharedFunctionInfo> shared(f->shared(), i_isolate());
+
+ ASSERT_FALSE(shared->is_compiled());
+ ASSERT_FALSE(dispatcher->IsEnqueued(shared));
+ ASSERT_TRUE(dispatcher->Enqueue(shared));
+ ASSERT_TRUE(dispatcher->IsEnqueued(shared));
+
+ // Now force the function to run and ensure CompileLazy finished and dequeues
+ // it from the dispatcher.
+ RunJS(isolate(), "g()();");
+ ASSERT_TRUE(shared->is_compiled());
+ ASSERT_FALSE(dispatcher->IsEnqueued(shared));
+}
+
+TEST_F(CompilerDispatcherTest, CompileLazy2FinishesDispatcherJob) {
+ // Use the real dispatcher so that CompileLazy checks the same one for
+ // enqueued functions.
+ CompilerDispatcher* dispatcher = i_isolate()->compiler_dispatcher();
+
+ const char source2[] = "function lazy2() { return 42; }; lazy2;";
+ Handle<JSFunction> lazy2 =
+ Handle<JSFunction>::cast(RunJS(isolate(), source2));
+ Handle<SharedFunctionInfo> shared2(lazy2->shared(), i_isolate());
+ ASSERT_FALSE(shared2->is_compiled());
+
+ const char source1[] = "function lazy1() { return lazy2(); }; lazy1;";
+ Handle<JSFunction> lazy1 =
+ Handle<JSFunction>::cast(RunJS(isolate(), source1));
+ Handle<SharedFunctionInfo> shared1(lazy1->shared(), i_isolate());
+ ASSERT_FALSE(shared1->is_compiled());
+
+ ASSERT_TRUE(dispatcher->Enqueue(shared1));
+ ASSERT_TRUE(dispatcher->Enqueue(shared2));
+
+ RunJS(isolate(), "lazy1();");
+ ASSERT_TRUE(shared1->is_compiled());
+ ASSERT_TRUE(shared2->is_compiled());
+ ASSERT_FALSE(dispatcher->IsEnqueued(shared1));
+ ASSERT_FALSE(dispatcher->IsEnqueued(shared2));
+}
+
} // namespace internal
} // namespace v8
« no previous file with comments | « src/compiler-dispatcher/compiler-dispatcher-job.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698