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

Unified Diff: src/heap/incremental-marking.cc

Issue 1404523002: [heap] inline allocation steps refactor (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Use virtual functions instead of callbacks Created 5 years, 2 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: src/heap/incremental-marking.cc
diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc
index 3e5e6c0697cd505bf49880d407891ef8f938458a..4064b46700b92b715ffa0aad4c80e0e1f4048e60 100644
--- a/src/heap/incremental-marking.cc
+++ b/src/heap/incremental-marking.cc
@@ -17,6 +17,22 @@
namespace v8 {
namespace internal {
+class IncrementalMarkingObserver : public InlineAllocationObserver {
+ public:
+ IncrementalMarkingObserver(IncrementalMarking& incremental_marking,
+ intptr_t step_size)
+ : InlineAllocationObserver(step_size),
+ incremental_marking_(incremental_marking) {}
+
+ virtual void Step(int bytes_allocated) {
+ incremental_marking_.Step(bytes_allocated,
+ IncrementalMarking::GC_VIA_STACK_GUARD);
+ }
+
+ private:
+ IncrementalMarking& incremental_marking_;
+};
+
IncrementalMarking::StepActions IncrementalMarking::IdleStepActions() {
return StepActions(IncrementalMarking::NO_GC_VIA_STACK_GUARD,
@@ -27,6 +43,7 @@ IncrementalMarking::StepActions IncrementalMarking::IdleStepActions() {
IncrementalMarking::IncrementalMarking(Heap* heap)
: heap_(heap),
+ observer_(nullptr),
state_(STOPPED),
is_compacting_(false),
steps_count_(0),
@@ -569,7 +586,9 @@ void IncrementalMarking::Start(const char* reason) {
state_ = SWEEPING;
}
- heap_->LowerInlineAllocationLimit(kAllocatedThreshold);
+ observer_ = new IncrementalMarkingObserver(*this, kAllocatedThreshold);
ulan 2015/10/22 09:02:22 I think we can bind the lifetime of the observer t
ofrobots 2015/10/26 21:55:01 Done.
+ heap_->new_space()->AddInlineAllocationObserver(observer_);
+
incremental_marking_job()->Start(heap_);
}
@@ -821,7 +840,13 @@ void IncrementalMarking::Stop() {
if (FLAG_trace_incremental_marking) {
PrintF("[IncrementalMarking] Stopping.\n");
}
- heap_->ResetInlineAllocationLimit();
+
+ if (observer_) {
+ heap_->new_space()->RemoveInlineAllocationObserver(observer_);
+ delete observer_;
Hannes Payer (out of office) 2015/10/22 09:14:14 Let's allocate/delete the observer at heap setup/s
ofrobots 2015/10/26 21:55:01 Done as per Ulan's suggestion above.
+ observer_ = nullptr;
+ }
+
IncrementalMarking::set_should_hurry(false);
ResetStepCounters();
if (IsMarking()) {
@@ -849,7 +874,12 @@ void IncrementalMarking::Finalize() {
Hurry();
state_ = STOPPED;
is_compacting_ = false;
- heap_->ResetInlineAllocationLimit();
+
+ if (observer_) {
+ heap_->new_space()->RemoveInlineAllocationObserver(observer_);
+ delete observer_;
+ observer_ = nullptr;
+ }
IncrementalMarking::set_should_hurry(false);
ResetStepCounters();
PatchIncrementalMarkingRecordWriteStubs(heap_,

Powered by Google App Engine
This is Rietveld 408576698