| Index: src/profile-generator.h
|
| diff --git a/src/profile-generator.h b/src/profile-generator.h
|
| index 44be3db78c9b3938a54215b83b6b936b724d7429..b47ce8255a844dcfed2bd0bed182ba155b5b0cd0 100644
|
| --- a/src/profile-generator.h
|
| +++ b/src/profile-generator.h
|
| @@ -455,7 +455,8 @@ class HeapGraphEdge BASE_EMBEDDED {
|
| kProperty = v8::HeapGraphEdge::kProperty,
|
| kInternal = v8::HeapGraphEdge::kInternal,
|
| kHidden = v8::HeapGraphEdge::kHidden,
|
| - kShortcut = v8::HeapGraphEdge::kShortcut
|
| + kShortcut = v8::HeapGraphEdge::kShortcut,
|
| + kWeak = v8::HeapGraphEdge::kWeak
|
| };
|
|
|
| HeapGraphEdge() { }
|
| @@ -465,7 +466,7 @@ class HeapGraphEdge BASE_EMBEDDED {
|
|
|
| Type type() { return static_cast<Type>(type_); }
|
| int index() {
|
| - ASSERT(type_ == kElement || type_ == kHidden);
|
| + ASSERT(type_ == kElement || type_ == kHidden || type_ == kWeak);
|
| return index_;
|
| }
|
| const char* name() {
|
| @@ -588,7 +589,8 @@ class HeapEntry BASE_EMBEDDED {
|
| int EntrySize() { return EntriesSize(1, children_count_, retainers_count_); }
|
| int RetainedSize(bool exact);
|
|
|
| - void Print(int max_depth, int indent);
|
| + void Print(
|
| + const char* prefix, const char* edge_name, int max_depth, int indent);
|
|
|
| Handle<HeapObject> GetHeapObject();
|
|
|
| @@ -661,6 +663,7 @@ class HeapSnapshot {
|
| HeapEntry* root() { return root_entry_; }
|
| HeapEntry* gc_roots() { return gc_roots_entry_; }
|
| HeapEntry* natives_root() { return natives_root_entry_; }
|
| + HeapEntry* gc_subroot(int index) { return gc_subroot_entries_[index]; }
|
| List<HeapEntry*>* entries() { return &entries_; }
|
| int raw_entries_size() { return raw_entries_size_; }
|
|
|
| @@ -674,6 +677,9 @@ class HeapSnapshot {
|
| int retainers_count);
|
| HeapEntry* AddRootEntry(int children_count);
|
| HeapEntry* AddGcRootsEntry(int children_count, int retainers_count);
|
| + HeapEntry* AddGcSubrootEntry(int tag,
|
| + int children_count,
|
| + int retainers_count);
|
| HeapEntry* AddNativesRootEntry(int children_count, int retainers_count);
|
| void ClearPaint();
|
| HeapEntry* GetEntryById(uint64_t id);
|
| @@ -695,6 +701,7 @@ class HeapSnapshot {
|
| HeapEntry* root_entry_;
|
| HeapEntry* gc_roots_entry_;
|
| HeapEntry* natives_root_entry_;
|
| + HeapEntry* gc_subroot_entries_[VisitorSynchronization::kNumberOfSyncTags];
|
| char* raw_entries_;
|
| List<HeapEntry*> entries_;
|
| bool entries_sorted_;
|
| @@ -716,10 +723,13 @@ class HeapObjectsMap {
|
| void MoveObject(Address from, Address to);
|
|
|
| static uint64_t GenerateId(v8::RetainedObjectInfo* info);
|
| + static inline uint64_t GetNthGcSubrootId(int delta);
|
|
|
| + static const int kObjectIdStep = 2;
|
| static const uint64_t kInternalRootObjectId;
|
| static const uint64_t kGcRootsObjectId;
|
| static const uint64_t kNativesRootObjectId;
|
| + static const uint64_t kGcRootsFirstSubrootId;
|
| static const uint64_t kFirstAvailableObjectId;
|
|
|
| private:
|
| @@ -969,6 +979,11 @@ class V8HeapExplorer : public HeapEntriesAllocator {
|
| HeapEntry* parent,
|
| int index,
|
| Object* child);
|
| + void SetWeakReference(HeapObject* parent_obj,
|
| + HeapEntry* parent_entry,
|
| + int index,
|
| + Object* child_obj,
|
| + int field_offset);
|
| void SetPropertyReference(HeapObject* parent_obj,
|
| HeapEntry* parent,
|
| String* reference_name,
|
| @@ -981,11 +996,16 @@ class V8HeapExplorer : public HeapEntriesAllocator {
|
| Object* child);
|
| void SetRootShortcutReference(Object* child);
|
| void SetRootGcRootsReference();
|
| - void SetGcRootsReference(Object* child);
|
| + void SetGcRootsReference(VisitorSynchronization::SyncTag tag);
|
| + void SetGcSubrootReference(
|
| + VisitorSynchronization::SyncTag tag, bool is_weak, Object* child);
|
| void TagObject(Object* obj, const char* tag);
|
|
|
| HeapEntry* GetEntry(Object* obj);
|
|
|
| + static inline HeapObject* GetNthGcSubrootObject(int delta);
|
| + static inline int GetGcSubrootOrder(HeapObject* subroot);
|
| +
|
| Heap* heap_;
|
| HeapSnapshot* snapshot_;
|
| HeapSnapshotsCollection* collection_;
|
| @@ -994,8 +1014,11 @@ class V8HeapExplorer : public HeapEntriesAllocator {
|
| HeapObjectsSet objects_tags_;
|
|
|
| static HeapObject* const kGcRootsObject;
|
| + static HeapObject* const kFirstGcSubrootObject;
|
| + static HeapObject* const kLastGcSubrootObject;
|
|
|
| friend class IndexedReferencesExtractor;
|
| + friend class GcSubrootsEnumerator;
|
| friend class RootsReferencesExtractor;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(V8HeapExplorer);
|
|
|