Do not report unessential weak references in heap snapshot.

R=verwaest@chromium.org, yurys@chromium.org

Review URL: https://codereview.chromium.org/19267023

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15731 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
alph@chromium.org 2013-07-17 18:23:16 +00:00
parent dfc945d594
commit 86bfd87fa6
2 changed files with 5 additions and 25 deletions

View File

@ -1681,13 +1681,14 @@ void V8HeapExplorer::SetWeakReference(HeapObject* parent_obj,
int field_offset) {
ASSERT(parent_entry == GetEntry(parent_obj)->index());
HeapEntry* child_entry = GetEntry(child_obj);
if (child_entry != NULL) {
if (child_entry == NULL) return;
if (IsEssentialObject(child_obj)) {
filler_->SetIndexedReference(HeapGraphEdge::kWeak,
parent_entry,
index,
child_entry);
IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
}
IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
}

View File

@ -1728,27 +1728,6 @@ TEST(WeakGlobalHandle) {
}
TEST(WeakNativeContextRefs) {
LocalContext env;
v8::HandleScope scope(env->GetIsolate());
v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler();
const v8::HeapSnapshot* snapshot =
heap_profiler->TakeHeapSnapshot(v8_str("weaks"));
CHECK(ValidateSnapshot(snapshot));
const v8::HeapGraphNode* gc_roots = GetNode(
snapshot->GetRoot(), v8::HeapGraphNode::kSynthetic, "(GC roots)");
CHECK_NE(NULL, gc_roots);
const v8::HeapGraphNode* global_handles = GetNode(
gc_roots, v8::HeapGraphNode::kSynthetic, "(Global handles)");
CHECK_NE(NULL, global_handles);
const v8::HeapGraphNode* native_context = GetNode(
global_handles, v8::HeapGraphNode::kHidden, "system / NativeContext");
CHECK_NE(NULL, native_context);
CHECK(HasWeakEdge(native_context));
}
TEST(SfiAndJsFunctionWeakRefs) {
LocalContext env;
v8::HandleScope scope(env->GetIsolate());
@ -1763,10 +1742,10 @@ TEST(SfiAndJsFunctionWeakRefs) {
CHECK_NE(NULL, global);
const v8::HeapGraphNode* fun =
GetProperty(global, v8::HeapGraphEdge::kProperty, "fun");
CHECK(HasWeakEdge(fun));
CHECK(!HasWeakEdge(fun));
const v8::HeapGraphNode* shared =
GetProperty(fun, v8::HeapGraphEdge::kInternal, "shared");
CHECK(HasWeakEdge(shared));
CHECK(!HasWeakEdge(shared));
}