Reviewers: Søren Gjesse, Mads Ager,
Description:
Heap profiler: perform a GC round before taking a snapshot
to get rid of global object loaded from a snapshot. This
eliminates the "double global object" issue. Thanks to Mads
for suggesting this!
Please review this at http://codereview.chromium.org/2865013/show
Affected files:
M src/heap-profiler.cc
M test/cctest/test-heap-profiler.cc
Index: src/heap-profiler.cc
diff --git a/src/heap-profiler.cc b/src/heap-profiler.cc
index
55f09b92831f87e93a3338f1595b07b213b5a676..73b9748f18a4c4f00894864ac33929c7fccba7b6
100644
--- a/src/heap-profiler.cc
+++ b/src/heap-profiler.cc
@@ -360,6 +360,7 @@ HeapSnapshot* HeapProfiler::TakeSnapshot(String* name) {
HeapSnapshot* HeapProfiler::TakeSnapshotImpl(const char* name) {
+ Heap::CollectAllGarbage(false);
HeapSnapshot* result = snapshots_->NewSnapshot(name,
next_snapshot_uid_++);
HeapSnapshotGenerator generator(result);
generator.GenerateSnapshot();
Index: test/cctest/test-heap-profiler.cc
diff --git a/test/cctest/test-heap-profiler.cc
b/test/cctest/test-heap-profiler.cc
index
33477acfa2518efdbedb7bbb4840361d8a90c30f..7f1e3d80629f541366d5ba1811a7176a7652076b
100644
--- a/test/cctest/test-heap-profiler.cc
+++ b/test/cctest/test-heap-profiler.cc
@@ -431,21 +431,8 @@ class NamedEntriesDetector {
static const v8::HeapGraphNode* GetGlobalObject(
const v8::HeapSnapshot* snapshot) {
- if (i::Snapshot::IsEnabled()) {
- // In case if snapshots are enabled, there will present a
- // vanilla deserealized global object, without properties
- // added by the test code.
- CHECK_EQ(2, snapshot->GetHead()->GetChildrenCount());
- // Choose the global object of a bigger size.
- const v8::HeapGraphNode* node0 =
- snapshot->GetHead()->GetChild(0)->GetToNode();
- const v8::HeapGraphNode* node1 =
- snapshot->GetHead()->GetChild(1)->GetToNode();
- return node0->GetTotalSize() > node1->GetTotalSize() ? node0 : node1;
- } else {
- CHECK_EQ(1, snapshot->GetHead()->GetChildrenCount());
- return snapshot->GetHead()->GetChild(0)->GetToNode();
- }
+ CHECK_EQ(1, snapshot->GetHead()->GetChildrenCount());
+ return snapshot->GetHead()->GetChild(0)->GetToNode();
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev