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 "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 Loading... |
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 |
OLD | NEW |