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

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

Issue 2679193004: [Compiler] Ensure we enter the correct context for compiler-dispatcher jobs. (Closed)
Patch Set: 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') | test/unittests/test-utils.h » ('j') | 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 246645aea93d2d0e62b3af5d86da396ce95c7dcc..921d65ad0bcb4d08a3bd3baa829baa680167263c 100644
--- a/test/unittests/compiler-dispatcher/compiler-dispatcher-unittest.cc
+++ b/test/unittests/compiler-dispatcher/compiler-dispatcher-unittest.cc
@@ -21,34 +21,72 @@
namespace v8 {
namespace internal {
+class CompilerDispatcherTestFlags {
+ public:
+ static void SetFlagsForTest() {
+ old_compiler_dispatcher_flag_ = i::FLAG_compiler_dispatcher;
+ i::FLAG_compiler_dispatcher = true;
+ old_ignition_flag_ = i::FLAG_ignition;
+ i::FLAG_ignition = true;
+ old_allow_natives_syntax_flag_ = i::FLAG_allow_natives_syntax;
+ i::FLAG_allow_natives_syntax = true;
+ }
+
+ static void RestoreFlags() {
+ i::FLAG_compiler_dispatcher = old_compiler_dispatcher_flag_;
+ i::FLAG_ignition = old_ignition_flag_;
+ i::FLAG_allow_natives_syntax = old_allow_natives_syntax_flag_;
+ }
+
+ private:
+ static bool old_compiler_dispatcher_flag_;
+ static bool old_ignition_flag_;
+ static bool old_allow_natives_syntax_flag_;
+
+ DISALLOW_IMPLICIT_CONSTRUCTORS(CompilerDispatcherTestFlags);
+};
+
+bool CompilerDispatcherTestFlags::old_compiler_dispatcher_flag_;
+bool CompilerDispatcherTestFlags::old_ignition_flag_;
+bool CompilerDispatcherTestFlags::old_allow_natives_syntax_flag_;
+
class CompilerDispatcherTest : public TestWithContext {
public:
CompilerDispatcherTest() = default;
~CompilerDispatcherTest() override = default;
static void SetUpTestCase() {
- old_flag_ = i::FLAG_ignition;
- i::FLAG_compiler_dispatcher = true;
- old_ignition_flag_ = i::FLAG_ignition;
- i::FLAG_ignition = true;
+ CompilerDispatcherTestFlags::SetFlagsForTest();
TestWithContext::SetUpTestCase();
}
static void TearDownTestCase() {
TestWithContext::TearDownTestCase();
- i::FLAG_compiler_dispatcher = old_flag_;
- i::FLAG_ignition = old_ignition_flag_;
+ CompilerDispatcherTestFlags::RestoreFlags();
}
private:
- static bool old_flag_;
- static bool old_ignition_flag_;
-
DISALLOW_COPY_AND_ASSIGN(CompilerDispatcherTest);
};
-bool CompilerDispatcherTest::old_flag_;
-bool CompilerDispatcherTest::old_ignition_flag_;
+class CompilerDispatcherTestWithoutContext : public v8::TestWithIsolate {
+ public:
+ CompilerDispatcherTestWithoutContext() = default;
+ ~CompilerDispatcherTestWithoutContext() override = default;
+
+ static void SetUpTestCase() {
+ CompilerDispatcherTestFlags::SetFlagsForTest();
+ TestWithContext::SetUpTestCase();
+ }
+
+ static void TearDownTestCase() {
+ TestWithContext::TearDownTestCase();
+ CompilerDispatcherTestFlags::RestoreFlags();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(CompilerDispatcherTestWithoutContext);
+};
namespace {
@@ -900,5 +938,65 @@ TEST_F(CompilerDispatcherTest, FinishAllNow) {
platform.ClearIdleTask();
}
+static const char kExtensionSource[] = "native function Dummy();";
jochen (gone - plz use gerrit) 2017/02/08 18:52:58 put this (and the class) in an anonymous namespace
rmcilroy 2017/02/08 22:49:23 Done.
+
+class MockNativeFunctionExtension : public Extension {
+ public:
+ MockNativeFunctionExtension()
+ : Extension("mock-extension", kExtensionSource), function_(&Dummy) {}
+
+ virtual v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate(
+ v8::Isolate* isolate, v8::Local<v8::String> name) {
+ return v8::FunctionTemplate::New(isolate, function_);
+ }
+
+ static void Dummy(const v8::FunctionCallbackInfo<v8::Value>& args) { return; }
+
+ private:
+ v8::FunctionCallback function_;
+};
jochen (gone - plz use gerrit) 2017/02/08 18:52:58 disallow copy/assign
rmcilroy 2017/02/08 22:49:23 Done.
+
+TEST_F(CompilerDispatcherTestWithoutContext, CompileExtensionWithoutContext) {
+ MockPlatform platform;
+ CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size);
+ Local<v8::Context> context = v8::Context::New(isolate());
+
+ MockNativeFunctionExtension extension;
+ Handle<String> script_str =
+ i_isolate()
+ ->factory()
+ ->NewStringFromUtf8(CStrVector(kExtensionSource))
+ .ToHandleChecked();
+ Handle<Script> script = i_isolate()->factory()->NewScript(script_str);
+ script->set_type(Script::TYPE_EXTENSION);
+
+ ParseInfo parse_info(script);
+ parse_info.set_extension(&extension);
+
+ std::shared_ptr<DeferredHandles> handles;
+ Handle<SharedFunctionInfo> shared;
+ {
+ v8::Context::Scope scope(context);
+ ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info));
+
+ shared = i_isolate()->factory()->NewSharedFunctionInfoForLiteral(
+ parse_info.literal(), script);
+ parse_info.set_shared_info(shared);
+
+ ASSERT_FALSE(platform.IdleTaskPending());
+ ASSERT_TRUE(dispatcher.Enqueue(shared, parse_info.literal(),
+ parse_info.zone_shared(), handles, handles));
+ ASSERT_TRUE(platform.IdleTaskPending());
+ }
+ // Exit the context scope before running the idle task.
+
+ // Since time doesn't progress on the MockPlatform, this is enough idle time
+ // to finish compiling the function.
+ platform.RunIdleTask(1000.0, 0.0);
+
+ ASSERT_FALSE(dispatcher.IsEnqueued(shared));
+ ASSERT_TRUE(shared->is_compiled());
+}
+
} // namespace internal
} // namespace v8
« no previous file with comments | « src/compiler-dispatcher/compiler-dispatcher-job.cc ('k') | test/unittests/test-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698