| Index: src/profile-generator.h
|
| ===================================================================
|
| --- src/profile-generator.h (revision 11348)
|
| +++ src/profile-generator.h (working copy)
|
| @@ -464,22 +464,21 @@
|
| void Init(int child_index, Type type, int index, HeapEntry* to);
|
| void Init(int child_index, int index, HeapEntry* to);
|
|
|
| - Type type() { return static_cast<Type>(type_); }
|
| - int index() {
|
| + Type type() const { return static_cast<Type>(type_); }
|
| + int index() const {
|
| ASSERT(type_ == kElement || type_ == kHidden || type_ == kWeak);
|
| return index_;
|
| }
|
| - const char* name() {
|
| + const char* name() const {
|
| ASSERT(type_ == kContextVariable
|
| || type_ == kProperty
|
| || type_ == kInternal
|
| || type_ == kShortcut);
|
| return name_;
|
| }
|
| - HeapEntry* to() { return to_; }
|
| + HeapEntry* to() const { return to_; }
|
| + INLINE(HeapEntry* from() const);
|
|
|
| - HeapEntry* From();
|
| -
|
| private:
|
| int child_index_ : 29;
|
| unsigned type_ : 3;
|
| @@ -564,6 +563,8 @@
|
| void clear_paint() { painted_ = false; }
|
| bool painted() { return painted_; }
|
| void paint() { painted_ = true; }
|
| + bool reachable_from_window() { return reachable_from_window_; }
|
| + void set_reachable_from_window() { reachable_from_window_ = true; }
|
|
|
| void SetIndexedReference(HeapGraphEdge::Type type,
|
| int child_index,
|
| @@ -600,8 +601,9 @@
|
| const char* TypeAsString();
|
|
|
| unsigned painted_: 1;
|
| + unsigned reachable_from_window_: 1;
|
| unsigned type_: 4;
|
| - int children_count_: 27;
|
| + int children_count_: 26;
|
| int retainers_count_;
|
| int self_size_;
|
| union {
|
| @@ -648,6 +650,7 @@
|
| HeapEntry* gc_subroot(int index) { return gc_subroot_entries_[index]; }
|
| List<HeapEntry*>* entries() { return &entries_; }
|
| size_t raw_entries_size() { return raw_entries_size_; }
|
| + int number_of_edges() { return number_of_edges_; }
|
| void RememberLastJSObjectId();
|
| SnapshotObjectId max_snapshot_js_object_id() const {
|
| return max_snapshot_js_object_id_;
|
| @@ -690,6 +693,7 @@
|
| List<HeapEntry*> entries_;
|
| List<HeapEntry*> sorted_entries_;
|
| size_t raw_entries_size_;
|
| + int number_of_edges_;
|
| SnapshotObjectId max_snapshot_js_object_id_;
|
|
|
| friend class HeapSnapshotTester;
|
| @@ -701,10 +705,10 @@
|
| class HeapObjectsMap {
|
| public:
|
| HeapObjectsMap();
|
| - ~HeapObjectsMap();
|
|
|
| void SnapshotGenerationFinished();
|
| - SnapshotObjectId FindObject(Address addr);
|
| + SnapshotObjectId FindEntry(Address addr);
|
| + SnapshotObjectId FindOrAddEntry(Address addr, unsigned int size);
|
| void MoveObject(Address from, Address to);
|
| SnapshotObjectId last_assigned_id() const {
|
| return next_id_ - kObjectIdStep;
|
| @@ -725,23 +729,22 @@
|
|
|
| private:
|
| struct EntryInfo {
|
| - EntryInfo(SnapshotObjectId id, Address addr)
|
| - : id(id), addr(addr), accessed(true) { }
|
| - EntryInfo(SnapshotObjectId id, Address addr, bool accessed)
|
| - : id(id), addr(addr), accessed(accessed) { }
|
| + EntryInfo(SnapshotObjectId id, Address addr, unsigned int size)
|
| + : id(id), addr(addr), size(size), accessed(true) { }
|
| + EntryInfo(SnapshotObjectId id, Address addr, unsigned int size, bool accessed)
|
| + : id(id), addr(addr), size(size), accessed(accessed) { }
|
| SnapshotObjectId id;
|
| Address addr;
|
| + unsigned int size;
|
| bool accessed;
|
| };
|
| struct TimeInterval {
|
| - explicit TimeInterval(SnapshotObjectId id) : id(id), count(0) { }
|
| + explicit TimeInterval(SnapshotObjectId id) : id(id), size(0), count(0) { }
|
| SnapshotObjectId id;
|
| + unsigned int size;
|
| uint32_t count;
|
| };
|
|
|
| - void AddEntry(Address addr, SnapshotObjectId id);
|
| - SnapshotObjectId FindEntry(Address addr);
|
| - SnapshotObjectId FindOrAddEntry(Address addr);
|
| void UpdateHeapObjectsMap();
|
| void RemoveDeadEntries();
|
|
|
| @@ -755,10 +758,9 @@
|
| v8::internal::kZeroHashSeed);
|
| }
|
|
|
| - bool initial_fill_mode_;
|
| SnapshotObjectId next_id_;
|
| HashMap entries_map_;
|
| - List<EntryInfo>* entries_;
|
| + List<EntryInfo> entries_;
|
| List<TimeInterval> time_intervals_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(HeapObjectsMap);
|
| @@ -787,7 +789,12 @@
|
| StringsStorage* names() { return &names_; }
|
| TokenEnumerator* token_enumerator() { return token_enumerator_; }
|
|
|
| - SnapshotObjectId GetObjectId(Address addr) { return ids_.FindObject(addr); }
|
| + SnapshotObjectId FindObjectId(Address object_addr) {
|
| + return ids_.FindEntry(object_addr);
|
| + }
|
| + SnapshotObjectId GetObjectId(Address object_addr, int object_size) {
|
| + return ids_.FindOrAddEntry(object_addr, object_size);
|
| + }
|
| Handle<HeapObject> FindHeapObjectById(SnapshotObjectId id);
|
| void ObjectMoveEvent(Address from, Address to) { ids_.MoveObject(from, to); }
|
| SnapshotObjectId last_assigned_id() const {
|
| @@ -1013,7 +1020,7 @@
|
| HeapEntry* parent,
|
| String* reference_name,
|
| Object* child);
|
| - void SetRootShortcutReference(Object* child);
|
| + void SetWindowReference(Object* window);
|
| void SetRootGcRootsReference();
|
| void SetGcRootsReference(VisitorSynchronization::SyncTag tag);
|
| void SetGcSubrootReference(
|
| @@ -1117,7 +1124,9 @@
|
| bool CalculateRetainedSizes();
|
| bool CountEntriesAndReferences();
|
| bool FillReferences();
|
| - void FillReversePostorderIndexes(Vector<HeapEntry*>* entries);
|
| + void FillPostorderIndexes(Vector<HeapEntry*>* entries);
|
| + bool IsWindowReference(const HeapGraphEdge& edge);
|
| + void MarkWindowReachableObjects();
|
| void ProgressStep();
|
| bool ProgressReport(bool force = false);
|
| bool SetEntriesDominators();
|
| @@ -1160,12 +1169,14 @@
|
| v8::internal::kZeroHashSeed);
|
| }
|
|
|
| + void CalculateNodeIndexes(const List<HeapEntry*>& nodes);
|
| HeapSnapshot* CreateFakeSnapshot();
|
| int GetStringId(const char* s);
|
| - void SerializeEdge(HeapGraphEdge* edge);
|
| + void SerializeEdge(HeapGraphEdge* edge, bool first_edge);
|
| + void SerializeEdges(const List<HeapEntry*>& nodes);
|
| void SerializeImpl();
|
| - void SerializeNode(HeapEntry* entry);
|
| - void SerializeNodes();
|
| + void SerializeNode(HeapEntry* entry, int edges_index);
|
| + void SerializeNodes(const List<HeapEntry*>& nodes);
|
| void SerializeSnapshot();
|
| void SerializeString(const unsigned char* s);
|
| void SerializeStrings();
|
|
|