Index: content/browser/devtools/devtools_tracing_handler.cc |
diff --git a/content/browser/devtools/devtools_tracing_handler.cc b/content/browser/devtools/devtools_tracing_handler.cc |
deleted file mode 100644 |
index 5dce87424cb87eca5e33b7f39fdb8df075e2cddd..0000000000000000000000000000000000000000 |
--- a/content/browser/devtools/devtools_tracing_handler.cc |
+++ /dev/null |
@@ -1,241 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/browser/devtools/devtools_tracing_handler.h" |
- |
-#include <cmath> |
- |
-#include "base/bind.h" |
-#include "base/debug/trace_event_impl.h" |
-#include "base/strings/string_split.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/time/time.h" |
-#include "base/timer/timer.h" |
-#include "base/values.h" |
-#include "content/browser/devtools/devtools_http_handler_impl.h" |
-#include "content/browser/devtools/devtools_protocol_constants.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/tracing_controller.h" |
- |
-namespace content { |
- |
-namespace { |
- |
-const char kRecordUntilFull[] = "record-until-full"; |
-const char kRecordContinuously[] = "record-continuously"; |
-const char kRecordAsMuchAsPossible[] = "record-as-much-as-possible"; |
-const char kEnableSampling[] = "enable-sampling"; |
- |
-class DevToolsTraceSinkProxy : public TracingController::TraceDataSink { |
- public: |
- explicit DevToolsTraceSinkProxy(base::WeakPtr<DevToolsTracingHandler> handler) |
- : tracing_handler_(handler) {} |
- |
- virtual void AddTraceChunk(const std::string& chunk) override { |
- if (DevToolsTracingHandler* h = tracing_handler_.get()) |
- h->OnTraceDataCollected(chunk); |
- } |
- virtual void Close() override { |
- if (DevToolsTracingHandler* h = tracing_handler_.get()) |
- h->OnTraceComplete(); |
- } |
- |
- private: |
- virtual ~DevToolsTraceSinkProxy() {} |
- |
- base::WeakPtr<DevToolsTracingHandler> tracing_handler_; |
-}; |
- |
-} // namespace |
- |
-const char* DevToolsTracingHandler::kDefaultCategories = |
- "-*,disabled-by-default-devtools.timeline*"; |
-const double DevToolsTracingHandler::kDefaultReportingInterval = 1000.0; |
-const double DevToolsTracingHandler::kMinimumReportingInterval = 250.0; |
- |
-DevToolsTracingHandler::DevToolsTracingHandler( |
- DevToolsTracingHandler::Target target) |
- : target_(target), is_recording_(false), weak_factory_(this) { |
- RegisterCommandHandler(devtools::Tracing::start::kName, |
- base::Bind(&DevToolsTracingHandler::OnStart, |
- base::Unretained(this))); |
- RegisterCommandHandler(devtools::Tracing::end::kName, |
- base::Bind(&DevToolsTracingHandler::OnEnd, |
- base::Unretained(this))); |
- RegisterCommandHandler(devtools::Tracing::getCategories::kName, |
- base::Bind(&DevToolsTracingHandler::OnGetCategories, |
- base::Unretained(this))); |
-} |
- |
-DevToolsTracingHandler::~DevToolsTracingHandler() { |
-} |
- |
-void DevToolsTracingHandler::OnTraceDataCollected( |
- const std::string& trace_fragment) { |
- // Hand-craft protocol notification message so we can substitute JSON |
- // that we already got as string as a bare object, not a quoted string. |
- std::string message = |
- base::StringPrintf("{ \"method\": \"%s\", \"params\": { \"%s\": [", |
- devtools::Tracing::dataCollected::kName, |
- devtools::Tracing::dataCollected::kParamValue); |
- const size_t messageSuffixSize = 10; |
- message.reserve(message.size() + trace_fragment.size() + messageSuffixSize); |
- message += trace_fragment; |
- message += "] } }", SendRawMessage(message); |
-} |
- |
-void DevToolsTracingHandler::OnTraceComplete() { |
- SendNotification(devtools::Tracing::tracingComplete::kName, NULL); |
-} |
- |
-base::debug::TraceOptions DevToolsTracingHandler::TraceOptionsFromString( |
- const std::string& options) { |
- std::vector<std::string> split; |
- std::vector<std::string>::iterator iter; |
- base::debug::TraceOptions ret; |
- |
- base::SplitString(options, ',', &split); |
- for (iter = split.begin(); iter != split.end(); ++iter) { |
- if (*iter == kRecordUntilFull) { |
- ret.record_mode = base::debug::RECORD_UNTIL_FULL; |
- } else if (*iter == kRecordContinuously) { |
- ret.record_mode = base::debug::RECORD_CONTINUOUSLY; |
- } else if (*iter == kRecordAsMuchAsPossible) { |
- ret.record_mode = base::debug::RECORD_AS_MUCH_AS_POSSIBLE; |
- } else if (*iter == kEnableSampling) { |
- ret.enable_sampling = true; |
- } |
- } |
- return ret; |
-} |
- |
-scoped_refptr<DevToolsProtocol::Response> |
-DevToolsTracingHandler::OnStart( |
- scoped_refptr<DevToolsProtocol::Command> command) { |
- if (is_recording_) { |
- return command->InternalErrorResponse("Tracing is already started"); |
- } |
- is_recording_ = true; |
- |
- std::string categories; |
- base::debug::TraceOptions options; |
- double usage_reporting_interval = 0.0; |
- |
- base::DictionaryValue* params = command->params(); |
- if (params) { |
- params->GetString(devtools::Tracing::start::kParamCategories, &categories); |
- std::string options_param; |
- if (params->GetString(devtools::Tracing::start::kParamOptions, |
- &options_param)) { |
- options = TraceOptionsFromString(options_param); |
- } |
- params->GetDouble( |
- devtools::Tracing::start::kParamBufferUsageReportingInterval, |
- &usage_reporting_interval); |
- } |
- |
- SetupTimer(usage_reporting_interval); |
- |
- // If inspected target is a render process Tracing.start will be handled by |
- // tracing agent in the renderer. |
- if (target_ == Renderer) { |
- TracingController::GetInstance()->EnableRecording( |
- base::debug::CategoryFilter(categories), |
- options, |
- TracingController::EnableRecordingDoneCallback()); |
- return NULL; |
- } |
- |
- TracingController::GetInstance()->EnableRecording( |
- base::debug::CategoryFilter(categories), |
- options, |
- base::Bind(&DevToolsTracingHandler::OnRecordingEnabled, |
- weak_factory_.GetWeakPtr(), |
- command)); |
- return command->AsyncResponsePromise(); |
-} |
- |
-void DevToolsTracingHandler::SetupTimer(double usage_reporting_interval) { |
- if (usage_reporting_interval == 0) return; |
- |
- if (usage_reporting_interval < kMinimumReportingInterval) |
- usage_reporting_interval = kMinimumReportingInterval; |
- |
- base::TimeDelta interval = base::TimeDelta::FromMilliseconds( |
- std::ceil(usage_reporting_interval)); |
- buffer_usage_poll_timer_.reset(new base::Timer( |
- FROM_HERE, |
- interval, |
- base::Bind( |
- base::IgnoreResult(&TracingController::GetTraceBufferPercentFull), |
- base::Unretained(TracingController::GetInstance()), |
- base::Bind(&DevToolsTracingHandler::OnBufferUsage, |
- weak_factory_.GetWeakPtr())), |
- true)); |
- buffer_usage_poll_timer_->Reset(); |
-} |
- |
-void DevToolsTracingHandler::OnRecordingEnabled( |
- scoped_refptr<DevToolsProtocol::Command> command) { |
- SendAsyncResponse(command->SuccessResponse(NULL)); |
-} |
- |
-void DevToolsTracingHandler::OnBufferUsage(float usage) { |
- base::DictionaryValue* params = new base::DictionaryValue(); |
- params->SetDouble(devtools::Tracing::bufferUsage::kParamValue, usage); |
- SendNotification(devtools::Tracing::bufferUsage::kName, params); |
-} |
- |
-scoped_refptr<DevToolsProtocol::Response> |
-DevToolsTracingHandler::OnEnd( |
- scoped_refptr<DevToolsProtocol::Command> command) { |
- if (!is_recording_) { |
- return command->InternalErrorResponse("Tracing is not started"); |
- } |
- DisableRecording(false); |
- // If inspected target is a render process Tracing.end will be handled by |
- // tracing agent in the renderer. |
- if (target_ == Renderer) |
- return NULL; |
- return command->SuccessResponse(NULL); |
-} |
- |
-void DevToolsTracingHandler::DisableRecording(bool abort) { |
- is_recording_ = false; |
- buffer_usage_poll_timer_.reset(); |
- TracingController::GetInstance()->DisableRecording( |
- abort ? NULL : new DevToolsTraceSinkProxy(weak_factory_.GetWeakPtr())); |
-} |
- |
-void DevToolsTracingHandler::OnClientDetached() { |
- if (is_recording_) |
- DisableRecording(true); |
-} |
- |
-scoped_refptr<DevToolsProtocol::Response> |
-DevToolsTracingHandler::OnGetCategories( |
- scoped_refptr<DevToolsProtocol::Command> command) { |
- TracingController::GetInstance()->GetCategories( |
- base::Bind(&DevToolsTracingHandler::OnCategoriesReceived, |
- weak_factory_.GetWeakPtr(), |
- command)); |
- return command->AsyncResponsePromise(); |
-} |
- |
-void DevToolsTracingHandler::OnCategoriesReceived( |
- scoped_refptr<DevToolsProtocol::Command> command, |
- const std::set<std::string>& category_set) { |
- base::DictionaryValue* response = new base::DictionaryValue; |
- base::ListValue* category_list = new base::ListValue; |
- for (std::set<std::string>::const_iterator it = category_set.begin(); |
- it != category_set.end(); ++it) { |
- category_list->AppendString(*it); |
- } |
- |
- response->Set(devtools::Tracing::getCategories::kResponseCategories, |
- category_list); |
- SendAsyncResponse(command->SuccessResponse(response)); |
-} |
- |
-} // namespace content |