SetInternalReference(global_obj, entry,
"global_receiver", global_obj->global_receiver(),
GlobalObject::kGlobalReceiverOffset);
+ } else if (obj->IsJSArrayBufferView()) {
+ JSArrayBufferView* view = JSArrayBufferView::cast(obj);
+ SetInternalReference(view, entry, "buffer", view->buffer(),
+ JSArrayBufferView::kBufferOffset);
+ SetWeakReference(view, entry, 1, view->weak_next(),
+ JSArrayBufferView::kWeakNextOffset);
+ } else if (obj->IsJSArrayBuffer()) {
+ JSArrayBuffer* buffer = JSArrayBuffer::cast(obj);
+ SetWeakReference(buffer, entry, 1, buffer->weak_next(),
+ JSArrayBuffer::kWeakNextOffset);
+ SetWeakReference(buffer, entry, 2, buffer->weak_first_view(),
+ JSArrayBuffer::kWeakFirstViewOffset);
}
TagObject(js_obj->properties(), "(object properties)");
SetInternalReference(obj, entry,
heap_profiler->StopTrackingHeapObjects();
}
}
+
+
+TEST(ArrayBufferAndArrayBufferView) {
+ LocalContext env;
+ v8::HandleScope scope(env->GetIsolate());
+ v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler();
+ CompileRun("arr1 = new Uint32Array(100);\n");
+ const v8::HeapSnapshot* snapshot =
+ heap_profiler->TakeHeapSnapshot(v8_str("snapshot"));
+ CHECK(ValidateSnapshot(snapshot));
+ const v8::HeapGraphNode* global = GetGlobalObject(snapshot);
+ const v8::HeapGraphNode* arr1_obj =
+ GetProperty(global, v8::HeapGraphEdge::kProperty, "arr1");
+ CHECK_NE(NULL, arr1_obj);
+ const v8::HeapGraphNode* arr1_buffer =
+ GetProperty(arr1_obj, v8::HeapGraphEdge::kInternal, "buffer");
+ CHECK_NE(NULL, arr1_buffer);
+ const v8::HeapGraphNode* first_view =
+ GetProperty(arr1_buffer, v8::HeapGraphEdge::kWeak, "2");
+ CHECK_NE(NULL, first_view);
+}