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

Side by Side Diff: src/heap/gc-tracer.h

Issue 578453003: Measure new space allocation throughput. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 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/heap/gc-tracer.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 #ifndef V8_HEAP_GC_TRACER_H_ 5 #ifndef V8_HEAP_GC_TRACER_H_
6 #define V8_HEAP_GC_TRACER_H_ 6 #define V8_HEAP_GC_TRACER_H_
7 7
8 #include "src/base/platform/platform.h" 8 #include "src/base/platform/platform.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 122
123 private: 123 private:
124 GCTracer* tracer_; 124 GCTracer* tracer_;
125 ScopeId scope_; 125 ScopeId scope_;
126 double start_time_; 126 double start_time_;
127 127
128 DISALLOW_COPY_AND_ASSIGN(Scope); 128 DISALLOW_COPY_AND_ASSIGN(Scope);
129 }; 129 };
130 130
131 131
132 class AllocationEvent {
133 public:
134 // Default constructor leaves the event uninitialized.
135 AllocationEvent() {}
136
137 AllocationEvent(double duration, intptr_t allocation_in_bytes);
138
139 // Time spent in the mutator during the end of the last garbage collection
140 // to the beginning of the next garbage collection.
141 double duration_;
142
143 // Memory allocated in the new space during the end of the last garbage
144 // collection to the beginning of the next garbage collection.
145 intptr_t allocation_in_bytes_;
146 };
147
132 class Event { 148 class Event {
133 public: 149 public:
134 enum Type { SCAVENGER = 0, MARK_COMPACTOR = 1, START = 2 }; 150 enum Type { SCAVENGER = 0, MARK_COMPACTOR = 1, START = 2 };
135 151
136 // Default constructor leaves the event uninitialized. 152 // Default constructor leaves the event uninitialized.
137 Event() {} 153 Event() {}
138 154
139 Event(Type type, const char* gc_reason, const char* collector_reason); 155 Event(Type type, const char* gc_reason, const char* collector_reason);
140 156
141 // Returns a string describing the event type. 157 // Returns a string describing the event type.
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 double longest_incremental_marking_step; 232 double longest_incremental_marking_step;
217 233
218 // Amounts of time spent in different scopes during GC. 234 // Amounts of time spent in different scopes during GC.
219 double scopes[Scope::NUMBER_OF_SCOPES]; 235 double scopes[Scope::NUMBER_OF_SCOPES];
220 }; 236 };
221 237
222 static const int kRingBufferMaxSize = 10; 238 static const int kRingBufferMaxSize = 10;
223 239
224 typedef RingBuffer<Event, kRingBufferMaxSize> EventBuffer; 240 typedef RingBuffer<Event, kRingBufferMaxSize> EventBuffer;
225 241
242 typedef RingBuffer<AllocationEvent, kRingBufferMaxSize> AllocationEventBuffer;
243
226 explicit GCTracer(Heap* heap); 244 explicit GCTracer(Heap* heap);
227 245
228 // Start collecting data. 246 // Start collecting data.
229 void Start(GarbageCollector collector, const char* gc_reason, 247 void Start(GarbageCollector collector, const char* gc_reason,
230 const char* collector_reason); 248 const char* collector_reason);
231 249
232 // Stop collecting data and print results. 250 // Stop collecting data and print results.
233 void Stop(); 251 void Stop();
234 252
253 // Log an allocation throughput event.
254 void AddNewSpaceAllocationTime(double duration, intptr_t allocation_in_bytes);
255
235 // Log an incremental marking step. 256 // Log an incremental marking step.
236 void AddIncrementalMarkingStep(double duration, intptr_t bytes); 257 void AddIncrementalMarkingStep(double duration, intptr_t bytes);
237 258
238 // Log time spent in marking. 259 // Log time spent in marking.
239 void AddMarkingTime(double duration) { 260 void AddMarkingTime(double duration) {
240 cumulative_marking_duration_ += duration; 261 cumulative_marking_duration_ += duration;
241 } 262 }
242 263
243 // Time spent in marking. 264 // Time spent in marking.
244 double cumulative_marking_duration() const { 265 double cumulative_marking_duration() const {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 intptr_t IncrementalMarkingSpeedInBytesPerMillisecond() const; 311 intptr_t IncrementalMarkingSpeedInBytesPerMillisecond() const;
291 312
292 // Compute the average scavenge speed in bytes/millisecond. 313 // Compute the average scavenge speed in bytes/millisecond.
293 // Returns 0 if no events have been recorded. 314 // Returns 0 if no events have been recorded.
294 intptr_t ScavengeSpeedInBytesPerMillisecond() const; 315 intptr_t ScavengeSpeedInBytesPerMillisecond() const;
295 316
296 // Compute the max mark-sweep speed in bytes/millisecond. 317 // Compute the max mark-sweep speed in bytes/millisecond.
297 // Returns 0 if no events have been recorded. 318 // Returns 0 if no events have been recorded.
298 intptr_t MarkCompactSpeedInBytesPerMillisecond() const; 319 intptr_t MarkCompactSpeedInBytesPerMillisecond() const;
299 320
321 // Allocation throughput in the new space in bytes/millisecond.
322 // Returns 0 if no events have been recorded.
323 intptr_t NewSpaceAllocationThroughputInBytesPerMillisecond() const;
324
300 private: 325 private:
301 // Print one detailed trace line in name=value format. 326 // Print one detailed trace line in name=value format.
302 // TODO(ernstm): Move to Heap. 327 // TODO(ernstm): Move to Heap.
303 void PrintNVP() const; 328 void PrintNVP() const;
304 329
305 // Print one trace line. 330 // Print one trace line.
306 // TODO(ernstm): Move to Heap. 331 // TODO(ernstm): Move to Heap.
307 void Print() const; 332 void Print() const;
308 333
309 // Compute the mean duration of the events in the given ring buffer. 334 // Compute the mean duration of the events in the given ring buffer.
(...skipping 14 matching lines...) Expand all
324 349
325 // Previous MARK_COMPACTOR event. 350 // Previous MARK_COMPACTOR event.
326 Event previous_mark_compactor_event_; 351 Event previous_mark_compactor_event_;
327 352
328 // RingBuffers for SCAVENGER events. 353 // RingBuffers for SCAVENGER events.
329 EventBuffer scavenger_events_; 354 EventBuffer scavenger_events_;
330 355
331 // RingBuffers for MARK_COMPACTOR events. 356 // RingBuffers for MARK_COMPACTOR events.
332 EventBuffer mark_compactor_events_; 357 EventBuffer mark_compactor_events_;
333 358
359 // RingBuffer for allocation events.
360 AllocationEventBuffer allocation_events_;
361
334 // Cumulative number of incremental marking steps since creation of tracer. 362 // Cumulative number of incremental marking steps since creation of tracer.
335 int cumulative_incremental_marking_steps_; 363 int cumulative_incremental_marking_steps_;
336 364
337 // Cumulative size of incremental marking steps (in bytes) since creation of 365 // Cumulative size of incremental marking steps (in bytes) since creation of
338 // tracer. 366 // tracer.
339 intptr_t cumulative_incremental_marking_bytes_; 367 intptr_t cumulative_incremental_marking_bytes_;
340 368
341 // Cumulative duration of incremental marking steps since creation of tracer. 369 // Cumulative duration of incremental marking steps since creation of tracer.
342 double cumulative_incremental_marking_duration_; 370 double cumulative_incremental_marking_duration_;
343 371
(...skipping 10 matching lines...) Expand all
354 382
355 // Total sweeping time on the main thread. 383 // Total sweeping time on the main thread.
356 // This timer is precise when run with --print-cumulative-gc-stat 384 // This timer is precise when run with --print-cumulative-gc-stat
357 // TODO(hpayer): Account for sweeping time on sweeper threads. Add a 385 // TODO(hpayer): Account for sweeping time on sweeper threads. Add a
358 // different field for that. 386 // different field for that.
359 // TODO(hpayer): This timer right now just holds the sweeping time 387 // TODO(hpayer): This timer right now just holds the sweeping time
360 // of the initial atomic sweeping pause. Make sure that it accumulates 388 // of the initial atomic sweeping pause. Make sure that it accumulates
361 // all sweeping operations performed on the main thread. 389 // all sweeping operations performed on the main thread.
362 double cumulative_sweeping_duration_; 390 double cumulative_sweeping_duration_;
363 391
392 // Holds the new space top pointer recorded at the end of the last garbage
393 // collection.
394 intptr_t new_space_top_after_gc_;
395
364 DISALLOW_COPY_AND_ASSIGN(GCTracer); 396 DISALLOW_COPY_AND_ASSIGN(GCTracer);
365 }; 397 };
366 } 398 }
367 } // namespace v8::internal 399 } // namespace v8::internal
368 400
369 #endif // V8_HEAP_GC_TRACER_H_ 401 #endif // V8_HEAP_GC_TRACER_H_
OLDNEW
« no previous file with comments | « no previous file | src/heap/gc-tracer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698