77#include < vector>
88
99#include " src/base/atomicops.h"
10+ #include " src/debug/debug-interface.h"
1011#include " src/flags.h" // TODO(jgruber): Remove include and DEPS entry.
1112#include " src/inspector/protocol/Protocol.h"
1213#include " src/inspector/string-util.h"
@@ -31,6 +32,15 @@ static const char typeProfileStarted[] = "typeProfileStarted";
3132
3233namespace {
3334
35+ String16 resourceNameToUrl (V8InspectorImpl* inspector,
36+ v8::Local<v8::String> v8Name) {
37+ String16 name = toProtocolString (inspector->isolate (), v8Name);
38+ if (!inspector) return name;
39+ std::unique_ptr<StringBuffer> url =
40+ inspector->client ()->resourceNameToUrl (toStringView (name));
41+ return url ? toString16 (url->string ()) : name;
42+ }
43+
3444std::unique_ptr<protocol::Array<protocol::Profiler::PositionTickInfo>>
3545buildInspectorObjectForPositionTicks (const v8::CpuProfileNode* node) {
3646 unsigned lineCount = node->GetHitLineCount ();
@@ -51,13 +61,14 @@ buildInspectorObjectForPositionTicks(const v8::CpuProfileNode* node) {
5161}
5262
5363std::unique_ptr<protocol::Profiler::ProfileNode> buildInspectorObjectFor (
54- v8::Isolate* isolate, const v8::CpuProfileNode* node) {
64+ V8InspectorImpl* inspector, const v8::CpuProfileNode* node) {
65+ v8::Isolate* isolate = inspector->isolate ();
5566 v8::HandleScope handleScope (isolate);
5667 auto callFrame =
5768 protocol::Runtime::CallFrame::create ()
5869 .setFunctionName (toProtocolString (isolate, node->GetFunctionName ()))
5970 .setScriptId (String16::fromInteger (node->GetScriptId ()))
60- .setUrl (toProtocolString (isolate , node->GetScriptResourceName ()))
71+ .setUrl (resourceNameToUrl (inspector , node->GetScriptResourceName ()))
6172 .setLineNumber (node->GetLineNumber () - 1 )
6273 .setColumnNumber (node->GetColumnNumber () - 1 )
6374 .build ();
@@ -107,18 +118,19 @@ std::unique_ptr<protocol::Array<int>> buildInspectorObjectForTimestamps(
107118 return array;
108119}
109120
110- void flattenNodesTree (v8::Isolate* isolate, const v8::CpuProfileNode* node,
121+ void flattenNodesTree (V8InspectorImpl* inspector,
122+ const v8::CpuProfileNode* node,
111123 protocol::Array<protocol::Profiler::ProfileNode>* list) {
112- list->addItem (buildInspectorObjectFor (isolate , node));
124+ list->addItem (buildInspectorObjectFor (inspector , node));
113125 const int childrenCount = node->GetChildrenCount ();
114126 for (int i = 0 ; i < childrenCount; i++)
115- flattenNodesTree (isolate , node->GetChild (i), list);
127+ flattenNodesTree (inspector , node->GetChild (i), list);
116128}
117129
118130std::unique_ptr<protocol::Profiler::Profile> createCPUProfile (
119- v8::Isolate* isolate , v8::CpuProfile* v8profile) {
131+ V8InspectorImpl* inspector , v8::CpuProfile* v8profile) {
120132 auto nodes = protocol::Array<protocol::Profiler::ProfileNode>::create ();
121- flattenNodesTree (isolate , v8profile->GetTopDownRoot (), nodes.get ());
133+ flattenNodesTree (inspector , v8profile->GetTopDownRoot (), nodes.get ());
122134 return protocol::Profiler::Profile::create ()
123135 .setNodes (std::move (nodes))
124136 .setStartTime (static_cast <double >(v8profile->GetStartTime ()))
@@ -320,11 +332,12 @@ std::unique_ptr<protocol::Profiler::CoverageRange> createCoverageRange(
320332}
321333
322334Response coverageToProtocol (
323- v8::Isolate* isolate , const v8::debug::Coverage& coverage,
335+ V8InspectorImpl* inspector , const v8::debug::Coverage& coverage,
324336 std::unique_ptr<protocol::Array<protocol::Profiler::ScriptCoverage>>*
325337 out_result) {
326338 std::unique_ptr<protocol::Array<protocol::Profiler::ScriptCoverage>> result =
327339 protocol::Array<protocol::Profiler::ScriptCoverage>::create ();
340+ v8::Isolate* isolate = inspector->isolate ();
328341 for (size_t i = 0 ; i < coverage.ScriptCount (); i++) {
329342 v8::debug::Coverage::ScriptData script_data = coverage.GetScriptData (i);
330343 v8::Local<v8::debug::Script> script = script_data.GetScript ();
@@ -362,8 +375,10 @@ Response coverageToProtocol(
362375 }
363376 String16 url;
364377 v8::Local<v8::String> name;
365- if (script->Name ().ToLocal (&name) || script-> SourceURL (). ToLocal (&name )) {
378+ if (script->SourceURL ().ToLocal (&name) && name-> Length ( )) {
366379 url = toProtocolString (isolate, name);
380+ } else if (script->Name ().ToLocal (&name) && name->Length ()) {
381+ url = resourceNameToUrl (inspector, name);
367382 }
368383 result->addItem (protocol::Profiler::ScriptCoverage::create ()
369384 .setScriptId (String16::fromInteger (script->Id ()))
@@ -385,7 +400,7 @@ Response V8ProfilerAgentImpl::takePreciseCoverage(
385400 }
386401 v8::HandleScope handle_scope (m_isolate);
387402 v8::debug::Coverage coverage = v8::debug::Coverage::CollectPrecise (m_isolate);
388- return coverageToProtocol (m_isolate , coverage, out_result);
403+ return coverageToProtocol (m_session-> inspector () , coverage, out_result);
389404}
390405
391406Response V8ProfilerAgentImpl::getBestEffortCoverage (
@@ -394,15 +409,16 @@ Response V8ProfilerAgentImpl::getBestEffortCoverage(
394409 v8::HandleScope handle_scope (m_isolate);
395410 v8::debug::Coverage coverage =
396411 v8::debug::Coverage::CollectBestEffort (m_isolate);
397- return coverageToProtocol (m_isolate , coverage, out_result);
412+ return coverageToProtocol (m_session-> inspector () , coverage, out_result);
398413}
399414
400415namespace {
401416std::unique_ptr<protocol::Array<protocol::Profiler::ScriptTypeProfile>>
402- typeProfileToProtocol (v8::Isolate* isolate ,
417+ typeProfileToProtocol (V8InspectorImpl* inspector ,
403418 const v8::debug::TypeProfile& type_profile) {
404419 std::unique_ptr<protocol::Array<protocol::Profiler::ScriptTypeProfile>>
405420 result = protocol::Array<protocol::Profiler::ScriptTypeProfile>::create ();
421+ v8::Isolate* isolate = inspector->isolate ();
406422 for (size_t i = 0 ; i < type_profile.ScriptCount (); i++) {
407423 v8::debug::TypeProfile::ScriptData script_data =
408424 type_profile.GetScriptData (i);
@@ -428,8 +444,10 @@ typeProfileToProtocol(v8::Isolate* isolate,
428444 }
429445 String16 url;
430446 v8::Local<v8::String> name;
431- if (script->Name ().ToLocal (&name) || script-> SourceURL (). ToLocal (&name )) {
447+ if (script->SourceURL ().ToLocal (&name) && name-> Length ( )) {
432448 url = toProtocolString (isolate, name);
449+ } else if (script->Name ().ToLocal (&name) && name->Length ()) {
450+ url = resourceNameToUrl (inspector, name);
433451 }
434452 result->addItem (protocol::Profiler::ScriptTypeProfile::create ()
435453 .setScriptId (String16::fromInteger (script->Id ()))
@@ -464,7 +482,7 @@ Response V8ProfilerAgentImpl::takeTypeProfile(
464482 v8::HandleScope handle_scope (m_isolate);
465483 v8::debug::TypeProfile type_profile =
466484 v8::debug::TypeProfile::Collect (m_isolate);
467- *out_result = typeProfileToProtocol (m_isolate , type_profile);
485+ *out_result = typeProfileToProtocol (m_session-> inspector () , type_profile);
468486 return Response::OK ();
469487}
470488
@@ -493,7 +511,7 @@ std::unique_ptr<protocol::Profiler::Profile> V8ProfilerAgentImpl::stopProfiling(
493511 m_profiler->StopProfiling (toV8String (m_isolate, title));
494512 std::unique_ptr<protocol::Profiler::Profile> result;
495513 if (profile) {
496- if (serialize) result = createCPUProfile (m_isolate , profile);
514+ if (serialize) result = createCPUProfile (m_session-> inspector () , profile);
497515 profile->Delete ();
498516 }
499517 --m_startedProfilesCount;
0 commit comments