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 (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 (node->GetFunctionName ()))
5970 .setScriptId (String16::fromInteger (node->GetScriptId ()))
60- .setUrl (toProtocolString ( 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,7 +332,7 @@ 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 =
@@ -361,8 +373,10 @@ Response coverageToProtocol(
361373 }
362374 String16 url;
363375 v8::Local<v8::String> name;
364- if (script->Name ().ToLocal (&name) || script-> SourceURL (). ToLocal (&name )) {
376+ if (script->SourceURL ().ToLocal (&name) && name-> Length ( )) {
365377 url = toProtocolString (name);
378+ } else if (script->Name ().ToLocal (&name) && name->Length ()) {
379+ url = resourceNameToUrl (inspector, name);
366380 }
367381 result->addItem (protocol::Profiler::ScriptCoverage::create ()
368382 .setScriptId (String16::fromInteger (script->Id ()))
@@ -384,7 +398,7 @@ Response V8ProfilerAgentImpl::takePreciseCoverage(
384398 }
385399 v8::HandleScope handle_scope (m_isolate);
386400 v8::debug::Coverage coverage = v8::debug::Coverage::CollectPrecise (m_isolate);
387- return coverageToProtocol (m_isolate , coverage, out_result);
401+ return coverageToProtocol (m_session-> inspector () , coverage, out_result);
388402}
389403
390404Response V8ProfilerAgentImpl::getBestEffortCoverage (
@@ -393,12 +407,12 @@ Response V8ProfilerAgentImpl::getBestEffortCoverage(
393407 v8::HandleScope handle_scope (m_isolate);
394408 v8::debug::Coverage coverage =
395409 v8::debug::Coverage::CollectBestEffort (m_isolate);
396- return coverageToProtocol (m_isolate , coverage, out_result);
410+ return coverageToProtocol (m_session-> inspector () , coverage, out_result);
397411}
398412
399413namespace {
400414std::unique_ptr<protocol::Array<protocol::Profiler::ScriptTypeProfile>>
401- typeProfileToProtocol (v8::Isolate* isolate ,
415+ typeProfileToProtocol (V8InspectorImpl* inspector ,
402416 const v8::debug::TypeProfile& type_profile) {
403417 std::unique_ptr<protocol::Array<protocol::Profiler::ScriptTypeProfile>>
404418 result = protocol::Array<protocol::Profiler::ScriptTypeProfile>::create ();
@@ -426,8 +440,10 @@ typeProfileToProtocol(v8::Isolate* isolate,
426440 }
427441 String16 url;
428442 v8::Local<v8::String> name;
429- if (script->Name ().ToLocal (&name) || script-> SourceURL (). ToLocal (&name )) {
443+ if (script->SourceURL ().ToLocal (&name) && name-> Length ( )) {
430444 url = toProtocolString (name);
445+ } else if (script->Name ().ToLocal (&name) && name->Length ()) {
446+ url = resourceNameToUrl (inspector, name);
431447 }
432448 result->addItem (protocol::Profiler::ScriptTypeProfile::create ()
433449 .setScriptId (String16::fromInteger (script->Id ()))
@@ -462,7 +478,7 @@ Response V8ProfilerAgentImpl::takeTypeProfile(
462478 v8::HandleScope handle_scope (m_isolate);
463479 v8::debug::TypeProfile type_profile =
464480 v8::debug::TypeProfile::Collect (m_isolate);
465- *out_result = typeProfileToProtocol (m_isolate , type_profile);
481+ *out_result = typeProfileToProtocol (m_session-> inspector () , type_profile);
466482 return Response::OK ();
467483}
468484
@@ -491,7 +507,7 @@ std::unique_ptr<protocol::Profiler::Profile> V8ProfilerAgentImpl::stopProfiling(
491507 m_profiler->StopProfiling (toV8String (m_isolate, title));
492508 std::unique_ptr<protocol::Profiler::Profile> result;
493509 if (profile) {
494- if (serialize) result = createCPUProfile (m_isolate , profile);
510+ if (serialize) result = createCPUProfile (m_session-> inspector () , profile);
495511 profile->Delete ();
496512 }
497513 --m_startedProfilesCount;
0 commit comments