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

Unified Diff: content/browser/devtools/protocol/tracing_handler.cc

Issue 2500093002: [DevTools] Move IO and Tracing to new generator. (Closed)
Patch Set: roll Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/devtools/protocol/tracing_handler.cc
diff --git a/content/browser/devtools/protocol/tracing_handler.cc b/content/browser/devtools/protocol/tracing_handler.cc
index 97c08edbe5e16cef729967f0aeb00e651ae8d44f..590ed9b83bcfd5b2422a51ceab56b7f332710cf9 100644
--- a/content/browser/devtools/protocol/tracing_handler.cc
+++ b/content/browser/devtools/protocol/tracing_handler.cc
@@ -22,10 +22,7 @@
#include "content/browser/tracing/tracing_controller_impl.h"
namespace content {
-namespace devtools {
-namespace tracing {
-
-using Response = DevToolsProtocolClient::Response;
+namespace protocol {
namespace {
@@ -131,13 +128,15 @@ TracingHandler::TracingHandler(TracingHandler::Target target,
TracingHandler::~TracingHandler() {
}
-void TracingHandler::SetClient(std::unique_ptr<Client> client) {
- client_.swap(client);
+void TracingHandler::Wire(UberDispatcher* dispatcher) {
+ frontend_.reset(new Tracing::Frontend(dispatcher->channel()));
+ Tracing::Dispatcher::wire(dispatcher, this);
}
-void TracingHandler::Detached() {
+Response TracingHandler::Disable() {
if (did_initiate_recording_)
StopTracing(scoped_refptr<TracingController::TraceDataSink>());
+ return Response::OK();
}
void TracingHandler::OnTraceDataCollected(const std::string& trace_fragment) {
@@ -149,74 +148,81 @@ void TracingHandler::OnTraceDataCollected(const std::string& trace_fragment) {
message.reserve(message.size() + trace_fragment.size() + messageSuffixSize);
message += trace_fragment;
message += "] } }";
- client_->SendRawNotification(message);
+ frontend_->sendRawNotification(message);
}
void TracingHandler::OnTraceComplete() {
- client_->TracingComplete(TracingCompleteParams::Create());
+ frontend_->TracingComplete();
}
void TracingHandler::OnTraceToStreamComplete(const std::string& stream_handle) {
- client_->TracingComplete(
- TracingCompleteParams::Create()->set_stream(stream_handle));
+ frontend_->TracingComplete(stream_handle);
}
-Response TracingHandler::Start(
- DevToolsCommandId command_id,
- const std::string* categories,
- const std::string* options,
- const double* buffer_usage_reporting_interval,
- const std::string* transfer_mode,
- const std::unique_ptr<base::DictionaryValue>& config) {
+void TracingHandler::Start(Maybe<std::string> categories,
+ Maybe<std::string> options,
+ Maybe<double> buffer_usage_reporting_interval,
+ Maybe<std::string> transfer_mode,
+ Maybe<Tracing::TraceConfig> config,
+ std::unique_ptr<StartCallback> callback) {
+ bool return_as_stream = transfer_mode.fromMaybe("") ==
+ Tracing::Start::TransferModeEnum::ReturnAsStream;
if (IsTracing()) {
if (!did_initiate_recording_ && IsStartupTracingActive()) {
// If tracing is already running because it was initiated by startup
// tracing, honor the transfer mode update, as that's the only way
// for the client to communicate it.
- return_as_stream_ =
- transfer_mode && *transfer_mode == start::kTransferModeReturnAsStream;
+ return_as_stream_ = return_as_stream;
}
- return Response::InternalError("Tracing is already started");
+ callback->sendFailure(Response::Error("Tracing is already started"));
+ return;
}
- if (config && (categories || options)) {
- return Response::InternalError(
+ if (config.isJust() && (categories.isJust() || options.isJust())) {
+ callback->sendFailure(Response::InvalidParams(
"Either trace config (preferred), or categories+options should be "
- "specified, but not both.");
+ "specified, but not both."));
+ return;
}
did_initiate_recording_ = true;
- return_as_stream_ =
- transfer_mode && *transfer_mode == start::kTransferModeReturnAsStream;
- if (buffer_usage_reporting_interval)
- SetupTimer(*buffer_usage_reporting_interval);
+ return_as_stream_ = return_as_stream;
+ if (buffer_usage_reporting_interval.isJust())
+ SetupTimer(buffer_usage_reporting_interval.fromJust());
base::trace_event::TraceConfig trace_config;
- if (config) {
- trace_config = GetTraceConfigFromDevToolsConfig(*config);
- } else if (categories || options) {
+ if (config.isJust()) {
+ std::unique_ptr<base::Value> value =
+ protocol::toBaseValue(config.fromJust()->serialize().get(), 1000);
+ if (value && value->IsType(base::Value::TYPE_DICTIONARY)) {
+ trace_config = GetTraceConfigFromDevToolsConfig(
+ *static_cast<base::DictionaryValue*>(value.get()));
+ }
+ } else if (categories.isJust() || options.isJust()) {
trace_config = base::trace_event::TraceConfig(
- categories ? *categories : std::string(),
- options ? *options : std::string());
+ categories.fromMaybe(""), options.fromMaybe(""));
}
// If inspected target is a render process Tracing.start will be handled by
// tracing agent in the renderer.
+ if (target_ == Renderer)
+ callback->fallThrough();
+
TracingController::GetInstance()->StartTracing(
trace_config,
base::Bind(&TracingHandler::OnRecordingEnabled,
weak_factory_.GetWeakPtr(),
- command_id));
-
- return target_ == Renderer ? Response::FallThrough() : Response::OK();
+ base::Passed(std::move(callback))));
}
-Response TracingHandler::End(DevToolsCommandId command_id) {
+void TracingHandler::End(std::unique_ptr<EndCallback> callback) {
// Startup tracing triggered by --trace-config-file is a special case, where
// tracing is started automatically upon browser startup and can be stopped
// via DevTools.
- if (!did_initiate_recording_ && !IsStartupTracingActive())
- return Response::InternalError("Tracing is not started");
+ if (!did_initiate_recording_ && !IsStartupTracingActive()) {
+ callback->sendFailure(Response::Error("Tracing is not started"));
+ return;
+ }
scoped_refptr<TracingController::TraceDataSink> sink;
if (return_as_stream_) {
@@ -228,70 +234,71 @@ Response TracingHandler::End(DevToolsCommandId command_id) {
StopTracing(sink);
// If inspected target is a render process Tracing.end will be handled by
// tracing agent in the renderer.
- return target_ == Renderer ? Response::FallThrough() : Response::OK();
+ if (target_ == Renderer)
+ callback->fallThrough();
+ else
+ callback->sendSuccess();
}
-Response TracingHandler::GetCategories(DevToolsCommandId command_id) {
+void TracingHandler::GetCategories(
+ std::unique_ptr<GetCategoriesCallback> callback) {
TracingController::GetInstance()->GetCategories(
base::Bind(&TracingHandler::OnCategoriesReceived,
weak_factory_.GetWeakPtr(),
- command_id));
- return Response::OK();
+ base::Passed(std::move(callback))));
}
-void TracingHandler::OnRecordingEnabled(DevToolsCommandId command_id) {
+void TracingHandler::OnRecordingEnabled(
+ std::unique_ptr<StartCallback> callback) {
TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"),
"TracingStartedInBrowser", TRACE_EVENT_SCOPE_THREAD,
"frameTreeNodeId", frame_tree_node_id_);
if (target_ != Renderer)
- client_->SendStartResponse(command_id, StartResponse::Create());
+ callback->sendSuccess();
}
void TracingHandler::OnBufferUsage(float percent_full,
size_t approximate_event_count) {
// TODO(crbug426117): remove set_value once all clients have switched to
// the new interface of the event.
- client_->BufferUsage(BufferUsageParams::Create()
- ->set_value(percent_full)
- ->set_percent_full(percent_full)
- ->set_event_count(approximate_event_count));
+ frontend_->BufferUsage(percent_full, percent_full, approximate_event_count);
}
void TracingHandler::OnCategoriesReceived(
- DevToolsCommandId command_id,
+ std::unique_ptr<GetCategoriesCallback> callback,
const std::set<std::string>& category_set) {
- std::vector<std::string> categories;
+ std::unique_ptr<protocol::Array<std::string>> categories =
+ protocol::Array<std::string>::create();
for (const std::string& category : category_set)
- categories.push_back(category);
- client_->SendGetCategoriesResponse(command_id,
- GetCategoriesResponse::Create()->set_categories(categories));
+ categories->addItem(category);
+ callback->sendSuccess(std::move(categories));
}
-Response TracingHandler::RequestMemoryDump(DevToolsCommandId command_id) {
- if (!IsTracing())
- return Response::InternalError("Tracing is not started");
+void TracingHandler::RequestMemoryDump(
+ std::unique_ptr<RequestMemoryDumpCallback> callback) {
+ if (!IsTracing()) {
+ callback->sendFailure(Response::Error("Tracing is not started"));
+ return;
+ }
base::trace_event::MemoryDumpManager::GetInstance()->RequestGlobalDump(
base::trace_event::MemoryDumpType::EXPLICITLY_TRIGGERED,
base::trace_event::MemoryDumpLevelOfDetail::DETAILED,
base::Bind(&TracingHandler::OnMemoryDumpFinished,
- weak_factory_.GetWeakPtr(), command_id));
- return Response::OK();
+ weak_factory_.GetWeakPtr(),
+ base::Passed(std::move(callback))));
}
-void TracingHandler::OnMemoryDumpFinished(DevToolsCommandId command_id,
- uint64_t dump_guid,
- bool success) {
- client_->SendRequestMemoryDumpResponse(
- command_id,
- RequestMemoryDumpResponse::Create()
- ->set_dump_guid(base::StringPrintf("0x%" PRIx64, dump_guid))
- ->set_success(success));
+void TracingHandler::OnMemoryDumpFinished(
+ std::unique_ptr<RequestMemoryDumpCallback> callback,
+ uint64_t dump_guid,
+ bool success) {
+ callback->sendSuccess(base::StringPrintf("0x%" PRIx64, dump_guid), success);
}
Response TracingHandler::RecordClockSyncMarker(const std::string& sync_id) {
if (!IsTracing())
- return Response::InternalError("Tracing is not started");
+ return Response::Error("Tracing is not started");
TracingControllerImpl::GetInstance()->RecordClockSyncMarker(
sync_id,
@@ -350,5 +357,4 @@ base::trace_event::TraceConfig TracingHandler::GetTraceConfigFromDevToolsConfig(
}
} // namespace tracing
-} // namespace devtools
-} // namespace content
+} // namespace protocol
« no previous file with comments | « content/browser/devtools/protocol/tracing_handler.h ('k') | content/browser/devtools/protocol/tracing_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698