| Index: content/browser/tracing/tracing_controller_impl_data_sinks.cc
|
| diff --git a/content/browser/tracing/tracing_controller_impl_data_sinks.cc b/content/browser/tracing/tracing_controller_impl_data_sinks.cc
|
| index 1f717745c9ef31b062065ca249ef827f952c67a2..e5215ce6d1650d81078496aec12330052b8b9c90 100644
|
| --- a/content/browser/tracing/tracing_controller_impl_data_sinks.cc
|
| +++ b/content/browser/tracing/tracing_controller_impl_data_sinks.cc
|
| @@ -14,6 +14,9 @@ namespace content {
|
|
|
| namespace {
|
|
|
| +const char kChromeTraceLabel[] = "traceEvents";
|
| +const char kMetadataTraceLabel[] = "metadata";
|
| +
|
| class StringTraceDataEndpoint : public TracingController::TraceDataEndpoint {
|
| public:
|
| typedef base::Callback<void(scoped_ptr<const base::DictionaryValue>,
|
| @@ -118,7 +121,7 @@ class StringTraceDataSink : public TracingController::TraceDataSink {
|
| void AddTraceChunk(const std::string& chunk) override {
|
| std::string trace_string;
|
| if (trace_.empty())
|
| - trace_string = "{\"traceEvents\":[";
|
| + trace_string = "{\"" + std::string(kChromeTraceLabel) + "\":[";
|
| else
|
| trace_string = ",";
|
| trace_string += chunk;
|
| @@ -132,24 +135,17 @@ class StringTraceDataSink : public TracingController::TraceDataSink {
|
| endpoint_->ReceiveTraceChunk(chunk);
|
| }
|
|
|
| - void SetSystemTrace(const std::string& data) override {
|
| - system_trace_ = data;
|
| - }
|
| -
|
| - void SetPowerTrace(const std::string& data) override { power_trace_ = data; }
|
| -
|
| void Close() override {
|
| AddTraceChunkAndPassToEndpoint("]");
|
| - if (!system_trace_.empty())
|
| - AddTraceChunkAndPassToEndpoint(",\"systemTraceEvents\": " +
|
| - system_trace_);
|
| +
|
| + for (auto const &it : GetAgentTrace())
|
| + AddTraceChunkAndPassToEndpoint(",\"" + it.first + "\": " + it.second);
|
| +
|
| std::string metadataJSON;
|
| if (base::JSONWriter::Write(*GetMetadataCopy(), &metadataJSON) &&
|
| - !metadataJSON.empty())
|
| - AddTraceChunkAndPassToEndpoint(",\"metadata\": " + metadataJSON);
|
| - if (!power_trace_.empty()) {
|
| - AddTraceChunkAndPassToEndpoint(",\"powerTraceAsString\": " +
|
| - power_trace_);
|
| + !metadataJSON.empty()) {
|
| + AddTraceChunkAndPassToEndpoint(
|
| + ",\"" + std::string(kMetadataTraceLabel) + "\": " + metadataJSON);
|
| }
|
|
|
| AddTraceChunkAndPassToEndpoint("}");
|
| @@ -162,8 +158,6 @@ class StringTraceDataSink : public TracingController::TraceDataSink {
|
|
|
| scoped_refptr<TracingController::TraceDataEndpoint> endpoint_;
|
| std::string trace_;
|
| - std::string system_trace_;
|
| - std::string power_trace_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(StringTraceDataSink);
|
| };
|
| @@ -184,12 +178,6 @@ class CompressedStringTraceDataSink : public TracingController::TraceDataSink {
|
| this, chunk_ptr));
|
| }
|
|
|
| - void SetSystemTrace(const std::string& data) override {
|
| - system_trace_ = data;
|
| - }
|
| -
|
| - void SetPowerTrace(const std::string& data) override { power_trace_ = data; }
|
| -
|
| void Close() override {
|
| BrowserThread::PostTask(
|
| BrowserThread::FILE, FROM_HERE,
|
| @@ -227,7 +215,7 @@ class CompressedStringTraceDataSink : public TracingController::TraceDataSink {
|
| DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| std::string trace;
|
| if (compressed_trace_data_.empty())
|
| - trace = "{\"traceEvents\":[";
|
| + trace = "{\"" + std::string(kChromeTraceLabel) + "\":[";
|
| else
|
| trace = ",";
|
| trace += chunk_ptr->data();
|
| @@ -269,23 +257,23 @@ class CompressedStringTraceDataSink : public TracingController::TraceDataSink {
|
| if (!OpenZStreamOnFileThread())
|
| return;
|
|
|
| - if (compressed_trace_data_.empty())
|
| - AddTraceChunkAndCompressOnFileThread("{\"traceEvents\":[", false);
|
| -
|
| + if (compressed_trace_data_.empty()) {
|
| + AddTraceChunkAndCompressOnFileThread(
|
| + "{\"" + std::string(kChromeTraceLabel) + "\":[", false);
|
| + }
|
| AddTraceChunkAndCompressOnFileThread("]", false);
|
| - if (!system_trace_.empty()) {
|
| +
|
| + for (auto const &it : GetAgentTrace()) {
|
| AddTraceChunkAndCompressOnFileThread(
|
| - ",\"systemTraceEvents\": " + system_trace_, false);
|
| + ",\"" + it.first + "\": " + it.second, false);
|
| }
|
| +
|
| std::string metadataJSON;
|
| if (base::JSONWriter::Write(*GetMetadataCopy(), &metadataJSON) &&
|
| !metadataJSON.empty()) {
|
| - AddTraceChunkAndCompressOnFileThread(",\"metadata\": " + metadataJSON,
|
| - false);
|
| - }
|
| - if (!power_trace_.empty()) {
|
| AddTraceChunkAndCompressOnFileThread(
|
| - ",\"powerTraceAsString\": " + power_trace_, false);
|
| + ",\"" + std::string(kMetadataTraceLabel) + "\": " + metadataJSON,
|
| + false);
|
| }
|
| AddTraceChunkAndCompressOnFileThread("}", true);
|
|
|
| @@ -300,8 +288,6 @@ class CompressedStringTraceDataSink : public TracingController::TraceDataSink {
|
| scoped_ptr<z_stream> stream_;
|
| bool already_tried_open_;
|
| std::string compressed_trace_data_;
|
| - std::string system_trace_;
|
| - std::string power_trace_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(CompressedStringTraceDataSink);
|
| };
|
| @@ -312,6 +298,19 @@ TracingController::TraceDataSink::TraceDataSink() {}
|
|
|
| TracingController::TraceDataSink::~TraceDataSink() {}
|
|
|
| +void TracingController::TraceDataSink::AddAgentTrace(
|
| + const std::string& trace_label,
|
| + const std::string& trace_data) {
|
| + DCHECK(additional_tracing_agent_trace_.find(trace_label) ==
|
| + additional_tracing_agent_trace_.end());
|
| + additional_tracing_agent_trace_[trace_label] = trace_data;
|
| +}
|
| +
|
| +const std::map<std::string, std::string>&
|
| + TracingController::TraceDataSink::GetAgentTrace() const {
|
| + return additional_tracing_agent_trace_;
|
| +}
|
| +
|
| void TracingController::TraceDataSink::AddMetadata(
|
| const base::DictionaryValue& data) {
|
| metadata_.MergeDictionary(&data);
|
|
|