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

Side by Side Diff: src/heap/heap.cc

Issue 771703004: Slow down incremental marking on main thread when idle notification is active. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years 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 unified diff | Download patch
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/incremental-marking.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 nodes_died_in_new_space_(0), 113 nodes_died_in_new_space_(0),
114 nodes_copied_in_new_space_(0), 114 nodes_copied_in_new_space_(0),
115 nodes_promoted_(0), 115 nodes_promoted_(0),
116 maximum_size_scavenges_(0), 116 maximum_size_scavenges_(0),
117 max_gc_pause_(0.0), 117 max_gc_pause_(0.0),
118 total_gc_time_ms_(0.0), 118 total_gc_time_ms_(0.0),
119 max_alive_after_gc_(0), 119 max_alive_after_gc_(0),
120 min_in_mutator_(kMaxInt), 120 min_in_mutator_(kMaxInt),
121 marking_time_(0.0), 121 marking_time_(0.0),
122 sweeping_time_(0.0), 122 sweeping_time_(0.0),
123 last_idle_notification_time_(0.0),
123 mark_compact_collector_(this), 124 mark_compact_collector_(this),
124 store_buffer_(this), 125 store_buffer_(this),
125 marking_(this), 126 marking_(this),
126 incremental_marking_(this), 127 incremental_marking_(this),
127 gc_count_at_last_idle_gc_(0), 128 gc_count_at_last_idle_gc_(0),
128 full_codegen_bytes_generated_(0), 129 full_codegen_bytes_generated_(0),
129 crankshaft_codegen_bytes_generated_(0), 130 crankshaft_codegen_bytes_generated_(0),
130 gcs_since_last_deopt_(0), 131 gcs_since_last_deopt_(0),
131 #ifdef VERIFY_HEAP 132 #ifdef VERIFY_HEAP
132 no_weak_object_verification_scope_depth_(0), 133 no_weak_object_verification_scope_depth_(0),
(...skipping 4390 matching lines...) Expand 10 before | Expand all | Expand 10 after
4523 CollectGarbage(NEW_SPACE, "idle notification: scavenge"); 4524 CollectGarbage(NEW_SPACE, "idle notification: scavenge");
4524 break; 4525 break;
4525 case DO_FINALIZE_SWEEPING: 4526 case DO_FINALIZE_SWEEPING:
4526 mark_compact_collector()->EnsureSweepingCompleted(); 4527 mark_compact_collector()->EnsureSweepingCompleted();
4527 break; 4528 break;
4528 case DO_NOTHING: 4529 case DO_NOTHING:
4529 break; 4530 break;
4530 } 4531 }
4531 4532
4532 double current_time = MonotonicallyIncreasingTimeInMs(); 4533 double current_time = MonotonicallyIncreasingTimeInMs();
4534 last_idle_notification_time_ = current_time;
4533 double deadline_difference = deadline_in_ms - current_time; 4535 double deadline_difference = deadline_in_ms - current_time;
4534 4536
4535 if (deadline_difference >= 0) { 4537 if (deadline_difference >= 0) {
4536 if (action.type != DONE && action.type != DO_NOTHING) { 4538 if (action.type != DONE && action.type != DO_NOTHING) {
4537 isolate()->counters()->gc_idle_time_limit_undershot()->AddSample( 4539 isolate()->counters()->gc_idle_time_limit_undershot()->AddSample(
4538 static_cast<int>(deadline_difference)); 4540 static_cast<int>(deadline_difference));
4539 } 4541 }
4540 } else { 4542 } else {
4541 isolate()->counters()->gc_idle_time_limit_overshot()->AddSample( 4543 isolate()->counters()->gc_idle_time_limit_overshot()->AddSample(
4542 static_cast<int>(-deadline_difference)); 4544 static_cast<int>(-deadline_difference));
(...skipping 14 matching lines...) Expand all
4557 PrintF("]"); 4559 PrintF("]");
4558 } 4560 }
4559 PrintF("\n"); 4561 PrintF("\n");
4560 } 4562 }
4561 4563
4562 contexts_disposed_ = 0; 4564 contexts_disposed_ = 0;
4563 return result; 4565 return result;
4564 } 4566 }
4565 4567
4566 4568
4569 bool Heap::RecentIdleNotifcationHappened() {
4570 return (last_idle_notification_time_ +
4571 GCIdleTimeHandler::kMaxFrameRenderingIdleTime) >
4572 MonotonicallyIncreasingTimeInMs();
4573 }
4574
4575
4567 #ifdef DEBUG 4576 #ifdef DEBUG
4568 4577
4569 void Heap::Print() { 4578 void Heap::Print() {
4570 if (!HasBeenSetUp()) return; 4579 if (!HasBeenSetUp()) return;
4571 isolate()->PrintStack(stdout); 4580 isolate()->PrintStack(stdout);
4572 AllSpaces spaces(this); 4581 AllSpaces spaces(this);
4573 for (Space* space = spaces.next(); space != NULL; space = spaces.next()) { 4582 for (Space* space = spaces.next(); space != NULL; space = spaces.next()) {
4574 space->Print(); 4583 space->Print();
4575 } 4584 }
4576 } 4585 }
(...skipping 1799 matching lines...) Expand 10 before | Expand all | Expand 10 after
6376 static_cast<int>(object_sizes_last_time_[index])); 6385 static_cast<int>(object_sizes_last_time_[index]));
6377 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) 6386 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT)
6378 #undef ADJUST_LAST_TIME_OBJECT_COUNT 6387 #undef ADJUST_LAST_TIME_OBJECT_COUNT
6379 6388
6380 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); 6389 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_));
6381 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); 6390 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_));
6382 ClearObjectStats(); 6391 ClearObjectStats();
6383 } 6392 }
6384 } 6393 }
6385 } // namespace v8::internal 6394 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/incremental-marking.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698