Reviewers: bak, Description: Add information about time spent in external callback to traces produces with --trace-gc.
Please review this at http://codereview.chromium.org/661170 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/heap.h M src/heap.cc Index: src/heap.cc =================================================================== --- src/heap.cc (revision 3959) +++ src/heap.cc (working copy) @@ -558,6 +558,7 @@ VerifySymbolTable(); if (collector == MARK_COMPACTOR && global_gc_prologue_callback_) { ASSERT(!allocation_allowed_); + GCTracer::ExternalScope scope(tracer); global_gc_prologue_callback_(); } EnsureFromSpaceIsCommitted(); @@ -591,6 +592,7 @@ if (collector == MARK_COMPACTOR && global_gc_epilogue_callback_) { ASSERT(!allocation_allowed_); + GCTracer::ExternalScope scope(tracer); global_gc_epilogue_callback_(); } VerifySymbolTable(); @@ -4067,6 +4069,7 @@ GCTracer::GCTracer() : start_time_(0.0), start_size_(0.0), + external_time_(0.0), gc_count_(0), full_gc_count_(0), is_compacting_(false), @@ -4084,10 +4087,19 @@ GCTracer::~GCTracer() { if (!FLAG_trace_gc) return; // Printf ONE line iff flag is set. - PrintF("%s %.1f -> %.1f MB, %d ms.\n", - CollectorString(), - start_size_, SizeOfHeapObjects(), - static_cast<int>(OS::TimeCurrentMillis() - start_time_)); + int time = static_cast<int>(OS::TimeCurrentMillis() - start_time_); + int external_time = static_cast<int>(external_time_); + if (external_time > 0) { + PrintF("%s %.1f -> %.1f MB, %d / %d ms.\n", + CollectorString(), + start_size_, SizeOfHeapObjects(), + external_time, time); + } else { + PrintF("%s %.1f -> %.1f MB, %d ms.\n", + CollectorString(), + start_size_, SizeOfHeapObjects(), + time); + } #if defined(ENABLE_LOGGING_AND_PROFILING) Heap::PrintShortHeapStatistics(); Index: src/heap.h =================================================================== --- src/heap.h (revision 3959) +++ src/heap.h (working copy) @@ -1520,8 +1520,23 @@ class GCTracer BASE_EMBEDDED { public: + // Time spent while in the external scope counts towards the + // external time in the tracer and will be reported separately. + class ExternalScope BASE_EMBEDDED { + public: + explicit ExternalScope(GCTracer* tracer) : tracer_(tracer) { + start_time_ = OS::TimeCurrentMillis(); + } + ~ExternalScope() { + tracer_->external_time_ += OS::TimeCurrentMillis() - start_time_; + } + + private: + GCTracer* tracer_; + double start_time_; + }; + GCTracer(); - ~GCTracer(); // Sets the collector. @@ -1555,6 +1570,9 @@ double start_size_; // Size of objects in heap set in constructor. GarbageCollector collector_; // Type of collector. + // Keep track of the amount of time spent in external callbacks. + double external_time_; + // A count (including this one, eg, the first collection is 1) of the // number of garbage collections. int gc_count_; -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
