summaryrefslogtreecommitdiff
path: root/deps/v8/src/profiler/heap-snapshot-generator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/profiler/heap-snapshot-generator.cc')
-rw-r--r--deps/v8/src/profiler/heap-snapshot-generator.cc27
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_;
};