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

Unified Diff: runtime/vm/compiler.cc

Issue 1433463002: Allocate some data structures in old instead of in new space. Early inlining bailout for native fun… (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Spelling error Created 5 years, 1 month 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/dart_api_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/compiler.cc
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index f3c7ab75d27f99f59231d5fc97cbc220955f9149..0422cf3062225d5d95e6afc8864364ea6deb5e3a 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -1497,7 +1497,7 @@ class CompilationWorkQueue : public ValueObject {
}
// Insert new element in front.
Object& f = Object::Handle();
- data_->Add(f);
+ data_->Add(f, Heap::kOld);
for (intptr_t i = data_->Length() - 1; i > 0; i--) {
f = data_->At(i - 1);
data_->SetAt(i, f);
@@ -1629,8 +1629,8 @@ void BackgroundCompiler::Run() {
{
Thread* thread = Thread::Current();
StackZone stack_zone(thread);
- HANDLESCOPE(thread);
Zone* zone = stack_zone.GetZone();
+ HANDLESCOPE(thread);
Function& function = Function::Handle(zone);
Function& temp_function = Function::Handle(zone);
function = LastFunctionOrNull();
@@ -1664,7 +1664,10 @@ void BackgroundCompiler::Run() {
ml.Wait();
}
}
- }
+ } // while running
+
+ compilation_function_queue_ = GrowableObjectArray::null();
+ compilation_result_queue_ = GrowableObjectArray::null();
{
// Notify that the thread is done.
MonitorLocker ml_done(done_monitor_);
@@ -1772,7 +1775,7 @@ void BackgroundCompiler::Stop(BackgroundCompiler* task) {
if (task == NULL) {
return;
}
- Monitor* monitor = task->queue_monitor_;
+ Monitor* queue_monitor = task->queue_monitor_;
Monitor* done_monitor = task->done_monitor_;
bool* task_done = task->done_;
// Wake up compiler task and stop it.
@@ -1792,7 +1795,7 @@ void BackgroundCompiler::Stop(BackgroundCompiler* task) {
}
delete task_done;
delete done_monitor;
- delete monitor;
+ delete queue_monitor;
Isolate::Current()->set_background_compiler(NULL);
}
@@ -1805,10 +1808,17 @@ void BackgroundCompiler::EnsureInit(Thread* thread) {
if (isolate->background_compiler() == NULL) {
BackgroundCompiler* task = new BackgroundCompiler(isolate);
isolate->set_background_compiler(task);
- task->set_compilation_function_queue(GrowableObjectArray::Handle(
- thread->zone(), GrowableObjectArray::New()));
- task->set_compilation_result_queue(GrowableObjectArray::Handle(
- thread->zone(), GrowableObjectArray::New()));
+ // TODO(srdjan): Temporary fix to prevent growing (and thus GC-ing) of
+ // queues while inside a MonitorLocker. Will replace GrowableObjectArray
+ // with C heap allocated linked list.
+ GrowableObjectArray& a = GrowableObjectArray::Handle(
+ thread->zone(), GrowableObjectArray::New(Heap::kOld));
+ a.Grow(1000, Heap::kOld);
+ task->set_compilation_function_queue(a);
+
+ a = GrowableObjectArray::New(Heap::kOld);
+ a.Grow(1000, Heap::kOld);
+ task->set_compilation_result_queue(a);
start_task = true;
}
}
« no previous file with comments | « no previous file | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698