Commit 57f47e70 authored by kasperl@chromium.org's avatar kasperl@chromium.org

Add information about time spent in external callback to

traces produces with --trace-gc.
Review URL: http://codereview.chromium.org/661170

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3960 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent d2061c07
...@@ -558,6 +558,7 @@ void Heap::PerformGarbageCollection(AllocationSpace space, ...@@ -558,6 +558,7 @@ void Heap::PerformGarbageCollection(AllocationSpace space,
VerifySymbolTable(); VerifySymbolTable();
if (collector == MARK_COMPACTOR && global_gc_prologue_callback_) { if (collector == MARK_COMPACTOR && global_gc_prologue_callback_) {
ASSERT(!allocation_allowed_); ASSERT(!allocation_allowed_);
GCTracer::ExternalScope scope(tracer);
global_gc_prologue_callback_(); global_gc_prologue_callback_();
} }
EnsureFromSpaceIsCommitted(); EnsureFromSpaceIsCommitted();
...@@ -591,6 +592,7 @@ void Heap::PerformGarbageCollection(AllocationSpace space, ...@@ -591,6 +592,7 @@ void Heap::PerformGarbageCollection(AllocationSpace space,
if (collector == MARK_COMPACTOR && global_gc_epilogue_callback_) { if (collector == MARK_COMPACTOR && global_gc_epilogue_callback_) {
ASSERT(!allocation_allowed_); ASSERT(!allocation_allowed_);
GCTracer::ExternalScope scope(tracer);
global_gc_epilogue_callback_(); global_gc_epilogue_callback_();
} }
VerifySymbolTable(); VerifySymbolTable();
...@@ -4067,6 +4069,7 @@ void Heap::TracePathToGlobal() { ...@@ -4067,6 +4069,7 @@ void Heap::TracePathToGlobal() {
GCTracer::GCTracer() GCTracer::GCTracer()
: start_time_(0.0), : start_time_(0.0),
start_size_(0.0), start_size_(0.0),
external_time_(0.0),
gc_count_(0), gc_count_(0),
full_gc_count_(0), full_gc_count_(0),
is_compacting_(false), is_compacting_(false),
...@@ -4084,10 +4087,12 @@ GCTracer::GCTracer() ...@@ -4084,10 +4087,12 @@ GCTracer::GCTracer()
GCTracer::~GCTracer() { GCTracer::~GCTracer() {
if (!FLAG_trace_gc) return; if (!FLAG_trace_gc) return;
// Printf ONE line iff flag is set. // Printf ONE line iff flag is set.
PrintF("%s %.1f -> %.1f MB, %d ms.\n", int time = static_cast<int>(OS::TimeCurrentMillis() - start_time_);
CollectorString(), int external_time = static_cast<int>(external_time_);
start_size_, SizeOfHeapObjects(), PrintF("%s %.1f -> %.1f MB, ",
static_cast<int>(OS::TimeCurrentMillis() - start_time_)); CollectorString(), start_size_, SizeOfHeapObjects());
if (external_time > 0) PrintF("%d / ", external_time);
PrintF("%d ms.\n", time);
#if defined(ENABLE_LOGGING_AND_PROFILING) #if defined(ENABLE_LOGGING_AND_PROFILING)
Heap::PrintShortHeapStatistics(); Heap::PrintShortHeapStatistics();
......
...@@ -1520,8 +1520,23 @@ class DisableAssertNoAllocation { ...@@ -1520,8 +1520,23 @@ class DisableAssertNoAllocation {
class GCTracer BASE_EMBEDDED { class GCTracer BASE_EMBEDDED {
public: public:
GCTracer(); // 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(); ~GCTracer();
// Sets the collector. // Sets the collector.
...@@ -1555,6 +1570,9 @@ class GCTracer BASE_EMBEDDED { ...@@ -1555,6 +1570,9 @@ class GCTracer BASE_EMBEDDED {
double start_size_; // Size of objects in heap set in constructor. double start_size_; // Size of objects in heap set in constructor.
GarbageCollector collector_; // Type of collector. 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 // A count (including this one, eg, the first collection is 1) of the
// number of garbage collections. // number of garbage collections.
int gc_count_; int gc_count_;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment