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

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

Issue 710603003: Perform context disposal garbage collections only if contexts disposals happen at a high rate. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month 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 | « src/heap/gc-idle-time-handler.cc ('k') | 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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 138
139 // Time spent in the mutator during the end of the last garbage collection 139 // Time spent in the mutator during the end of the last garbage collection
140 // to the beginning of the next garbage collection. 140 // to the beginning of the next garbage collection.
141 double duration_; 141 double duration_;
142 142
143 // Memory allocated in the new space during the end of the last garbage 143 // Memory allocated in the new space during the end of the last garbage
144 // collection to the beginning of the next garbage collection. 144 // collection to the beginning of the next garbage collection.
145 intptr_t allocation_in_bytes_; 145 intptr_t allocation_in_bytes_;
146 }; 146 };
147 147
148
149 class ContextDisposalEvent {
150 public:
151 // Default constructor leaves the event uninitialized.
152 ContextDisposalEvent() {}
153
154 explicit ContextDisposalEvent(double time);
155
156 // Time when context disposal event happened.
157 double time_;
158 };
159
160
148 class Event { 161 class Event {
149 public: 162 public:
150 enum Type { SCAVENGER = 0, MARK_COMPACTOR = 1, START = 2 }; 163 enum Type { SCAVENGER = 0, MARK_COMPACTOR = 1, START = 2 };
151 164
152 // Default constructor leaves the event uninitialized. 165 // Default constructor leaves the event uninitialized.
153 Event() {} 166 Event() {}
154 167
155 Event(Type type, const char* gc_reason, const char* collector_reason); 168 Event(Type type, const char* gc_reason, const char* collector_reason);
156 169
157 // Returns a string describing the event type. 170 // Returns a string describing the event type.
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 // Amounts of time spent in different scopes during GC. 247 // Amounts of time spent in different scopes during GC.
235 double scopes[Scope::NUMBER_OF_SCOPES]; 248 double scopes[Scope::NUMBER_OF_SCOPES];
236 }; 249 };
237 250
238 static const int kRingBufferMaxSize = 10; 251 static const int kRingBufferMaxSize = 10;
239 252
240 typedef RingBuffer<Event, kRingBufferMaxSize> EventBuffer; 253 typedef RingBuffer<Event, kRingBufferMaxSize> EventBuffer;
241 254
242 typedef RingBuffer<AllocationEvent, kRingBufferMaxSize> AllocationEventBuffer; 255 typedef RingBuffer<AllocationEvent, kRingBufferMaxSize> AllocationEventBuffer;
243 256
257 typedef RingBuffer<ContextDisposalEvent, kRingBufferMaxSize>
258 ContextDisposalEventBuffer;
259
244 explicit GCTracer(Heap* heap); 260 explicit GCTracer(Heap* heap);
245 261
246 // Start collecting data. 262 // Start collecting data.
247 void Start(GarbageCollector collector, const char* gc_reason, 263 void Start(GarbageCollector collector, const char* gc_reason,
248 const char* collector_reason); 264 const char* collector_reason);
249 265
250 // Stop collecting data and print results. 266 // Stop collecting data and print results.
251 void Stop(); 267 void Stop();
252 268
253 // Log an allocation throughput event. 269 // Log an allocation throughput event.
254 void AddNewSpaceAllocationTime(double duration, intptr_t allocation_in_bytes); 270 void AddNewSpaceAllocationTime(double duration, intptr_t allocation_in_bytes);
255 271
272 void AddContextDisposalTime(double time);
273
256 // Log an incremental marking step. 274 // Log an incremental marking step.
257 void AddIncrementalMarkingStep(double duration, intptr_t bytes); 275 void AddIncrementalMarkingStep(double duration, intptr_t bytes);
258 276
259 // Log time spent in marking. 277 // Log time spent in marking.
260 void AddMarkingTime(double duration) { 278 void AddMarkingTime(double duration) {
261 cumulative_marking_duration_ += duration; 279 cumulative_marking_duration_ += duration;
262 } 280 }
263 281
264 // Time spent in marking. 282 // Time spent in marking.
265 double cumulative_marking_duration() const { 283 double cumulative_marking_duration() const {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 intptr_t ScavengeSpeedInBytesPerMillisecond() const; 333 intptr_t ScavengeSpeedInBytesPerMillisecond() const;
316 334
317 // Compute the max mark-sweep speed in bytes/millisecond. 335 // Compute the max mark-sweep speed in bytes/millisecond.
318 // Returns 0 if no events have been recorded. 336 // Returns 0 if no events have been recorded.
319 intptr_t MarkCompactSpeedInBytesPerMillisecond() const; 337 intptr_t MarkCompactSpeedInBytesPerMillisecond() const;
320 338
321 // Allocation throughput in the new space in bytes/millisecond. 339 // Allocation throughput in the new space in bytes/millisecond.
322 // Returns 0 if no events have been recorded. 340 // Returns 0 if no events have been recorded.
323 intptr_t NewSpaceAllocationThroughputInBytesPerMillisecond() const; 341 intptr_t NewSpaceAllocationThroughputInBytesPerMillisecond() const;
324 342
343 // Computes the context disposal rate in milliseconds. It takes the time
344 // frame of the first and last context disposal event and devides it by the
345 // number of recorded events.
346 // Returns 0 if no events have been recorded.
347 double ContextDisposalRateInMilliseconds() const;
348
325 private: 349 private:
326 // Print one detailed trace line in name=value format. 350 // Print one detailed trace line in name=value format.
327 // TODO(ernstm): Move to Heap. 351 // TODO(ernstm): Move to Heap.
328 void PrintNVP() const; 352 void PrintNVP() const;
329 353
330 // Print one trace line. 354 // Print one trace line.
331 // TODO(ernstm): Move to Heap. 355 // TODO(ernstm): Move to Heap.
332 void Print() const; 356 void Print() const;
333 357
334 // Compute the mean duration of the events in the given ring buffer. 358 // Compute the mean duration of the events in the given ring buffer.
(...skipping 17 matching lines...) Expand all
352 376
353 // RingBuffers for SCAVENGER events. 377 // RingBuffers for SCAVENGER events.
354 EventBuffer scavenger_events_; 378 EventBuffer scavenger_events_;
355 379
356 // RingBuffers for MARK_COMPACTOR events. 380 // RingBuffers for MARK_COMPACTOR events.
357 EventBuffer mark_compactor_events_; 381 EventBuffer mark_compactor_events_;
358 382
359 // RingBuffer for allocation events. 383 // RingBuffer for allocation events.
360 AllocationEventBuffer allocation_events_; 384 AllocationEventBuffer allocation_events_;
361 385
386 ContextDisposalEventBuffer context_disposal_events_;
387
362 // Cumulative number of incremental marking steps since creation of tracer. 388 // Cumulative number of incremental marking steps since creation of tracer.
363 int cumulative_incremental_marking_steps_; 389 int cumulative_incremental_marking_steps_;
364 390
365 // Cumulative size of incremental marking steps (in bytes) since creation of 391 // Cumulative size of incremental marking steps (in bytes) since creation of
366 // tracer. 392 // tracer.
367 intptr_t cumulative_incremental_marking_bytes_; 393 intptr_t cumulative_incremental_marking_bytes_;
368 394
369 // Cumulative duration of incremental marking steps since creation of tracer. 395 // Cumulative duration of incremental marking steps since creation of tracer.
370 double cumulative_incremental_marking_duration_; 396 double cumulative_incremental_marking_duration_;
371 397
(...skipping 20 matching lines...) Expand all
392 // Holds the new space top pointer recorded at the end of the last garbage 418 // Holds the new space top pointer recorded at the end of the last garbage
393 // collection. 419 // collection.
394 intptr_t new_space_top_after_gc_; 420 intptr_t new_space_top_after_gc_;
395 421
396 DISALLOW_COPY_AND_ASSIGN(GCTracer); 422 DISALLOW_COPY_AND_ASSIGN(GCTracer);
397 }; 423 };
398 } 424 }
399 } // namespace v8::internal 425 } // namespace v8::internal
400 426
401 #endif // V8_HEAP_GC_TRACER_H_ 427 #endif // V8_HEAP_GC_TRACER_H_
OLDNEW
« no previous file with comments | « src/heap/gc-idle-time-handler.cc ('k') | src/heap/gc-tracer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698