diff options
Diffstat (limited to 'deps/v8/src/profiler/heap-snapshot-generator.cc')
-rw-r--r-- | deps/v8/src/profiler/heap-snapshot-generator.cc | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/deps/v8/src/profiler/heap-snapshot-generator.cc b/deps/v8/src/profiler/heap-snapshot-generator.cc index b7b97a8320..b360fccdfe 100644 --- a/deps/v8/src/profiler/heap-snapshot-generator.cc +++ b/deps/v8/src/profiler/heap-snapshot-generator.cc @@ -1299,7 +1299,14 @@ void V8HeapExplorer::ExtractMapReferences(int entry, Map* map) { TagObject(constructor_or_backpointer, "(back pointer)"); SetInternalReference(map, entry, "back_pointer", constructor_or_backpointer, Map::kConstructorOrBackPointerOffset); + } else if (constructor_or_backpointer->IsFunctionTemplateInfo()) { + TagObject(constructor_or_backpointer, "(constructor function data)"); + SetInternalReference(map, entry, "constructor_function_data", + constructor_or_backpointer, + Map::kConstructorOrBackPointerOffset); } else { + DCHECK(constructor_or_backpointer->IsJSFunction() || + constructor_or_backpointer->IsNull(map->GetIsolate())); SetInternalReference(map, entry, "constructor", constructor_or_backpointer, Map::kConstructorOrBackPointerOffset); } @@ -1655,11 +1662,11 @@ void V8HeapExplorer::ExtractElementReferences(JSObject* js_obj, int entry) { void V8HeapExplorer::ExtractInternalReferences(JSObject* js_obj, int entry) { - int length = js_obj->GetInternalFieldCount(); + int length = js_obj->GetEmbedderFieldCount(); for (int i = 0; i < length; ++i) { - Object* o = js_obj->GetInternalField(i); - SetInternalReference( - js_obj, entry, i, o, js_obj->GetInternalFieldOffset(i)); + Object* o = js_obj->GetEmbedderField(i); + SetInternalReference(js_obj, entry, i, o, + js_obj->GetEmbedderFieldOffset(i)); } } @@ -1708,6 +1715,7 @@ class RootsReferencesExtractor : public ObjectVisitor { void FillReferences(V8HeapExplorer* explorer) { DCHECK(strong_references_.length() <= all_references_.length()); Builtins* builtins = heap_->isolate()->builtins(); + USE(builtins); int strong_index = 0, all_index = 0, tags_index = 0, builtin_index = 0; while (all_index < all_references_.length()) { bool is_strong = strong_index < strong_references_.length() @@ -2189,16 +2197,17 @@ void V8HeapExplorer::TagGlobalObjects() { DeleteArray(urls); } - -class GlobalHandlesExtractor : public ObjectVisitor { +class GlobalHandlesExtractor : public PersistentHandleVisitor { public: explicit GlobalHandlesExtractor(NativeObjectsExplorer* explorer) : explorer_(explorer) {} ~GlobalHandlesExtractor() override {} - void VisitPointers(Object** start, Object** end) override { UNREACHABLE(); } - void VisitEmbedderReference(Object** p, uint16_t class_id) override { - explorer_->VisitSubtreeWrapper(p, class_id); + void VisitPersistentHandle(Persistent<Value>* value, + uint16_t class_id) override { + Handle<Object> object = Utils::OpenPersistent(value); + explorer_->VisitSubtreeWrapper(object.location(), class_id); } + private: NativeObjectsExplorer* explorer_; }; |