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

Unified Diff: runtime/vm/compiler_test.cc

Issue 1302623002: Only test optimizing compilation in helper thread compilation test. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Update URL. Created 5 years, 4 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 | « no previous file | runtime/vm/object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/compiler_test.cc
diff --git a/runtime/vm/compiler_test.cc b/runtime/vm/compiler_test.cc
index c56ba377bebdbfd9c0e3ba6cb8f5375c1a686e82..2382a7424208bede2e710ed63b9ebd2e3a772f24 100644
--- a/runtime/vm/compiler_test.cc
+++ b/runtime/vm/compiler_test.cc
@@ -29,7 +29,7 @@ TEST_CASE(CompileScript) {
}
-static void CompileFunctionImpl() {
+TEST_CASE(CompileFunction) {
const char* kScriptChars =
"class A {\n"
" static foo() { return 42; }\n"
@@ -70,18 +70,14 @@ static void CompileFunctionImpl() {
}
-TEST_CASE(CompileFunction) {
- CompileFunctionImpl();
-}
-
-
-// Runs 'CompileFunctionImpl' on a helper thread.
class CompileFunctionTask : public ThreadPool::Task {
public:
CompileFunctionTask(Isolate* isolate,
- Monitor* done_monitor,
- bool* done)
+ const Function& func,
+ Monitor* done_monitor,
+ bool* done)
: isolate_(isolate),
+ func_(func),
done_monitor_(done_monitor),
done_(done) {
}
@@ -92,7 +88,11 @@ class CompileFunctionTask : public ThreadPool::Task {
Thread* thread = Thread::Current();
StackZone stack_zone(thread);
HANDLESCOPE(thread);
- CompileFunctionImpl();
+ EXPECT(!func_.HasOptimizedCode());
srdjan 2015/08/18 23:07:18 Assert that function has (unoptimized) code. We ex
koda 2015/08/19 00:16:32 Yes, although I'm already doing that in the code b
+ const Error& err =
+ Error::Handle(Compiler::CompileOptimizedFunction(thread, func_));
+ EXPECT(err.IsNull());
+ EXPECT(func_.HasOptimizedCode());
}
Thread::ExitIsolateAsHelper();
// Tell main thread that we are done.
@@ -106,6 +106,7 @@ class CompileFunctionTask : public ThreadPool::Task {
private:
Isolate* isolate_;
+ const Function& func_;
Monitor* done_monitor_;
bool* done_;
};
@@ -120,8 +121,35 @@ TEST_CASE(CompileFunctionOnHelperThread) {
// the helper, in this test), but it should be done for all *threads*
// after/at safepointing.
Thread::PrepareForGC();
+
+ // Create a simple function and compile it without optimization.
+ const char* kScriptChars =
+ "class A {\n"
+ " static foo() { return 42; }\n"
+ "}\n";
+ String& url =
+ String::Handle(String::New("dart-test:CompileFunctionOnHelperThread"));
+ String& source = String::Handle(String::New(kScriptChars));
+ Script& script = Script::Handle(Script::New(url,
+ source,
+ RawScript::kScriptTag));
+ Library& lib = Library::Handle(Library::CoreLibrary());
+ EXPECT(CompilerTest::TestCompileScript(lib, script));
+ EXPECT(ClassFinalizer::ProcessPendingClasses());
+ Class& cls = Class::Handle(
+ lib.LookupClass(String::Handle(Symbols::New("A"))));
+ EXPECT(!cls.IsNull());
+ String& function_foo_name = String::Handle(String::New("foo"));
+ Function& func =
+ Function::Handle(cls.LookupStaticFunction(function_foo_name));
+ EXPECT(!func.HasCode());
+ CompilerTest::TestCompileFunction(func);
+ EXPECT(func.HasCode());
+ EXPECT(!func.HasOptimizedCode());
+
+ // Now optimize it on a helper thread.
Dart::thread_pool()->Run(
- new CompileFunctionTask(isolate, &done_monitor, &done));
+ new CompileFunctionTask(isolate, func, &done_monitor, &done));
{
// Manually wait.
// TODO(koda): Replace with execution of Dart and/or VM code when GC
« no previous file with comments | « no previous file | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698