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

Side by Side Diff: src/gc-tracer.cc

Issue 410413007: Always trace garbage collection events in GCTracer. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/gc-tracer.h" 7 #include "src/gc-tracer.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 incremental_marking_duration_(0.0), 71 incremental_marking_duration_(0.0),
72 longest_incremental_marking_step_(0.0) { 72 longest_incremental_marking_step_(0.0) {
73 current_ = Event(Event::START, NULL, NULL); 73 current_ = Event(Event::START, NULL, NULL);
74 current_.end_time = base::OS::TimeCurrentMillis(); 74 current_.end_time = base::OS::TimeCurrentMillis();
75 previous_ = previous_mark_compactor_event_ = current_; 75 previous_ = previous_mark_compactor_event_ = current_;
76 } 76 }
77 77
78 78
79 void GCTracer::Start(GarbageCollector collector, const char* gc_reason, 79 void GCTracer::Start(GarbageCollector collector, const char* gc_reason,
80 const char* collector_reason) { 80 const char* collector_reason) {
81 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return;
82
83 previous_ = current_; 81 previous_ = current_;
84 if (current_.type == Event::MARK_COMPACTOR) 82 if (current_.type == Event::MARK_COMPACTOR)
85 previous_mark_compactor_event_ = current_; 83 previous_mark_compactor_event_ = current_;
86 84
87 if (collector == SCAVENGER) { 85 if (collector == SCAVENGER) {
88 current_ = Event(Event::SCAVENGER, gc_reason, collector_reason); 86 current_ = Event(Event::SCAVENGER, gc_reason, collector_reason);
89 } else { 87 } else {
90 current_ = Event(Event::MARK_COMPACTOR, gc_reason, collector_reason); 88 current_ = Event(Event::MARK_COMPACTOR, gc_reason, collector_reason);
91 } 89 }
92 90
93 current_.start_time = base::OS::TimeCurrentMillis(); 91 current_.start_time = base::OS::TimeCurrentMillis();
94 current_.start_object_size = heap_->SizeOfObjects(); 92 current_.start_object_size = heap_->SizeOfObjects();
95 current_.start_memory_size = heap_->isolate()->memory_allocator()->Size(); 93 current_.start_memory_size = heap_->isolate()->memory_allocator()->Size();
96 current_.start_holes_size = CountTotalHolesSize(heap_); 94 current_.start_holes_size = CountTotalHolesSize(heap_);
97 95
98 current_.incremental_marking_steps = incremental_marking_steps_; 96 current_.incremental_marking_steps = incremental_marking_steps_;
99 current_.incremental_marking_duration = incremental_marking_duration_; 97 current_.incremental_marking_duration = incremental_marking_duration_;
100 current_.longest_incremental_marking_step = longest_incremental_marking_step_; 98 current_.longest_incremental_marking_step = longest_incremental_marking_step_;
101 99
102 for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) { 100 for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) {
103 current_.scopes[i] = 0; 101 current_.scopes[i] = 0;
104 } 102 }
105 } 103 }
106 104
107 105
108 void GCTracer::Stop() { 106 void GCTracer::Stop() {
109 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return;
110
111 current_.end_time = base::OS::TimeCurrentMillis(); 107 current_.end_time = base::OS::TimeCurrentMillis();
112 current_.end_object_size = heap_->SizeOfObjects(); 108 current_.end_object_size = heap_->SizeOfObjects();
113 current_.end_memory_size = heap_->isolate()->memory_allocator()->Size(); 109 current_.end_memory_size = heap_->isolate()->memory_allocator()->Size();
114 current_.end_holes_size = CountTotalHolesSize(heap_); 110 current_.end_holes_size = CountTotalHolesSize(heap_);
115 111
116 if (current_.type == Event::SCAVENGER) { 112 if (current_.type == Event::SCAVENGER) {
117 scavenger_events_.push_front(current_); 113 scavenger_events_.push_front(current_);
118 } else { 114 } else {
119 mark_compactor_events_.push_front(current_); 115 mark_compactor_events_.push_front(current_);
120 } 116 }
121 117
122 if (current_.type == Event::MARK_COMPACTOR) 118 if (current_.type == Event::MARK_COMPACTOR)
123 longest_incremental_marking_step_ = 0.0; 119 longest_incremental_marking_step_ = 0.0;
124 120
121 // TODO(ernstm): move the code below out of GCTracer.
122
123 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return;
124
125 double duration = current_.end_time - current_.start_time; 125 double duration = current_.end_time - current_.start_time;
126 double spent_in_mutator = Max(current_.start_time - previous_.end_time, 0.0); 126 double spent_in_mutator = Max(current_.start_time - previous_.end_time, 0.0);
127 127
128 heap_->UpdateCumulativeGCStatistics(duration, spent_in_mutator, 128 heap_->UpdateCumulativeGCStatistics(duration, spent_in_mutator,
129 current_.scopes[Scope::MC_MARK]); 129 current_.scopes[Scope::MC_MARK]);
130 130
131 if (current_.type == Event::SCAVENGER && FLAG_trace_gc_ignore_scavenger) 131 if (current_.type == Event::SCAVENGER && FLAG_trace_gc_ignore_scavenger)
132 return; 132 return;
133 133
134 if (FLAG_trace_gc) { 134 if (FLAG_trace_gc) {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 308
309 309
310 double GCTracer::MaxIncrementalMarkingDuration() const { 310 double GCTracer::MaxIncrementalMarkingDuration() const {
311 if (mark_compactor_events_.empty()) return 0.0; 311 if (mark_compactor_events_.empty()) return 0.0;
312 312
313 EventBuffer::const_iterator last_mc = mark_compactor_events_.begin(); 313 EventBuffer::const_iterator last_mc = mark_compactor_events_.begin();
314 return last_mc->longest_incremental_marking_step; 314 return last_mc->longest_incremental_marking_step;
315 } 315 }
316 } 316 }
317 } // namespace v8::internal 317 } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/incremental-marking.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698