Chromium Code Reviews| Index: components/feedback/tracing_manager.cc |
| diff --git a/components/feedback/tracing_manager.cc b/components/feedback/tracing_manager.cc |
| index f35fe80876f44763eee829050efbe73d4febb7b0..64d2e816f94e33c15bc4eae9f903af72a295658c 100644 |
| --- a/components/feedback/tracing_manager.cc |
| +++ b/components/feedback/tracing_manager.cc |
| @@ -5,14 +5,48 @@ |
| #include "components/feedback/tracing_manager.h" |
| #include "base/bind.h" |
| -#include "base/file_util.h" |
| -#include "base/location.h" |
| #include "base/memory/ref_counted_memory.h" |
| #include "base/message_loop/message_loop_proxy.h" |
| #include "components/feedback/feedback_util.h" |
| #include "content/public/browser/tracing_controller.h" |
| namespace { |
| + |
| +class StringTraceDataSink : public content::TracingController::TraceDataSink { |
|
dsinclair
2014/09/05 19:27:42
Is this the same as the StringTraceDataSink in Tra
|
| + public: |
| + typedef base::Callback<void(const std::string&)> CompletionCallback; |
| + |
| + explicit StringTraceDataSink(CompletionCallback callback) |
| + : completion_callback_(callback) { |
| + } |
| + |
| + // TracingController::TraceDataSink implementation |
| + virtual void AddTraceChunk(const std::string& chunk) OVERRIDE { |
| + if (!trace_.empty()) |
| + trace_ += ","; |
| + trace_ += chunk; |
| + } |
| + virtual void SetSystemTrace(const std::string& data) OVERRIDE { |
| + system_trace_ = data; |
| + } |
| + virtual void Close() OVERRIDE { |
| + std::string result = "{\"traceEvents\":[" + trace_ + "]"; |
| + if (!system_trace_.empty()) |
| + result += ",\"systemTraceEvents\":[" + system_trace_ + "]"; |
| + result += "}"; |
| + |
| + completion_callback_.Run(result); |
| + } |
| + |
| + private: |
| + virtual ~StringTraceDataSink() {} |
| + |
| + std::string trace_; |
| + std::string system_trace_; |
| + CompletionCallback completion_callback_; |
| +}; |
| + |
| + |
| // Only once trace manager can exist at a time. |
| TracingManager* g_tracing_manager = NULL; |
| // Trace IDs start at 1 and increase. |
| @@ -43,9 +77,8 @@ int TracingManager::RequestTrace() { |
| current_trace_id_ = g_next_trace_id; |
| ++g_next_trace_id; |
| content::TracingController::GetInstance()->DisableRecording( |
| - base::FilePath(), |
| - base::Bind(&TracingManager::OnTraceDataCollected, |
| - weak_ptr_factory_.GetWeakPtr())); |
| + new StringTraceDataSink(base::Bind(&TracingManager::OnTraceDataCollected, |
| + weak_ptr_factory_.GetWeakPtr()))); |
| return current_trace_id_; |
| } |
| @@ -96,20 +129,13 @@ void TracingManager::StartTracing() { |
| content::TracingController::EnableRecordingDoneCallback()); |
| } |
| -void TracingManager::OnTraceDataCollected(const base::FilePath& path) { |
| +void TracingManager::OnTraceDataCollected(const std::string& trace_data) { |
| if (!current_trace_id_) |
| return; |
| - std::string data; |
| - if (!base::ReadFileToString(path, &data)) { |
| - LOG(ERROR) << "Failed to read trace data from: " << path.value(); |
| - return; |
| - } |
| - base::DeleteFile(path, false); |
| - |
| std::string output_val; |
| feedback_util::ZipString( |
| - base::FilePath(kTracingFilename), data, &output_val); |
| + base::FilePath(kTracingFilename), trace_data, &output_val); |
| scoped_refptr<base::RefCountedString> output( |
| base::RefCountedString::TakeString(&output_val)); |