OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "platform/v8_inspector/V8ProfilerAgentImpl.h" | 5 #include "platform/v8_inspector/V8ProfilerAgentImpl.h" |
6 | 6 |
7 #include "platform/v8_inspector/Atomics.h" | 7 #include "platform/v8_inspector/Atomics.h" |
8 #include "platform/v8_inspector/V8DebuggerImpl.h" | 8 #include "platform/v8_inspector/V8DebuggerImpl.h" |
9 #include "platform/v8_inspector/V8StackTraceImpl.h" | 9 #include "platform/v8_inspector/V8StackTraceImpl.h" |
10 #include "platform/v8_inspector/V8StringUtil.h" | 10 #include "platform/v8_inspector/V8StringUtil.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 OwnPtr<protocol::Array<protocol::Profiler::CPUProfileNode>> children = proto
col::Array<protocol::Profiler::CPUProfileNode>::create(); | 46 OwnPtr<protocol::Array<protocol::Profiler::CPUProfileNode>> children = proto
col::Array<protocol::Profiler::CPUProfileNode>::create(); |
47 const int childrenCount = node->GetChildrenCount(); | 47 const int childrenCount = node->GetChildrenCount(); |
48 for (int i = 0; i < childrenCount; i++) { | 48 for (int i = 0; i < childrenCount; i++) { |
49 const v8::CpuProfileNode* child = node->GetChild(i); | 49 const v8::CpuProfileNode* child = node->GetChild(i); |
50 children->addItem(buildInspectorObjectFor(isolate, child)); | 50 children->addItem(buildInspectorObjectFor(isolate, child)); |
51 } | 51 } |
52 | 52 |
53 OwnPtr<protocol::Array<protocol::Profiler::PositionTickInfo>> positionTicks
= buildInspectorObjectForPositionTicks(node); | 53 OwnPtr<protocol::Array<protocol::Profiler::PositionTickInfo>> positionTicks
= buildInspectorObjectForPositionTicks(node); |
54 | 54 |
55 OwnPtr<protocol::Profiler::CPUProfileNode> result = protocol::Profiler::CPUP
rofileNode::create() | 55 OwnPtr<protocol::Profiler::CPUProfileNode> result = protocol::Profiler::CPUP
rofileNode::create() |
56 .setFunctionName(toWTFString(node->GetFunctionName())) | 56 .setFunctionName(toProtocolString(node->GetFunctionName())) |
57 .setScriptId(String::number(node->GetScriptId())) | 57 .setScriptId(String16::number(node->GetScriptId())) |
58 .setUrl(toWTFString(node->GetScriptResourceName())) | 58 .setUrl(toProtocolString(node->GetScriptResourceName())) |
59 .setLineNumber(node->GetLineNumber()) | 59 .setLineNumber(node->GetLineNumber()) |
60 .setColumnNumber(node->GetColumnNumber()) | 60 .setColumnNumber(node->GetColumnNumber()) |
61 .setHitCount(node->GetHitCount()) | 61 .setHitCount(node->GetHitCount()) |
62 .setCallUID(node->GetCallUid()) | 62 .setCallUID(node->GetCallUid()) |
63 .setChildren(children.release()) | 63 .setChildren(children.release()) |
64 .setPositionTicks(positionTicks.release()) | 64 .setPositionTicks(positionTicks.release()) |
65 .setDeoptReason(node->GetBailoutReason()) | 65 .setDeoptReason(node->GetBailoutReason()) |
66 .setId(node->GetNodeId()).build(); | 66 .setId(node->GetNodeId()).build(); |
67 return result.release(); | 67 return result.release(); |
68 } | 68 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 location->setColumnNumber(callStack->topColumnNumber()); | 105 location->setColumnNumber(callStack->topColumnNumber()); |
106 return location.release(); | 106 return location.release(); |
107 } | 107 } |
108 | 108 |
109 volatile int s_lastProfileId = 0; | 109 volatile int s_lastProfileId = 0; |
110 | 110 |
111 } // namespace | 111 } // namespace |
112 | 112 |
113 class V8ProfilerAgentImpl::ProfileDescriptor { | 113 class V8ProfilerAgentImpl::ProfileDescriptor { |
114 public: | 114 public: |
115 ProfileDescriptor(const String& id, const String& title) | 115 ProfileDescriptor(const String16& id, const String16& title) |
116 : m_id(id) | 116 : m_id(id) |
117 , m_title(title) { } | 117 , m_title(title) { } |
118 String m_id; | 118 String16 m_id; |
119 String m_title; | 119 String16 m_title; |
120 }; | 120 }; |
121 | 121 |
122 PassOwnPtr<V8ProfilerAgent> V8ProfilerAgent::create(V8Debugger* debugger) | 122 PassOwnPtr<V8ProfilerAgent> V8ProfilerAgent::create(V8Debugger* debugger) |
123 { | 123 { |
124 return adoptPtr(new V8ProfilerAgentImpl(debugger)); | 124 return adoptPtr(new V8ProfilerAgentImpl(debugger)); |
125 } | 125 } |
126 | 126 |
127 V8ProfilerAgentImpl::V8ProfilerAgentImpl(V8Debugger* debugger) | 127 V8ProfilerAgentImpl::V8ProfilerAgentImpl(V8Debugger* debugger) |
128 : m_debugger(static_cast<V8DebuggerImpl*>(debugger)) | 128 : m_debugger(static_cast<V8DebuggerImpl*>(debugger)) |
129 , m_isolate(m_debugger->isolate()) | 129 , m_isolate(m_debugger->isolate()) |
130 , m_state(nullptr) | 130 , m_state(nullptr) |
131 , m_frontend(nullptr) | 131 , m_frontend(nullptr) |
132 , m_enabled(false) | 132 , m_enabled(false) |
133 , m_recordingCPUProfile(false) | 133 , m_recordingCPUProfile(false) |
134 { | 134 { |
135 } | 135 } |
136 | 136 |
137 V8ProfilerAgentImpl::~V8ProfilerAgentImpl() | 137 V8ProfilerAgentImpl::~V8ProfilerAgentImpl() |
138 { | 138 { |
139 } | 139 } |
140 | 140 |
141 void V8ProfilerAgentImpl::consoleProfile(const String& title) | 141 void V8ProfilerAgentImpl::consoleProfile(const String16& title) |
142 { | 142 { |
143 ASSERT(m_frontend && m_enabled); | 143 ASSERT(m_frontend && m_enabled); |
144 String id = nextProfileId(); | 144 String16 id = nextProfileId(); |
145 m_startedProfiles.append(ProfileDescriptor(id, title)); | 145 m_startedProfiles.append(ProfileDescriptor(id, title)); |
146 startProfiling(id); | 146 startProfiling(id); |
147 m_frontend->consoleProfileStarted(id, currentDebugLocation(m_debugger), titl
e); | 147 m_frontend->consoleProfileStarted(id, currentDebugLocation(m_debugger), titl
e); |
148 } | 148 } |
149 | 149 |
150 void V8ProfilerAgentImpl::consoleProfileEnd(const String& title) | 150 void V8ProfilerAgentImpl::consoleProfileEnd(const String16& title) |
151 { | 151 { |
152 ASSERT(m_frontend && m_enabled); | 152 ASSERT(m_frontend && m_enabled); |
153 String id; | 153 String16 id; |
154 String resolvedTitle; | 154 String16 resolvedTitle; |
155 // Take last started profile if no title was passed. | 155 // Take last started profile if no title was passed. |
156 if (title.isNull()) { | 156 if (title.isNull()) { |
157 if (m_startedProfiles.isEmpty()) | 157 if (m_startedProfiles.isEmpty()) |
158 return; | 158 return; |
159 id = m_startedProfiles.last().m_id; | 159 id = m_startedProfiles.last().m_id; |
160 resolvedTitle = m_startedProfiles.last().m_title; | 160 resolvedTitle = m_startedProfiles.last().m_title; |
161 m_startedProfiles.removeLast(); | 161 m_startedProfiles.removeLast(); |
162 } else { | 162 } else { |
163 for (size_t i = 0; i < m_startedProfiles.size(); i++) { | 163 for (size_t i = 0; i < m_startedProfiles.size(); i++) { |
164 if (m_startedProfiles[i].m_title == title) { | 164 if (m_startedProfiles[i].m_title == title) { |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 *errorString = "No recording profiles found"; | 244 *errorString = "No recording profiles found"; |
245 return; | 245 return; |
246 } | 246 } |
247 m_recordingCPUProfile = false; | 247 m_recordingCPUProfile = false; |
248 OwnPtr<protocol::Profiler::CPUProfile> cpuProfile = stopProfiling(m_frontend
InitiatedProfileId, !!profile); | 248 OwnPtr<protocol::Profiler::CPUProfile> cpuProfile = stopProfiling(m_frontend
InitiatedProfileId, !!profile); |
249 if (profile) { | 249 if (profile) { |
250 *profile = cpuProfile.release(); | 250 *profile = cpuProfile.release(); |
251 if (!profile->get() && errorString) | 251 if (!profile->get() && errorString) |
252 *errorString = "Profile is not found"; | 252 *errorString = "Profile is not found"; |
253 } | 253 } |
254 m_frontendInitiatedProfileId = String(); | 254 m_frontendInitiatedProfileId = String16(); |
255 m_state->setBoolean(ProfilerAgentState::userInitiatedProfiling, false); | 255 m_state->setBoolean(ProfilerAgentState::userInitiatedProfiling, false); |
256 } | 256 } |
257 | 257 |
258 String V8ProfilerAgentImpl::nextProfileId() | 258 String16 V8ProfilerAgentImpl::nextProfileId() |
259 { | 259 { |
260 return String::number(atomicIncrement(&s_lastProfileId)); | 260 return String16::number(atomicIncrement(&s_lastProfileId)); |
261 } | 261 } |
262 | 262 |
263 void V8ProfilerAgentImpl::startProfiling(const String& title) | 263 void V8ProfilerAgentImpl::startProfiling(const String16& title) |
264 { | 264 { |
265 v8::HandleScope handleScope(m_isolate); | 265 v8::HandleScope handleScope(m_isolate); |
266 m_isolate->GetCpuProfiler()->StartProfiling(toV8String(m_isolate, title), tr
ue); | 266 m_isolate->GetCpuProfiler()->StartProfiling(toV8String(m_isolate, title), tr
ue); |
267 } | 267 } |
268 | 268 |
269 PassOwnPtr<protocol::Profiler::CPUProfile> V8ProfilerAgentImpl::stopProfiling(co
nst String& title, bool serialize) | 269 PassOwnPtr<protocol::Profiler::CPUProfile> V8ProfilerAgentImpl::stopProfiling(co
nst String16& title, bool serialize) |
270 { | 270 { |
271 v8::HandleScope handleScope(m_isolate); | 271 v8::HandleScope handleScope(m_isolate); |
272 v8::CpuProfile* profile = m_isolate->GetCpuProfiler()->StopProfiling(toV8Str
ing(m_isolate, title)); | 272 v8::CpuProfile* profile = m_isolate->GetCpuProfiler()->StopProfiling(toV8Str
ing(m_isolate, title)); |
273 if (!profile) | 273 if (!profile) |
274 return nullptr; | 274 return nullptr; |
275 OwnPtr<protocol::Profiler::CPUProfile> result; | 275 OwnPtr<protocol::Profiler::CPUProfile> result; |
276 if (serialize) | 276 if (serialize) |
277 result = createCPUProfile(m_isolate, profile); | 277 result = createCPUProfile(m_isolate, profile); |
278 profile->Delete(); | 278 profile->Delete(); |
279 return result.release(); | 279 return result.release(); |
(...skipping 12 matching lines...) Expand all Loading... |
292 } | 292 } |
293 | 293 |
294 void V8ProfilerAgentImpl::idleStarted() | 294 void V8ProfilerAgentImpl::idleStarted() |
295 { | 295 { |
296 if (!isRecording()) | 296 if (!isRecording()) |
297 return; | 297 return; |
298 m_isolate->GetCpuProfiler()->SetIdle(true); | 298 m_isolate->GetCpuProfiler()->SetIdle(true); |
299 } | 299 } |
300 | 300 |
301 } // namespace blink | 301 } // namespace blink |
OLD | NEW |