| Index: src/heap.h
|
| diff --git a/src/heap.h b/src/heap.h
|
| index 6569c198309947d5c21ef01724e5f90e155ba5b8..76e08e2af0a7cbd1b1393f02d3e1b13f75a9995c 100644
|
| --- a/src/heap.h
|
| +++ b/src/heap.h
|
| @@ -359,7 +359,6 @@ namespace internal {
|
| V(intl_impl_object_string, "v8::intl_object")
|
|
|
| // Forward declarations.
|
| -class GCTracer;
|
| class HeapStats;
|
| class Isolate;
|
| class WeakObjectRetainer;
|
| @@ -549,6 +548,125 @@ enum ArrayStorageAllocationMode {
|
| };
|
|
|
|
|
| +// GCTracer collects and prints ONE line after each garbage collector
|
| +// invocation IFF --trace_gc is used.
|
| +
|
| +class GCTracer BASE_EMBEDDED {
|
| + public:
|
| + class Scope BASE_EMBEDDED {
|
| + public:
|
| + enum ScopeId {
|
| + EXTERNAL,
|
| + MC_MARK,
|
| + MC_SWEEP,
|
| + MC_SWEEP_NEWSPACE,
|
| + MC_SWEEP_OLDSPACE,
|
| + MC_SWEEP_CODE,
|
| + MC_SWEEP_CELL,
|
| + MC_SWEEP_MAP,
|
| + MC_EVACUATE_PAGES,
|
| + MC_UPDATE_NEW_TO_NEW_POINTERS,
|
| + MC_UPDATE_ROOT_TO_NEW_POINTERS,
|
| + MC_UPDATE_OLD_TO_NEW_POINTERS,
|
| + MC_UPDATE_POINTERS_TO_EVACUATED,
|
| + MC_UPDATE_POINTERS_BETWEEN_EVACUATED,
|
| + MC_UPDATE_MISC_POINTERS,
|
| + MC_WEAKCOLLECTION_PROCESS,
|
| + MC_WEAKCOLLECTION_CLEAR,
|
| + MC_FLUSH_CODE,
|
| + NUMBER_OF_SCOPES
|
| + };
|
| +
|
| + Scope(GCTracer* tracer, ScopeId scope)
|
| + : tracer_(tracer),
|
| + scope_(scope) {
|
| + start_time_ = base::OS::TimeCurrentMillis();
|
| + }
|
| +
|
| + ~Scope() {
|
| + ASSERT(scope_ < NUMBER_OF_SCOPES); // scope_ is unsigned.
|
| + tracer_->scopes_[scope_] += base::OS::TimeCurrentMillis() - start_time_;
|
| + }
|
| +
|
| + private:
|
| + GCTracer* tracer_;
|
| + ScopeId scope_;
|
| + double start_time_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Scope);
|
| + };
|
| +
|
| + explicit GCTracer(Heap* heap);
|
| + ~GCTracer();
|
| +
|
| + void start(GarbageCollector collector,
|
| + const char* gc_reason,
|
| + const char* collector_reason);
|
| +
|
| + void stop();
|
| +
|
| + private:
|
| + // Returns a string matching the collector.
|
| + const char* CollectorString() const;
|
| +
|
| + // Print one detailed trace line in name=value format.
|
| + void PrintNVP() const;
|
| +
|
| + // Print one trace line.
|
| + void Print() const;
|
| +
|
| + // Timestamp set in the constructor.
|
| + double start_time_;
|
| +
|
| + // Timestamp set in the destructor.
|
| + double end_time_;
|
| +
|
| + // Size of objects in heap set in constructor.
|
| + intptr_t start_object_size_;
|
| +
|
| + // Size of objects in heap set in destructor.
|
| + intptr_t end_object_size_;
|
| +
|
| + // Size of memory allocated from OS set in constructor.
|
| + intptr_t start_memory_size_;
|
| +
|
| + // Size of memory allocated from OS set in destructor.
|
| + intptr_t end_memory_size_;
|
| +
|
| + // Type of collector.
|
| + GarbageCollector collector_;
|
| +
|
| + // Amounts of time spent in different scopes during GC.
|
| + double scopes_[Scope::NUMBER_OF_SCOPES];
|
| +
|
| + // Total amount of space either wasted or contained in one of free lists
|
| + // before the current GC.
|
| + intptr_t in_free_list_or_wasted_before_gc_;
|
| +
|
| + // Difference between space used in the heap at the beginning of the current
|
| + // collection and the end of the previous collection.
|
| + intptr_t allocated_since_last_gc_;
|
| +
|
| + // Amount of time spent in mutator that is time elapsed between end of the
|
| + // previous collection and the beginning of the current one.
|
| + double spent_in_mutator_;
|
| +
|
| + // Incremental marking steps counters.
|
| + int steps_count_;
|
| + double steps_took_;
|
| + double longest_step_;
|
| + int steps_count_since_last_gc_;
|
| + double steps_took_since_last_gc_;
|
| +
|
| + Heap* heap_;
|
| +
|
| + const char* gc_reason_;
|
| + const char* collector_reason_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(GCTracer);
|
| +};
|
| +
|
| +
|
| class Heap {
|
| public:
|
| // Configure heap size in MB before setup. Return false if the heap has been
|
| @@ -1230,7 +1348,7 @@ class Heap {
|
|
|
| void ClearNormalizedMapCaches();
|
|
|
| - GCTracer* tracer() { return tracer_; }
|
| + GCTracer* tracer() { return &tracer_; }
|
|
|
| // Returns the size of objects residing in non new spaces.
|
| intptr_t PromotedSpaceSizeOfObjects();
|
| @@ -1752,7 +1870,6 @@ class Heap {
|
| // collect more garbage.
|
| bool PerformGarbageCollection(
|
| GarbageCollector collector,
|
| - GCTracer* tracer,
|
| const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
|
|
|
| inline void UpdateOldSpaceLimits();
|
| @@ -1978,7 +2095,7 @@ class Heap {
|
| StoreBufferEvent event);
|
|
|
| // Performs a major collection in the whole heap.
|
| - void MarkCompact(GCTracer* tracer);
|
| + void MarkCompact();
|
|
|
| // Code to be run before and after mark-compact.
|
| void MarkCompactPrologue();
|
| @@ -2009,7 +2126,7 @@ class Heap {
|
| // Total RegExp code ever generated
|
| double total_regexp_code_generated_;
|
|
|
| - GCTracer* tracer_;
|
| + GCTracer tracer_;
|
|
|
| // Creates and installs the full-sized number string cache.
|
| int FullSizeNumberStringCacheLength();
|
| @@ -2530,122 +2647,6 @@ class DescriptorLookupCache {
|
| };
|
|
|
|
|
| -// GCTracer collects and prints ONE line after each garbage collector
|
| -// invocation IFF --trace_gc is used.
|
| -
|
| -class GCTracer BASE_EMBEDDED {
|
| - public:
|
| - class Scope BASE_EMBEDDED {
|
| - public:
|
| - enum ScopeId {
|
| - EXTERNAL,
|
| - MC_MARK,
|
| - MC_SWEEP,
|
| - MC_SWEEP_NEWSPACE,
|
| - MC_SWEEP_OLDSPACE,
|
| - MC_SWEEP_CODE,
|
| - MC_SWEEP_CELL,
|
| - MC_SWEEP_MAP,
|
| - MC_EVACUATE_PAGES,
|
| - MC_UPDATE_NEW_TO_NEW_POINTERS,
|
| - MC_UPDATE_ROOT_TO_NEW_POINTERS,
|
| - MC_UPDATE_OLD_TO_NEW_POINTERS,
|
| - MC_UPDATE_POINTERS_TO_EVACUATED,
|
| - MC_UPDATE_POINTERS_BETWEEN_EVACUATED,
|
| - MC_UPDATE_MISC_POINTERS,
|
| - MC_WEAKCOLLECTION_PROCESS,
|
| - MC_WEAKCOLLECTION_CLEAR,
|
| - MC_FLUSH_CODE,
|
| - NUMBER_OF_SCOPES
|
| - };
|
| -
|
| - Scope(GCTracer* tracer, ScopeId scope)
|
| - : tracer_(tracer),
|
| - scope_(scope) {
|
| - start_time_ = base::OS::TimeCurrentMillis();
|
| - }
|
| -
|
| - ~Scope() {
|
| - ASSERT(scope_ < NUMBER_OF_SCOPES); // scope_ is unsigned.
|
| - tracer_->scopes_[scope_] += base::OS::TimeCurrentMillis() - start_time_;
|
| - }
|
| -
|
| - private:
|
| - GCTracer* tracer_;
|
| - ScopeId scope_;
|
| - double start_time_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Scope);
|
| - };
|
| -
|
| - explicit GCTracer(Heap* heap,
|
| - GarbageCollector collector,
|
| - const char* gc_reason,
|
| - const char* collector_reason);
|
| - ~GCTracer();
|
| -
|
| - private:
|
| - // Returns a string matching the collector.
|
| - const char* CollectorString() const;
|
| -
|
| - // Print one detailed trace line in name=value format.
|
| - void PrintNVP() const;
|
| -
|
| - // Print one trace line.
|
| - void Print() const;
|
| -
|
| - // Timestamp set in the constructor.
|
| - double start_time_;
|
| -
|
| - // Timestamp set in the destructor.
|
| - double end_time_;
|
| -
|
| - // Size of objects in heap set in constructor.
|
| - intptr_t start_object_size_;
|
| -
|
| - // Size of objects in heap set in destructor.
|
| - intptr_t end_object_size_;
|
| -
|
| - // Size of memory allocated from OS set in constructor.
|
| - intptr_t start_memory_size_;
|
| -
|
| - // Size of memory allocated from OS set in destructor.
|
| - intptr_t end_memory_size_;
|
| -
|
| - // Type of collector.
|
| - GarbageCollector collector_;
|
| -
|
| - // Amounts of time spent in different scopes during GC.
|
| - double scopes_[Scope::NUMBER_OF_SCOPES];
|
| -
|
| - // Total amount of space either wasted or contained in one of free lists
|
| - // before the current GC.
|
| - intptr_t in_free_list_or_wasted_before_gc_;
|
| -
|
| - // Difference between space used in the heap at the beginning of the current
|
| - // collection and the end of the previous collection.
|
| - intptr_t allocated_since_last_gc_;
|
| -
|
| - // Amount of time spent in mutator that is time elapsed between end of the
|
| - // previous collection and the beginning of the current one.
|
| - double spent_in_mutator_;
|
| -
|
| - // Incremental marking steps counters.
|
| - int steps_count_;
|
| - double steps_took_;
|
| - double longest_step_;
|
| - int steps_count_since_last_gc_;
|
| - double steps_took_since_last_gc_;
|
| -
|
| - Heap* heap_;
|
| -
|
| - const char* gc_reason_;
|
| - const char* collector_reason_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(GCTracer);
|
| -};
|
| -
|
| -
|
| class RegExpResultsCache {
|
| public:
|
| enum ResultsCacheType { REGEXP_MULTIPLE_INDICES, STRING_SPLIT_SUBSTRINGS };
|
|
|