Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Unified Diff: src/profiler/heap-snapshot-generator.cc

Issue 1552473002: Revert of [runtime] Introduce dedicated JSBoundFunction to represent bound functions. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@FunctionConstructor
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/profiler/heap-snapshot-generator.h ('k') | src/runtime/runtime.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/profiler/heap-snapshot-generator.cc
diff --git a/src/profiler/heap-snapshot-generator.cc b/src/profiler/heap-snapshot-generator.cc
index 69ed5e6f293163f577a43df86ff4194fb113ea99..5d1a711af67beaeed1cdf4a4107b4ff0702744b5 100644
--- a/src/profiler/heap-snapshot-generator.cc
+++ b/src/profiler/heap-snapshot-generator.cc
@@ -805,10 +805,9 @@
if (object->IsJSFunction()) {
JSFunction* func = JSFunction::cast(object);
SharedFunctionInfo* shared = func->shared();
- const char* name = names_->GetName(String::cast(shared->name()));
+ const char* name = shared->bound() ? "native_bind" :
+ names_->GetName(String::cast(shared->name()));
return AddEntry(object, HeapEntry::kClosure, name);
- } else if (object->IsJSBoundFunction()) {
- return AddEntry(object, HeapEntry::kClosure, "native_bind");
} else if (object->IsJSRegExp()) {
JSRegExp* re = JSRegExp::cast(object);
return AddEntry(object,
@@ -1099,29 +1098,13 @@
void V8HeapExplorer::ExtractJSObjectReferences(
int entry, JSObject* js_obj) {
HeapObject* obj = js_obj;
+ ExtractClosureReferences(js_obj, entry);
ExtractPropertyReferences(js_obj, entry);
ExtractElementReferences(js_obj, entry);
ExtractInternalReferences(js_obj, entry);
PrototypeIterator iter(heap_->isolate(), js_obj);
SetPropertyReference(obj, entry, heap_->proto_string(), iter.GetCurrent());
- if (obj->IsJSBoundFunction()) {
- JSBoundFunction* js_fun = JSBoundFunction::cast(obj);
- TagObject(js_fun->bound_arguments(), "(bound arguments)");
- SetInternalReference(js_fun, entry, "bindings", js_fun->bound_arguments(),
- JSBoundFunction::kBoundArgumentsOffset);
- TagObject(js_fun->creation_context(), "(creation context)");
- SetInternalReference(js_fun, entry, "creation_context",
- js_fun->creation_context(),
- JSBoundFunction::kCreationContextOffset);
- SetNativeBindReference(js_obj, entry, "bound_this", js_fun->bound_this());
- SetNativeBindReference(js_obj, entry, "bound_function",
- js_fun->bound_target_function());
- FixedArray* bindings = js_fun->bound_arguments();
- for (int i = 0; i < bindings->length(); i++) {
- const char* reference_name = names_->GetFormatted("bound_argument_%d", i);
- SetNativeBindReference(js_obj, entry, reference_name, bindings->get(i));
- }
- } else if (obj->IsJSFunction()) {
+ if (obj->IsJSFunction()) {
JSFunction* js_fun = JSFunction::cast(js_obj);
Object* proto_or_map = js_fun->prototype_or_initial_map();
if (!proto_or_map->IsTheHole()) {
@@ -1141,8 +1124,13 @@
}
}
SharedFunctionInfo* shared_info = js_fun->shared();
- TagObject(js_fun->literals(), "(function literals)");
- SetInternalReference(js_fun, entry, "literals", js_fun->literals(),
+ // JSFunction has either bindings or literals and never both.
+ bool bound = shared_info->bound();
+ TagObject(js_fun->literals_or_bindings(),
+ bound ? "(function bindings)" : "(function literals)");
+ SetInternalReference(js_fun, entry,
+ bound ? "bindings" : "literals",
+ js_fun->literals_or_bindings(),
JSFunction::kLiteralsOffset);
TagObject(shared_info, "(shared function info)");
SetInternalReference(js_fun, entry,
@@ -1582,6 +1570,24 @@
} else {
SetInternalReference(array, entry,
i, array->get(i), array->OffsetOfElementAt(i));
+ }
+ }
+}
+
+
+void V8HeapExplorer::ExtractClosureReferences(JSObject* js_obj, int entry) {
+ if (!js_obj->IsJSFunction()) return;
+
+ JSFunction* func = JSFunction::cast(js_obj);
+ if (func->shared()->bound()) {
+ BindingsArray* bindings = func->function_bindings();
+ SetNativeBindReference(js_obj, entry, "bound_this", bindings->bound_this());
+ SetNativeBindReference(js_obj, entry, "bound_function",
+ bindings->bound_function());
+ for (int i = 0; i < bindings->bindings_count(); i++) {
+ const char* reference_name = names_->GetFormatted("bound_argument_%d", i);
+ SetNativeBindReference(js_obj, entry, reference_name,
+ bindings->binding(i));
}
}
}
« no previous file with comments | « src/profiler/heap-snapshot-generator.h ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698