Reviewers: jochen (slow - soon OOO), ernstm,

Description:
Measure incremental marking speed in bytes per millisecond based on pure
incremental marking steps.

BUG=

Please review this at https://codereview.chromium.org/463453002/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+30, -2 lines):
  M src/heap/gc-tracer.h
  M src/heap/gc-tracer.cc


Index: src/heap/gc-tracer.cc
diff --git a/src/heap/gc-tracer.cc b/src/heap/gc-tracer.cc
index 0368f40ed67c760428d49f4167af2375e9788eba..12de0e457e500d47ca8e77b1dffff435b53fd12a 100644
--- a/src/heap/gc-tracer.cc
+++ b/src/heap/gc-tracer.cc
@@ -38,6 +38,8 @@ GCTracer::Event::Event(Type type, const char* gc_reason,
       incremental_marking_bytes(0),
       cumulative_incremental_marking_duration(0.0),
       incremental_marking_duration(0.0),
+      cumulative_pure_incremental_marking_duration(0.0),
+      pure_incremental_marking_duration(0.0),
       longest_incremental_marking_step(0.0) {
   for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) {
     scopes[i] = 0;
@@ -75,6 +77,7 @@ GCTracer::GCTracer(Heap* heap)
       cumulative_incremental_marking_steps_(0),
       cumulative_incremental_marking_bytes_(0),
       cumulative_incremental_marking_duration_(0.0),
+      cumulative_pure_incremental_marking_duration_(0.0),
       longest_incremental_marking_step_(0.0),
       cumulative_marking_duration_(0.0),
       cumulative_sweeping_duration_(0.0) {
@@ -107,6 +110,8 @@ void GCTracer::Start(GarbageCollector collector, const char* gc_reason,
       cumulative_incremental_marking_bytes_;
   current_.cumulative_incremental_marking_duration =
       cumulative_incremental_marking_duration_;
+  current_.cumulative_pure_incremental_marking_duration =
+      cumulative_pure_incremental_marking_duration_;
current_.longest_incremental_marking_step = longest_incremental_marking_step_;

   for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) {
@@ -131,6 +136,9 @@ void GCTracer::Stop() {
     current_.incremental_marking_duration =
         current_.cumulative_incremental_marking_duration -
         previous_.cumulative_incremental_marking_duration;
+    current_.pure_incremental_marking_duration =
+        current_.cumulative_pure_incremental_marking_duration -
+        previous_.cumulative_pure_incremental_marking_duration;
     scavenger_events_.push_front(current_);
   } else {
     current_.incremental_marking_steps =
@@ -142,6 +150,10 @@ void GCTracer::Stop() {
     current_.incremental_marking_duration =
         current_.cumulative_incremental_marking_duration -
previous_mark_compactor_event_.cumulative_incremental_marking_duration;
+    current_.pure_incremental_marking_duration =
+        current_.cumulative_pure_incremental_marking_duration -
+        previous_mark_compactor_event_
+            .cumulative_pure_incremental_marking_duration;
     longest_incremental_marking_step_ = 0.0;
     mark_compactor_events_.push_front(current_);
   }
@@ -177,6 +189,9 @@ void GCTracer::AddIncrementalMarkingStep(double duration, intptr_t bytes) {
   longest_incremental_marking_step_ =
       Max(longest_incremental_marking_step_, duration);
   cumulative_marking_duration_ += duration;
+  if (bytes > 0) {
+    cumulative_pure_incremental_marking_duration_ += duration;
+  }
 }


@@ -367,7 +382,7 @@ intptr_t GCTracer::IncrementalMarkingSpeedInBytesPerMillisecond() const {
   // Use data from GCTracer instead of data from event buffers.
   if (mark_compactor_events_.empty()) {
     return static_cast<intptr_t>(cumulative_incremental_marking_bytes_ /
-                                 cumulative_incremental_marking_duration_);
+ cumulative_pure_incremental_marking_duration_);
   }

   intptr_t bytes = 0;
@@ -375,7 +390,7 @@ intptr_t GCTracer::IncrementalMarkingSpeedInBytesPerMillisecond() const {
   EventBuffer::const_iterator iter = mark_compactor_events_.begin();
   while (iter != mark_compactor_events_.end()) {
     bytes += iter->incremental_marking_bytes;
-    durations += iter->incremental_marking_duration;
+    durations += iter->pure_incremental_marking_duration;
     ++iter;
   }

Index: src/heap/gc-tracer.h
diff --git a/src/heap/gc-tracer.h b/src/heap/gc-tracer.h
index 38843d1be77d62c6d15df634d1cc4114661c02ff..14281a4c8d90bcd7988ad58833db47381775b351 100644
--- a/src/heap/gc-tracer.h
+++ b/src/heap/gc-tracer.h
@@ -197,6 +197,15 @@ class GCTracer BASE_EMBEDDED {
     // - last MARK_COMPACTOR event for MARK_COMPACTOR events
     double incremental_marking_duration;

+ // Cumulative pure duration of incremental marking steps since creation of
+    // tracer. (value at start of event)
+    double cumulative_pure_incremental_marking_duration;
+
+    // Duration of pure incremental marking steps since
+    // - last event for SCAVENGER events
+    // - last MARK_COMPACTOR event for MARK_COMPACTOR events
+    double pure_incremental_marking_duration;
+
     // Longest incremental marking step since start of marking.
     // (value at start of event)
     double longest_incremental_marking_step;
@@ -319,6 +328,10 @@ class GCTracer BASE_EMBEDDED {
// Cumulative duration of incremental marking steps since creation of tracer.
   double cumulative_incremental_marking_duration_;

+ // Cumulative duration of pure incremental marking steps since creation of
+  // tracer.
+  double cumulative_pure_incremental_marking_duration_;
+
   // Longest incremental marking step since start of marking.
   double longest_incremental_marking_step_;



--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to