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

Unified Diff: trunk/src/content/browser/devtools/devtools_tracing_handler.cc

Issue 89753004: Revert 237280 "Remove TraceController" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 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: trunk/src/content/browser/devtools/devtools_tracing_handler.cc
===================================================================
--- trunk/src/content/browser/devtools/devtools_tracing_handler.cc (revision 237451)
+++ trunk/src/content/browser/devtools/devtools_tracing_handler.cc (working copy)
@@ -6,18 +6,14 @@
#include "base/bind.h"
#include "base/callback.h"
-#include "base/file_util.h"
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
#include "base/location.h"
-#include "base/memory/ref_counted_memory.h"
#include "base/strings/string_split.h"
#include "base/strings/stringprintf.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"
+#include "content/public/browser/trace_controller.h"
+#include "content/public/browser/trace_subscriber.h"
namespace content {
@@ -27,23 +23,10 @@
const char kRecordContinuously[] = "record-continuously";
const char kEnableSampling[] = "enable-sampling";
-void ReadFile(
- const base::FilePath& path,
- const base::Callback<void(const scoped_refptr<base::RefCountedString>&)>
- callback) {
- std::string trace_data;
- if (!base::ReadFileToString(path, &trace_data))
- LOG(ERROR) << "Failed to read file: " << path.value();
- base::DeleteFile(path, false);
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
- base::Bind(callback, make_scoped_refptr(
- base::RefCountedString::TakeString(&trace_data))));
-}
-
} // namespace
DevToolsTracingHandler::DevToolsTracingHandler()
- : weak_factory_(this) {
+ : is_running_(false) {
RegisterCommandHandler(devtools::Tracing::start::kName,
base::Bind(&DevToolsTracingHandler::OnStart,
base::Unretained(this)));
@@ -55,60 +38,28 @@
DevToolsTracingHandler::~DevToolsTracingHandler() {
}
-void DevToolsTracingHandler::BeginReadingRecordingResult(
- const base::FilePath& path) {
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&ReadFile, path,
- base::Bind(&DevToolsTracingHandler::ReadRecordingResult,
- weak_factory_.GetWeakPtr())));
-}
-
-void DevToolsTracingHandler::ReadRecordingResult(
- const scoped_refptr<base::RefCountedString>& trace_data) {
- if (trace_data->data().size()) {
- scoped_ptr<base::Value> trace_value(base::JSONReader::Read(
- trace_data->data()));
- DictionaryValue* dictionary = NULL;
- bool ok = trace_value->GetAsDictionary(&dictionary);
- DCHECK(ok);
- ListValue* list = NULL;
- ok = dictionary->GetList("traceEvents", &list);
- DCHECK(ok);
- std::string buffer;
- for (size_t i = 0; i < list->GetSize(); ++i) {
- std::string item;
- base::Value* item_value;
- list->Get(i, &item_value);
- base::JSONWriter::Write(item_value, &item);
- if (buffer.size())
- buffer.append(",");
- buffer.append(item);
- if (i % 1000 == 0) {
- OnTraceDataCollected(buffer);
- buffer.clear();
- }
- }
- if (buffer.size())
- OnTraceDataCollected(buffer);
- }
-
+void DevToolsTracingHandler::OnEndTracingComplete() {
+ is_running_ = false;
SendNotification(devtools::Tracing::tracingComplete::kName, NULL);
}
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\": [ %s ] } }",
- devtools::Tracing::dataCollected::kName,
- devtools::Tracing::dataCollected::kValue,
- trace_fragment.c_str());
- SendRawMessage(message);
+ const scoped_refptr<base::RefCountedString>& trace_fragment) {
+ if (is_running_) {
+ // 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\": [ %s ] } }",
+ devtools::Tracing::dataCollected::kName,
+ devtools::Tracing::dataCollected::kValue,
+ trace_fragment->data().c_str());
+ SendRawMessage(message);
+ }
}
-TracingController::Options DevToolsTracingHandler::TraceOptionsFromString(
+// Note, if you add more options here you also need to update:
+// base/debug/trace_event_impl:TraceOptionsFromString
+base::debug::TraceLog::Options DevToolsTracingHandler::TraceOptionsFromString(
const std::string& options) {
std::vector<std::string> split;
std::vector<std::string>::iterator iter;
@@ -117,14 +68,18 @@
base::SplitString(options, ',', &split);
for (iter = split.begin(); iter != split.end(); ++iter) {
if (*iter == kRecordUntilFull) {
- ret &= ~TracingController::RECORD_CONTINUOUSLY;
+ ret |= base::debug::TraceLog::RECORD_UNTIL_FULL;
} else if (*iter == kRecordContinuously) {
- ret |= TracingController::RECORD_CONTINUOUSLY;
+ ret |= base::debug::TraceLog::RECORD_CONTINUOUSLY;
} else if (*iter == kEnableSampling) {
- ret |= TracingController::ENABLE_SAMPLING;
+ ret |= base::debug::TraceLog::ENABLE_SAMPLING;
}
}
- return static_cast<TracingController::Options>(ret);
+ if (!(ret & base::debug::TraceLog::RECORD_UNTIL_FULL) &&
+ !(ret & base::debug::TraceLog::RECORD_CONTINUOUSLY))
+ ret |= base::debug::TraceLog::RECORD_UNTIL_FULL;
+
+ return static_cast<base::debug::TraceLog::Options>(ret);
}
scoped_refptr<DevToolsProtocol::Response>
@@ -135,26 +90,23 @@
if (params)
params->GetString(devtools::Tracing::start::kCategories, &categories);
- TracingController::Options options = TracingController::DEFAULT_OPTIONS;
+ base::debug::TraceLog::Options options =
+ base::debug::TraceLog::RECORD_UNTIL_FULL;
if (params && params->HasKey(devtools::Tracing::start::kTraceOptions)) {
std::string options_param;
params->GetString(devtools::Tracing::start::kTraceOptions, &options_param);
options = TraceOptionsFromString(options_param);
}
- TracingController::GetInstance()->EnableRecording(
- categories, options,
- TracingController::EnableRecordingDoneCallback());
+ TraceController::GetInstance()->BeginTracing(this, categories, options);
+ is_running_ = true;
return command->SuccessResponse(NULL);
}
scoped_refptr<DevToolsProtocol::Response>
DevToolsTracingHandler::OnEnd(
scoped_refptr<DevToolsProtocol::Command> command) {
- TracingController::GetInstance()->DisableRecording(
- base::FilePath(),
- base::Bind(&DevToolsTracingHandler::BeginReadingRecordingResult,
- weak_factory_.GetWeakPtr()));
+ TraceController::GetInstance()->EndTracingAsync(this);
return command->SuccessResponse(NULL);
}

Powered by Google App Engine
This is Rietveld 408576698