From: mikhail.naganov@gmail.com Date: Fri, 21 Oct 2011 13:05:37 +0000 (+0000) Subject: The detailed heap snapshot generator was slightly adjusted for tracking sliced strings. X-Git-Tag: upstream/4.7.83~18121 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fa0d4ecf432280894a27a4cbbc7e0131a2a0d481;p=platform%2Fupstream%2Fv8.git The detailed heap snapshot generator was slightly adjusted for tracking sliced strings. BUG=v8:1779 TEST=cctest/test-heap-profiler/HeapSnapshotSlicedString Review URL: http://codereview.chromium.org/8362028 Patch from Ilya Tikhonovsky . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9742 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/profile-generator.cc b/src/profile-generator.cc index 522676c..9812c26 100644 --- a/src/profile-generator.cc +++ b/src/profile-generator.cc @@ -1951,6 +1951,10 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) { SetInternalReference(obj, entry, 1, cs->first()); SetInternalReference(obj, entry, 2, cs->second()); } + if (obj->IsSlicedString()) { + SlicedString* ss = SlicedString::cast(obj); + SetInternalReference(obj, entry, "parent", ss->parent()); + } extract_indexed_refs = false; } else if (obj->IsGlobalContext()) { Context* context = Context::cast(obj); diff --git a/test/cctest/test-heap-profiler.cc b/test/cctest/test-heap-profiler.cc index d695d74..87e7a7d 100644 --- a/test/cctest/test-heap-profiler.cc +++ b/test/cctest/test-heap-profiler.cc @@ -252,6 +252,28 @@ TEST(HeapSnapshotHeapNumbers) { CHECK_EQ(v8::HeapGraphNode::kHeapNumber, b->GetType()); } +TEST(HeapSnapshotSlicedString) { + v8::HandleScope scope; + LocalContext env; + CompileRun( + "parent_string = \"123456789.123456789.123456789.123456789.123456789." + "123456789.123456789.123456789.123456789.123456789." + "123456789.123456789.123456789.123456789.123456789." + "123456789.123456789.123456789.123456789.123456789.\";" + "child_string = parent_string.slice(100);"); + const v8::HeapSnapshot* snapshot = + v8::HeapProfiler::TakeSnapshot(v8_str("strings")); + const v8::HeapGraphNode* global = GetGlobalObject(snapshot); + const v8::HeapGraphNode* parent_string = + GetProperty(global, v8::HeapGraphEdge::kShortcut, "parent_string"); + CHECK_NE(NULL, parent_string); + const v8::HeapGraphNode* child_string = + GetProperty(global, v8::HeapGraphEdge::kShortcut, "child_string"); + CHECK_NE(NULL, child_string); + const v8::HeapGraphNode* parent = + GetProperty(child_string, v8::HeapGraphEdge::kInternal, "parent"); + CHECK_EQ(parent_string, parent); +} TEST(HeapSnapshotInternalReferences) { v8::HandleScope scope;