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
This commit is contained in:
parent
d2061c07c8
commit
57f47e704f
13
src/heap.cc
13
src/heap.cc
@ -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,
|
|||||||
|
|
||||||
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() {
|
|||||||
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()
|
|||||||
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();
|
||||||
|
20
src/heap.h
20
src/heap.h
@ -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 {
|
|||||||
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_;
|
||||||
|
Loading…
Reference in New Issue
Block a user