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

Unified Diff: src/heap/heap.cc

Issue 1153763003: Idle old generation limit is used when allocation rate is low. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 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/heap/heap.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index 74f4ac1412bebf28f023dbca26da68fc70eced9a..09f4cc71278e39c57be57099f4c08aedcef34cbd 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -4602,23 +4602,13 @@ bool Heap::TryFinalizeIdleIncrementalMarking(
}
-GCIdleTimeHandler::HeapState Heap::ComputeHeapState(bool reduce_memory) {
+GCIdleTimeHandler::HeapState Heap::ComputeHeapState() {
GCIdleTimeHandler::HeapState heap_state;
heap_state.contexts_disposed = contexts_disposed_;
heap_state.contexts_disposal_rate =
tracer()->ContextDisposalRateInMilliseconds();
heap_state.size_of_objects = static_cast<size_t>(SizeOfObjects());
heap_state.incremental_marking_stopped = incremental_marking()->IsStopped();
- // TODO(ulan): Start incremental marking only for large heaps.
- intptr_t limit = old_generation_allocation_limit_;
- if (reduce_memory) {
- limit = idle_old_generation_allocation_limit_;
- }
-
- heap_state.can_start_incremental_marking =
- incremental_marking()->CanBeActivated() &&
- HeapIsFullEnoughToStartIncrementalMarking(limit) &&
- !mark_compact_collector()->sweeping_in_progress();
heap_state.sweeping_in_progress =
mark_compact_collector()->sweeping_in_progress();
heap_state.sweeping_completed =
@@ -4638,6 +4628,15 @@ GCIdleTimeHandler::HeapState Heap::ComputeHeapState(bool reduce_memory) {
tracer()->NewSpaceAllocationThroughputInBytesPerMillisecond();
heap_state.current_new_space_allocation_throughput_in_bytes_per_ms =
tracer()->CurrentNewSpaceAllocationThroughputInBytesPerMillisecond();
+ intptr_t limit = old_generation_allocation_limit_;
+ if (HasLowAllocationRate(
+ heap_state.current_new_space_allocation_throughput_in_bytes_per_ms)) {
+ limit = idle_old_generation_allocation_limit_;
+ }
+ heap_state.can_start_incremental_marking =
+ incremental_marking()->CanBeActivated() &&
+ HeapIsFullEnoughToStartIncrementalMarking(limit) &&
+ !mark_compact_collector()->sweeping_in_progress();
return heap_state;
}
@@ -4773,7 +4772,6 @@ bool Heap::IdleNotification(int idle_time_in_ms) {
bool Heap::IdleNotification(double deadline_in_seconds) {
CHECK(HasBeenSetUp());
- static const double kLastGCTimeTreshold = 1000;
double deadline_in_ms =
deadline_in_seconds *
static_cast<double>(base::Time::kMillisecondsPerSecond);
@@ -4784,14 +4782,12 @@ bool Heap::IdleNotification(double deadline_in_seconds) {
bool is_long_idle_notification =
static_cast<size_t>(idle_time_in_ms) >
GCIdleTimeHandler::kMaxFrameRenderingIdleTime;
- bool has_low_gc_activity = (start_ms - last_gc_time_) > kLastGCTimeTreshold;
if (is_long_idle_notification) {
tracer()->SampleNewSpaceAllocation(start_ms, NewSpaceAllocationCounter());
}
- GCIdleTimeHandler::HeapState heap_state =
- ComputeHeapState(is_long_idle_notification && has_low_gc_activity);
+ GCIdleTimeHandler::HeapState heap_state = ComputeHeapState();
GCIdleTimeAction action =
gc_idle_time_handler_.Compute(idle_time_in_ms, heap_state);
« no previous file with comments | « src/heap/heap.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698