Index: src/profile-generator.h |
diff --git a/src/profile-generator.h b/src/profile-generator.h |
index 16764a214ab581e0cae3af48e92b702cbe4d5211..cacd27eaab07b9a7649c0d195bee3f67efd898cf 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_; } |
- uint64_t id(); |
+ inline 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,13 +558,6 @@ 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, |
@@ -625,10 +618,6 @@ 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; |
@@ -682,6 +671,7 @@ 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); |
@@ -693,7 +683,6 @@ class HeapSnapshot { |
int size, |
int children_count, |
int retainers_count); |
- void ApproximateRetainedSizes(); |
void ClearPaint(); |
HeapSnapshotsDiff* CompareWith(HeapSnapshot* snapshot); |
HeapEntry* GetEntryById(uint64_t id); |
@@ -716,10 +705,6 @@ 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_; |
@@ -845,7 +830,7 @@ class HeapSnapshotsCollection { |
HeapSnapshot* NewSnapshot( |
HeapSnapshot::Type type, const char* name, unsigned uid); |
- void SnapshotGenerationFinished() { ids_.SnapshotGenerationFinished(); } |
+ void SnapshotGenerationFinished(HeapSnapshot* snapshot); |
List<HeapSnapshot*>* snapshots() { return &snapshots_; } |
HeapSnapshot* GetSnapshot(unsigned uid); |
@@ -968,16 +953,27 @@ class HeapSnapshotGenerator { |
HeapEntry* child_entry) = 0; |
}; |
- explicit HeapSnapshotGenerator(HeapSnapshot* snapshot); |
- void GenerateSnapshot(); |
+ HeapSnapshotGenerator(HeapSnapshot* snapshot, |
+ v8::ActivityControl* control); |
+ bool 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, |
@@ -1009,8 +1005,10 @@ 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_; |
@@ -1018,6 +1016,9 @@ 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; |