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

Reply via email to