Chromium Code Reviews| Index: src/runtime/runtime-debug.cc |
| diff --git a/src/runtime/runtime-debug.cc b/src/runtime/runtime-debug.cc |
| index 75edb6341f8090df9658b3a729cd28bd1b9044de..63529c2b6a34fa7e94df992f3af97022349a7879 100644 |
| --- a/src/runtime/runtime-debug.cc |
| +++ b/src/runtime/runtime-debug.cc |
| @@ -1894,6 +1894,46 @@ RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { |
| return NULL; |
| } |
| +namespace { |
| +Handle<JSObject> CreateRangeObject(Isolate* isolate, |
| + const Coverage::Range* range, |
| + Handle<String> inner_string, |
| + Handle<String> start_string, |
| + Handle<String> end_string, |
| + Handle<String> count_string) { |
| + HandleScope scope(isolate); |
| + Factory* factory = isolate->factory(); |
| + Handle<JSObject> range_obj = factory->NewJSObjectWithNullProto(); |
| + JSObject::AddProperty(range_obj, start_string, |
| + factory->NewNumberFromInt(range->start), NONE); |
| + JSObject::AddProperty(range_obj, end_string, |
| + factory->NewNumberFromInt(range->end), NONE); |
| + JSObject::AddProperty(range_obj, count_string, |
| + factory->NewNumberFromUint(range->count), NONE); |
| + Handle<String> name = factory->anonymous_string(); |
| + if (!range->name.empty()) { |
| + Vector<const uc16> name_vector(range->name.data(), |
| + static_cast<int>(range->name.size())); |
| + name = factory->NewStringFromTwoByte(name_vector).ToHandleChecked(); |
| + } |
| + JSObject::AddProperty(range_obj, factory->name_string(), name, NONE); |
| + if (!range->inner.empty()) { |
| + int size = static_cast<int>(range->inner.size()); |
| + Handle<FixedArray> inner_array = factory->NewFixedArray(size); |
| + for (int i = 0; i < size; i++) { |
| + Handle<JSObject> element = |
| + CreateRangeObject(isolate, &range->inner[i], inner_string, |
| + start_string, end_string, count_string); |
| + inner_array->set(i, *element); |
| + } |
| + Handle<JSArray> inner = |
| + factory->NewJSArrayWithElements(inner_array, FAST_ELEMENTS); |
| + JSObject::AddProperty(range_obj, inner_string, inner, NONE); |
| + } |
| + return scope.CloseAndEscape(range_obj); |
| +} |
| +} // anonoymous namespace |
|
jgruber
2017/02/13 11:39:10
Nit: anonymous
|
| + |
| RUNTIME_FUNCTION(Runtime_DebugCollectCoverage) { |
| HandleScope scope(isolate); |
| // Collect coverage data. |
| @@ -1904,33 +1944,23 @@ RUNTIME_FUNCTION(Runtime_DebugCollectCoverage) { |
| int num_scripts = static_cast<int>(scripts.size()); |
| // Prepare property keys. |
| Handle<FixedArray> scripts_array = factory->NewFixedArray(num_scripts); |
| - Handle<String> id_string = factory->NewStringFromStaticChars("script_id"); |
| - Handle<String> entries_string = factory->NewStringFromStaticChars("entries"); |
| - Handle<String> end_string = factory->NewStringFromStaticChars("end_position"); |
| + Handle<String> script_string = factory->NewStringFromStaticChars("script"); |
| + Handle<String> toplevel_string = |
| + factory->NewStringFromStaticChars("toplevel"); |
| + Handle<String> inner_string = factory->NewStringFromStaticChars("inner"); |
| + Handle<String> start_string = factory->NewStringFromStaticChars("start"); |
| + Handle<String> end_string = factory->NewStringFromStaticChars("end"); |
| Handle<String> count_string = factory->NewStringFromStaticChars("count"); |
| for (int i = 0; i < num_scripts; i++) { |
| - // Create an object for each script, containing the script id and entries. |
| const auto& script = scripts[i]; |
|
jgruber
2017/02/13 11:39:10
Nit: The naming is getting a bit confusing now tha
|
| HandleScope inner_scope(isolate); |
| - int num_entries = static_cast<int>(script.entries.size()); |
| - Handle<FixedArray> entries_array = factory->NewFixedArray(num_entries); |
| - for (int j = 0; j < num_entries; j++) { |
| - // Create an object for each entry, containing the end position and count. |
| - const auto& entry = script.entries[j]; |
| - Handle<JSObject> entry_obj = factory->NewJSObjectWithNullProto(); |
| - JSObject::AddProperty(entry_obj, end_string, |
| - factory->NewNumberFromInt(entry.end_position), |
| - NONE); |
| - JSObject::AddProperty(entry_obj, count_string, |
| - factory->NewNumberFromUint(entry.count), NONE); |
| - entries_array->set(j, *entry_obj); |
| - } |
| Handle<JSObject> script_obj = factory->NewJSObjectWithNullProto(); |
| - JSObject::AddProperty(script_obj, id_string, |
| - factory->NewNumberFromInt(script.script_id), NONE); |
| - JSObject::AddProperty( |
| - script_obj, entries_string, |
| - factory->NewJSArrayWithElements(entries_array, FAST_ELEMENTS), NONE); |
| + Handle<JSObject> wrapper = Script::GetWrapper(script.script); |
| + JSObject::AddProperty(script_obj, script_string, wrapper, NONE); |
| + Handle<JSObject> toplevel = |
| + CreateRangeObject(isolate, &(script.toplevel), inner_string, |
|
jgruber
2017/02/13 11:39:10
Nit: Don't need the parentheses around script.topl
|
| + start_string, end_string, count_string); |
| + JSObject::AddProperty(script_obj, toplevel_string, toplevel, NONE); |
| scripts_array->set(i, *script_obj); |
| } |
| return *factory->NewJSArrayWithElements(scripts_array, FAST_ELEMENTS); |