| OLD | NEW | 
|    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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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_ | 
| OLD | NEW |