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

Unified Diff: runtime/vm/scavenger.cc

Issue 474913004: - Account for number of pending tasks in old-space collections. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 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
Index: runtime/vm/scavenger.cc
===================================================================
--- runtime/vm/scavenger.cc (revision 39381)
+++ runtime/vm/scavenger.cc (working copy)
@@ -13,12 +13,12 @@
#include "vm/isolate.h"
#include "vm/lockers.h"
#include "vm/object.h"
+#include "vm/object_id_ring.h"
#include "vm/stack_frame.h"
#include "vm/store_buffer.h"
#include "vm/verifier.h"
#include "vm/visitor.h"
#include "vm/weak_table.h"
-#include "vm/object_id_ring.h"
namespace dart {
@@ -81,6 +81,7 @@
scavenger_(scavenger),
heap_(scavenger->heap_),
vm_heap_(Dart::vm_isolate()->heap()),
+ page_space_(scavenger->heap_->old_space()),
visited_count_(0),
handled_count_(0),
delayed_weak_stack_(),
@@ -204,8 +205,8 @@
//
// This object is a survivor of a previous scavenge. Attempt to promote
// the object.
- new_addr =
- heap_->TryAllocate(size, Heap::kOld, PageSpace::kForceGrowth);
+ new_addr = page_space_->TryAllocateDataLocked(size,
+ PageSpace::kForceGrowth);
if (new_addr != 0) {
// If promotion succeeded then we need to remember it so that it can
// be traversed later.
@@ -240,6 +241,7 @@
Scavenger* scavenger_;
Heap* heap_;
Heap* vm_heap_;
+ PageSpace* page_space_;
intptr_t visited_count_;
intptr_t handled_count_;
typedef std::multimap<RawObject*, RawWeakProperty*> DelaySet;
@@ -781,6 +783,7 @@
ASSERT(!scavenging_);
scavenging_ = true;
Isolate* isolate = heap_->isolate();
+ PageSpace* page_space = heap_->old_space();
NoHandleScope no_handles(isolate);
if (FLAG_verify_before_gc) {
@@ -796,6 +799,7 @@
(survivor_end_ - FirstObjectStart()) / kWordSize;
Prologue(isolate, invoke_api_callbacks);
const bool prologue_weak_are_strong = !invoke_api_callbacks;
+ page_space->AcquireDataLock();
IterateRoots(isolate, &visitor, prologue_weak_are_strong);
int64_t start = OS::GetCurrentTimeMicros();
ProcessToSpace(&visitor);
@@ -807,6 +811,7 @@
IterateWeakRoots(isolate, &weak_visitor, visit_prologue_weak_handles);
visitor.Finalize();
ProcessWeakTables();
+ page_space->ReleaseDataLock();
int64_t end = OS::GetCurrentTimeMicros();
heap_->RecordTime(kProcessToSpace, middle - start);
heap_->RecordTime(kIterateWeaks, end - middle);

Powered by Google App Engine
This is Rietveld 408576698