Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: content/browser/devtools/devtools_tracing_handler.cc

Issue 99543002: Make it possible to configure synthetic delays through Devtools (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/strings/string_split.h" 10 #include "base/strings/string_split.h"
11 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "content/browser/devtools/devtools_http_handler_impl.h" 13 #include "content/browser/devtools/devtools_http_handler_impl.h"
14 #include "content/browser/devtools/devtools_protocol_constants.h" 14 #include "content/browser/devtools/devtools_protocol_constants.h"
15 #include "content/public/browser/trace_controller.h" 15 #include "content/public/browser/trace_controller.h"
16 #include "content/public/browser/trace_subscriber.h" 16 #include "content/public/browser/trace_subscriber.h"
17 #include "content/public/browser/tracing_controller.h"
18 #include "content/public/browser/tracing_synthetic_delay_configuration.h"
17 19
18 namespace content { 20 namespace content {
19 21
20 namespace { 22 namespace {
21 23
22 const char kRecordUntilFull[] = "record-until-full"; 24 const char kRecordUntilFull[] = "record-until-full";
23 const char kRecordContinuously[] = "record-continuously"; 25 const char kRecordContinuously[] = "record-continuously";
24 const char kEnableSampling[] = "enable-sampling"; 26 const char kEnableSampling[] = "enable-sampling";
25 27
26 } // namespace 28 } // namespace
27 29
28 DevToolsTracingHandler::DevToolsTracingHandler() 30 DevToolsTracingHandler::DevToolsTracingHandler()
29 : is_running_(false) { 31 : is_running_(false) {
30 RegisterCommandHandler(devtools::Tracing::start::kName, 32 RegisterCommandHandler(devtools::Tracing::start::kName,
31 base::Bind(&DevToolsTracingHandler::OnStart, 33 base::Bind(&DevToolsTracingHandler::OnStart,
32 base::Unretained(this))); 34 base::Unretained(this)));
33 RegisterCommandHandler(devtools::Tracing::end::kName, 35 RegisterCommandHandler(devtools::Tracing::end::kName,
34 base::Bind(&DevToolsTracingHandler::OnEnd, 36 base::Bind(&DevToolsTracingHandler::OnEnd,
35 base::Unretained(this))); 37 base::Unretained(this)));
38 RegisterCommandHandler(devtools::Tracing::configureSyntheticDelays::kName,
39 base::Bind(&DevToolsTracingHandler::
40 OnConfigureSyntheticDelays,
41 base::Unretained(this)));
36 } 42 }
37 43
38 DevToolsTracingHandler::~DevToolsTracingHandler() { 44 DevToolsTracingHandler::~DevToolsTracingHandler() {
39 } 45 }
40 46
41 void DevToolsTracingHandler::OnEndTracingComplete() { 47 void DevToolsTracingHandler::OnEndTracingComplete() {
42 is_running_ = false; 48 is_running_ = false;
43 SendNotification(devtools::Tracing::tracingComplete::kName, NULL); 49 SendNotification(devtools::Tracing::tracingComplete::kName, NULL);
44 } 50 }
45 51
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 return command->SuccessResponse(NULL); 109 return command->SuccessResponse(NULL);
104 } 110 }
105 111
106 scoped_refptr<DevToolsProtocol::Response> 112 scoped_refptr<DevToolsProtocol::Response>
107 DevToolsTracingHandler::OnEnd( 113 DevToolsTracingHandler::OnEnd(
108 scoped_refptr<DevToolsProtocol::Command> command) { 114 scoped_refptr<DevToolsProtocol::Command> command) {
109 TraceController::GetInstance()->EndTracingAsync(this); 115 TraceController::GetInstance()->EndTracingAsync(this);
110 return command->SuccessResponse(NULL); 116 return command->SuccessResponse(NULL);
111 } 117 }
112 118
119 scoped_refptr<DevToolsProtocol::Response>
120 DevToolsTracingHandler::OnConfigureSyntheticDelays(
121 scoped_refptr<DevToolsProtocol::Command> command) {
122 std::string categories;
123 base::DictionaryValue* params = command->params();
124 const base::DictionaryValue* delay_settings;
125 if (params) {
126 params->GetDictionary(devtools::Tracing::configureSyntheticDelays::kDelays,
127 &delay_settings);
128 }
129
130 if (!delay_settings) {
131 return command->InvalidParamResponse(
132 devtools::Tracing::configureSyntheticDelays::kDelays);
133 }
134
135 std::vector<TracingSyntheticDelayConfiguration> delays;
136 base::DictionaryValue::Iterator it(*delay_settings);
137 while (!it.IsAtEnd()) {
138 TracingSyntheticDelayConfiguration delay;
139 const base::DictionaryValue* properties;
140 if (it.value().GetAsDictionary(&properties)) {
141 double target_duration;
142 if (properties->GetDouble("target_duration", &target_duration)) {
143 delay.target_duration = base::TimeDelta::FromMicroseconds(
144 target_duration * 1e6);
145 }
146 std::string mode;
147 if (properties->GetString("mode", &mode)) {
148 if (mode == "static") {
149 delay.mode = base::debug::TraceEventSyntheticDelay::STATIC;
150 } else if (mode == "oneshot") {
151 delay.mode = base::debug::TraceEventSyntheticDelay::ONE_SHOT;
152 } else if (mode == "alternating") {
153 delay.mode = base::debug::TraceEventSyntheticDelay::ALTERNATING;
154 } else {
155 return command->InvalidParamResponse(
156 devtools::Tracing::configureSyntheticDelays::kDelays);
157 }
158 }
159 }
160 delay.name = it.key();
161 delays.push_back(delay);
162 it.Advance();
163 }
164
165 TracingController::GetInstance()->ConfigureSyntheticDelays(
166 delays,
167 base::Bind(&DevToolsTracingHandler::OnConfigureSyntheticDelaysComplete,
168 base::Unretained(this)));
169 return command->SuccessResponse(NULL);
170 }
171
172 void DevToolsTracingHandler::OnConfigureSyntheticDelaysComplete() {
173 SendNotification(devtools::Tracing::configureSyntheticDelaysComplete::kName,
174 NULL);
175 }
176
113 } // namespace content 177 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/devtools_tracing_handler.h ('k') | tools/telemetry/telemetry/core/backends/browser_backend.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698