| Index: src/profile-generator.h
|
| diff --git a/src/profile-generator.h b/src/profile-generator.h
|
| index cacd27eaab07b9a7649c0d195bee3f67efd898cf..16764a214ab581e0cae3af48e92b702cbe4d5211 100644
|
| --- a/src/profile-generator.h
|
| +++ b/src/profile-generator.h
|
| @@ -526,7 +526,7 @@ class HeapEntry BASE_EMBEDDED {
|
| HeapSnapshot* snapshot() { return snapshot_; }
|
| Type type() { return static_cast<Type>(type_); }
|
| const char* name() { return name_; }
|
| - inline uint64_t id();
|
| + uint64_t id();
|
| int self_size() { return self_size_; }
|
| int retained_size() { return retained_size_; }
|
| void add_retained_size(int size) { retained_size_ += size; }
|
| @@ -558,6 +558,13 @@ class HeapEntry BASE_EMBEDDED {
|
| void ApplyAndPaintAllReachable(Visitor* visitor);
|
| void PaintAllReachable();
|
|
|
| + bool is_leaf() { return painted_ == kLeaf; }
|
| + void set_leaf() { painted_ = kLeaf; }
|
| + bool is_non_leaf() { return painted_ == kNonLeaf; }
|
| + void set_non_leaf() { painted_ = kNonLeaf; }
|
| + bool is_processed() { return painted_ == kProcessed; }
|
| + void set_processed() { painted_ = kProcessed; }
|
| +
|
| void SetIndexedReference(HeapGraphEdge::Type type,
|
| int child_index,
|
| int index,
|
| @@ -618,6 +625,10 @@ class HeapEntry BASE_EMBEDDED {
|
| static const unsigned kUnpainted = 0;
|
| static const unsigned kPainted = 1;
|
| static const unsigned kPaintedReachableFromOthers = 2;
|
| + // Paints used for approximate retained sizes calculation.
|
| + static const unsigned kLeaf = 0;
|
| + static const unsigned kNonLeaf = 1;
|
| + static const unsigned kProcessed = 2;
|
|
|
| static const int kExactRetainedSizeTag = 1;
|
|
|
| @@ -671,7 +682,6 @@ class HeapSnapshot {
|
| unsigned uid() { return uid_; }
|
| HeapEntry* root() { return root_entry_; }
|
| HeapEntry* gc_roots() { return gc_roots_entry_; }
|
| - List<HeapEntry*>* entries() { return &entries_; }
|
|
|
| void AllocateEntries(
|
| int entries_count, int children_count, int retainers_count);
|
| @@ -683,6 +693,7 @@ class HeapSnapshot {
|
| int size,
|
| int children_count,
|
| int retainers_count);
|
| + void ApproximateRetainedSizes();
|
| void ClearPaint();
|
| HeapSnapshotsDiff* CompareWith(HeapSnapshot* snapshot);
|
| HeapEntry* GetEntryById(uint64_t id);
|
| @@ -705,6 +716,10 @@ class HeapSnapshot {
|
| int children_count,
|
| int retainers_count);
|
| HeapEntry* GetNextEntryToInit();
|
| + void BuildDominatorTree(const Vector<HeapEntry*>& entries,
|
| + Vector<HeapEntry*>* dominators);
|
| + void FillReversePostorderIndexes(Vector<HeapEntry*>* entries);
|
| + void SetEntriesDominators();
|
|
|
| HeapSnapshotsCollection* collection_;
|
| Type type_;
|
| @@ -830,7 +845,7 @@ class HeapSnapshotsCollection {
|
|
|
| HeapSnapshot* NewSnapshot(
|
| HeapSnapshot::Type type, const char* name, unsigned uid);
|
| - void SnapshotGenerationFinished(HeapSnapshot* snapshot);
|
| + void SnapshotGenerationFinished() { ids_.SnapshotGenerationFinished(); }
|
| List<HeapSnapshot*>* snapshots() { return &snapshots_; }
|
| HeapSnapshot* GetSnapshot(unsigned uid);
|
|
|
| @@ -953,27 +968,16 @@ class HeapSnapshotGenerator {
|
| HeapEntry* child_entry) = 0;
|
| };
|
|
|
| - HeapSnapshotGenerator(HeapSnapshot* snapshot,
|
| - v8::ActivityControl* control);
|
| - bool GenerateSnapshot();
|
| + explicit HeapSnapshotGenerator(HeapSnapshot* snapshot);
|
| + void GenerateSnapshot();
|
|
|
| private:
|
| - bool ApproximateRetainedSizes();
|
| - bool BuildDominatorTree(const Vector<HeapEntry*>& entries,
|
| - Vector<HeapEntry*>* dominators);
|
| - bool CountEntriesAndReferences();
|
| HeapEntry* GetEntry(Object* obj);
|
| - void IncProgressCounter() { ++progress_counter_; }
|
| void ExtractReferences(HeapObject* obj);
|
| void ExtractClosureReferences(JSObject* js_obj, HeapEntry* entry);
|
| void ExtractPropertyReferences(JSObject* js_obj, HeapEntry* entry);
|
| void ExtractElementReferences(JSObject* js_obj, HeapEntry* entry);
|
| void ExtractInternalReferences(JSObject* js_obj, HeapEntry* entry);
|
| - bool FillReferences();
|
| - void FillReversePostorderIndexes(Vector<HeapEntry*>* entries);
|
| - bool IterateAndExtractReferences();
|
| - inline bool ReportProgress(bool force = false);
|
| - bool SetEntriesDominators();
|
| void SetClosureReference(HeapObject* parent_obj,
|
| HeapEntry* parent,
|
| String* reference_name,
|
| @@ -1005,10 +1009,8 @@ class HeapSnapshotGenerator {
|
| void SetRootShortcutReference(Object* child);
|
| void SetRootGcRootsReference();
|
| void SetGcRootsReference(Object* child);
|
| - void SetProgressTotal(int iterations_count);
|
|
|
| HeapSnapshot* snapshot_;
|
| - v8::ActivityControl* control_;
|
| HeapSnapshotsCollection* collection_;
|
| // Mapping from HeapObject* pointers to HeapEntry* pointers.
|
| HeapEntriesMap entries_;
|
| @@ -1016,9 +1018,6 @@ class HeapSnapshotGenerator {
|
| // Used during references extraction to mark heap objects that
|
| // are references via non-hidden properties.
|
| HeapObjectsSet known_references_;
|
| - // Used during snapshot generation.
|
| - int progress_counter_;
|
| - int progress_total_;
|
|
|
| friend class IndexedReferencesExtractor;
|
| friend class RootsReferencesExtractor;
|
|
|