OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/devtools/devtools_tracing_handler.h" | 5 #include "content/browser/devtools/devtools_tracing_handler.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 : weak_factory_(this), target_(target), is_recording_(false) { | 58 : weak_factory_(this), target_(target), is_recording_(false) { |
59 RegisterCommandHandler(devtools::Tracing::start::kName, | 59 RegisterCommandHandler(devtools::Tracing::start::kName, |
60 base::Bind(&DevToolsTracingHandler::OnStart, | 60 base::Bind(&DevToolsTracingHandler::OnStart, |
61 base::Unretained(this))); | 61 base::Unretained(this))); |
62 RegisterCommandHandler(devtools::Tracing::end::kName, | 62 RegisterCommandHandler(devtools::Tracing::end::kName, |
63 base::Bind(&DevToolsTracingHandler::OnEnd, | 63 base::Bind(&DevToolsTracingHandler::OnEnd, |
64 base::Unretained(this))); | 64 base::Unretained(this))); |
65 RegisterCommandHandler(devtools::Tracing::getCategories::kName, | 65 RegisterCommandHandler(devtools::Tracing::getCategories::kName, |
66 base::Bind(&DevToolsTracingHandler::OnGetCategories, | 66 base::Bind(&DevToolsTracingHandler::OnGetCategories, |
67 base::Unretained(this))); | 67 base::Unretained(this))); |
68 RegisterNotificationHandler(devtools::Tracing::started::kName, | |
69 base::Bind(&DevToolsTracingHandler::OnTracingStarted, | |
70 base::Unretained(this))); | |
71 RegisterNotificationHandler(devtools::Tracing::stopped::kName, | |
72 base::Bind(&DevToolsTracingHandler::OnTracingStopped, | |
73 base::Unretained(this))); | |
74 } | 68 } |
75 | 69 |
76 DevToolsTracingHandler::~DevToolsTracingHandler() { | 70 DevToolsTracingHandler::~DevToolsTracingHandler() { |
77 } | 71 } |
78 | 72 |
79 void DevToolsTracingHandler::BeginReadingRecordingResult( | 73 void DevToolsTracingHandler::BeginReadingRecordingResult( |
80 const base::FilePath& path) { | 74 const base::FilePath& path) { |
81 BrowserThread::PostTask( | 75 BrowserThread::PostTask( |
82 BrowserThread::FILE, FROM_HERE, | 76 BrowserThread::FILE, FROM_HERE, |
83 base::Bind(&ReadFile, path, | 77 base::Bind(&ReadFile, path, |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 } else if (*iter == kEnableSampling) { | 141 } else if (*iter == kEnableSampling) { |
148 ret.enable_sampling = true; | 142 ret.enable_sampling = true; |
149 } | 143 } |
150 } | 144 } |
151 return ret; | 145 return ret; |
152 } | 146 } |
153 | 147 |
154 scoped_refptr<DevToolsProtocol::Response> | 148 scoped_refptr<DevToolsProtocol::Response> |
155 DevToolsTracingHandler::OnStart( | 149 DevToolsTracingHandler::OnStart( |
156 scoped_refptr<DevToolsProtocol::Command> command) { | 150 scoped_refptr<DevToolsProtocol::Command> command) { |
| 151 // If inspected target is a render process Tracing.start will be handled by |
| 152 // tracing agent in the renderer. |
| 153 if (target_ == Renderer) |
| 154 return NULL; |
| 155 |
157 is_recording_ = true; | 156 is_recording_ = true; |
158 | 157 |
159 std::string categories; | 158 std::string categories; |
160 base::debug::TraceOptions options; | 159 base::debug::TraceOptions options; |
161 double usage_reporting_interval = 0.0; | 160 double usage_reporting_interval = 0.0; |
162 | 161 |
163 base::DictionaryValue* params = command->params(); | 162 base::DictionaryValue* params = command->params(); |
164 if (params) { | 163 if (params) { |
165 params->GetString(devtools::Tracing::start::kParamCategories, &categories); | 164 params->GetString(devtools::Tracing::start::kParamCategories, &categories); |
166 std::string options_param; | 165 std::string options_param; |
167 if (params->GetString(devtools::Tracing::start::kParamOptions, | 166 if (params->GetString(devtools::Tracing::start::kParamOptions, |
168 &options_param)) { | 167 &options_param)) { |
169 options = TraceOptionsFromString(options_param); | 168 options = TraceOptionsFromString(options_param); |
170 } | 169 } |
171 params->GetDouble( | 170 params->GetDouble( |
172 devtools::Tracing::start::kParamBufferUsageReportingInterval, | 171 devtools::Tracing::start::kParamBufferUsageReportingInterval, |
173 &usage_reporting_interval); | 172 &usage_reporting_interval); |
174 } | 173 } |
175 | 174 |
176 SetupTimer(usage_reporting_interval); | 175 SetupTimer(usage_reporting_interval); |
177 | 176 |
178 // If inspected target is a render process Tracing.start will be handled by | |
179 // tracing agent in the renderer. | |
180 if (target_ == Renderer) { | |
181 TracingController::GetInstance()->EnableRecording( | |
182 base::debug::CategoryFilter(categories), | |
183 options, | |
184 TracingController::EnableRecordingDoneCallback()); | |
185 return NULL; | |
186 } | |
187 | |
188 TracingController::GetInstance()->EnableRecording( | 177 TracingController::GetInstance()->EnableRecording( |
189 base::debug::CategoryFilter(categories), | 178 base::debug::CategoryFilter(categories), |
190 options, | 179 options, |
191 base::Bind(&DevToolsTracingHandler::OnRecordingEnabled, | 180 base::Bind(&DevToolsTracingHandler::OnRecordingEnabled, |
192 weak_factory_.GetWeakPtr(), | 181 weak_factory_.GetWeakPtr(), |
193 command)); | 182 command)); |
194 return command->AsyncResponsePromise(); | 183 return command->AsyncResponsePromise(); |
195 } | 184 } |
196 | 185 |
197 void DevToolsTracingHandler::SetupTimer(double usage_reporting_interval) { | 186 void DevToolsTracingHandler::SetupTimer(double usage_reporting_interval) { |
(...skipping 23 matching lines...) Expand all Loading... |
221 | 210 |
222 void DevToolsTracingHandler::OnBufferUsage(float usage) { | 211 void DevToolsTracingHandler::OnBufferUsage(float usage) { |
223 base::DictionaryValue* params = new base::DictionaryValue(); | 212 base::DictionaryValue* params = new base::DictionaryValue(); |
224 params->SetDouble(devtools::Tracing::bufferUsage::kParamValue, usage); | 213 params->SetDouble(devtools::Tracing::bufferUsage::kParamValue, usage); |
225 SendNotification(devtools::Tracing::bufferUsage::kName, params); | 214 SendNotification(devtools::Tracing::bufferUsage::kName, params); |
226 } | 215 } |
227 | 216 |
228 scoped_refptr<DevToolsProtocol::Response> | 217 scoped_refptr<DevToolsProtocol::Response> |
229 DevToolsTracingHandler::OnEnd( | 218 DevToolsTracingHandler::OnEnd( |
230 scoped_refptr<DevToolsProtocol::Command> command) { | 219 scoped_refptr<DevToolsProtocol::Command> command) { |
| 220 // If inspected target is a render process Tracing.end will be handled by |
| 221 // tracing agent in the renderer. |
| 222 if (target_ == Renderer) |
| 223 return NULL; |
231 DisableRecording( | 224 DisableRecording( |
232 base::Bind(&DevToolsTracingHandler::BeginReadingRecordingResult, | 225 base::Bind(&DevToolsTracingHandler::BeginReadingRecordingResult, |
233 weak_factory_.GetWeakPtr())); | 226 weak_factory_.GetWeakPtr())); |
234 return command->SuccessResponse(NULL); | 227 return command->SuccessResponse(NULL); |
235 } | 228 } |
236 | 229 |
237 void DevToolsTracingHandler::DisableRecording( | 230 void DevToolsTracingHandler::DisableRecording( |
238 const TracingController::TracingFileResultCallback& callback) { | 231 const TracingController::TracingFileResultCallback& callback) { |
239 is_recording_ = false; | 232 is_recording_ = false; |
240 buffer_usage_poll_timer_.reset(); | 233 buffer_usage_poll_timer_.reset(); |
(...skipping 24 matching lines...) Expand all Loading... |
265 for (std::set<std::string>::const_iterator it = category_set.begin(); | 258 for (std::set<std::string>::const_iterator it = category_set.begin(); |
266 it != category_set.end(); ++it) { | 259 it != category_set.end(); ++it) { |
267 category_list->AppendString(*it); | 260 category_list->AppendString(*it); |
268 } | 261 } |
269 | 262 |
270 response->Set(devtools::Tracing::getCategories::kResponseCategories, | 263 response->Set(devtools::Tracing::getCategories::kResponseCategories, |
271 category_list); | 264 category_list); |
272 SendAsyncResponse(command->SuccessResponse(response)); | 265 SendAsyncResponse(command->SuccessResponse(response)); |
273 } | 266 } |
274 | 267 |
275 void DevToolsTracingHandler::OnTracingStarted( | 268 void DevToolsTracingHandler::EnableTracing(const std::string& category_filter) { |
276 scoped_refptr<DevToolsProtocol::Notification> notification) { | |
277 if (is_recording_) | 269 if (is_recording_) |
278 return; | 270 return; |
279 is_recording_ = true; | 271 is_recording_ = true; |
280 | 272 |
281 SetupTimer(kDefaultReportingInterval); | 273 SetupTimer(kDefaultReportingInterval); |
282 | 274 |
283 TracingController::GetInstance()->EnableRecording( | 275 TracingController::GetInstance()->EnableRecording( |
284 base::debug::CategoryFilter(kDefaultCategories), | 276 base::debug::CategoryFilter(category_filter), |
285 base::debug::TraceOptions(), | 277 base::debug::TraceOptions(), |
286 TracingController::EnableRecordingDoneCallback()); | 278 TracingController::EnableRecordingDoneCallback()); |
| 279 SendNotification(devtools::Tracing::started::kName, NULL); |
287 } | 280 } |
288 | 281 |
289 void DevToolsTracingHandler::OnTracingStopped( | 282 void DevToolsTracingHandler::DisableTracing() { |
290 scoped_refptr<DevToolsProtocol::Notification> notification) { | |
291 if (!is_recording_) | 283 if (!is_recording_) |
292 return; | 284 return; |
293 is_recording_ = false; | 285 is_recording_ = false; |
294 DisableRecording( | 286 DisableRecording( |
295 base::Bind(&DevToolsTracingHandler::BeginReadingRecordingResult, | 287 base::Bind(&DevToolsTracingHandler::BeginReadingRecordingResult, |
296 weak_factory_.GetWeakPtr())); | 288 weak_factory_.GetWeakPtr())); |
297 } | 289 } |
298 | 290 |
299 | 291 |
300 } // namespace content | 292 } // namespace content |
OLD | NEW |