Index: mojo/common/tracing_impl.cc |
diff --git a/mojo/common/tracing_impl.cc b/mojo/common/tracing_impl.cc |
index ea912c99851bcfde4ccbbb41cd3ccd7dfc1cea8f..bfafcba1839aa87d35efb3b2eea82e73065e1284 100644 |
--- a/mojo/common/tracing_impl.cc |
+++ b/mojo/common/tracing_impl.cc |
@@ -4,68 +4,58 @@ |
#include "mojo/common/tracing_impl.h" |
-#include "base/callback.h" |
#include "base/debug/trace_event.h" |
-#include "base/files/file_util.h" |
+#include "mojo/public/cpp/application/application_connection.h" |
+#include "mojo/public/cpp/application/application_impl.h" |
namespace mojo { |
-namespace { |
-static bool g_tracing = false; |
-static int g_blocks = 0; |
-static FILE* g_trace_file = NULL; |
- |
-void WriteTraceDataCollected( |
- const scoped_refptr<base::RefCountedString>& events_str, |
- bool has_more_events) { |
- if (g_blocks) { |
- fwrite(",", 1, 1, g_trace_file); |
- } |
- ++g_blocks; |
- fwrite(events_str->data().c_str(), 1, events_str->data().length(), |
- g_trace_file); |
- if (!has_more_events) { |
- fwrite("]}", 1, 2, g_trace_file); |
- base::CloseFile(g_trace_file); |
- g_trace_file = NULL; |
- g_blocks = 0; |
- } |
+// static |
+void TracingImpl::Create(ApplicationImpl* app) { |
+ new TracingImpl(app); |
} |
-void StopTracingAndFlushToDisk(base::FilePath::StringType base_name) { |
- base::debug::TraceLog::GetInstance()->SetDisabled(); |
- |
- base_name.append(FILE_PATH_LITERAL(".trace")); |
- g_trace_file = base::OpenFile(base::FilePath(base_name), "w+"); |
- static const char start[] = "{\"traceEvents\":["; |
- fwrite(start, 1, strlen(start), g_trace_file); |
- base::debug::TraceLog::GetInstance()->Flush( |
- base::Bind(&WriteTraceDataCollected)); |
+// static |
+void TracingImpl::Create(tracing::TraceDataCollectorPtr ptr) { |
+ new TracingImpl(ptr.Pass()); |
} |
+ |
+TracingImpl::TracingImpl(ApplicationImpl* app) : binding_(this) { |
+ ApplicationConnection* connection = app->ConnectToApplication("mojo:tracing"); |
+ tracing::TraceDataCollectorPtr trace_data_collector_ptr; |
+ connection->ConnectToService(&trace_data_collector_ptr); |
+ binding_.Bind(trace_data_collector_ptr.PassMessagePipe()); |
} |
-TracingImpl::TracingImpl(InterfaceRequest<Tracing> request, |
- base::FilePath::StringType base_name) |
- : base_name_(base_name), binding_(this, request.Pass()) { |
+TracingImpl::TracingImpl(tracing::TraceDataCollectorPtr ptr) |
+ : binding_(this, ptr.PassMessagePipe()) { |
} |
TracingImpl::~TracingImpl() { |
} |
-void TracingImpl::Start() { |
- if (g_tracing) |
- return; |
- g_tracing = true; |
+void TracingImpl::StartTracing(const String& categories) { |
+ std::string categories_str = categories.To<std::string>(); |
base::debug::TraceLog::GetInstance()->SetEnabled( |
- base::debug::CategoryFilter("*"), base::debug::TraceLog::RECORDING_MODE, |
+ base::debug::CategoryFilter(categories_str), |
+ base::debug::TraceLog::RECORDING_MODE, |
base::debug::TraceOptions(base::debug::RECORD_UNTIL_FULL)); |
} |
-void TracingImpl::Stop() { |
- if (!g_tracing) |
- return; |
- g_tracing = false; |
- StopTracingAndFlushToDisk(base_name_); |
+void TracingImpl::StopTracing() { |
+ base::debug::TraceLog::GetInstance()->SetDisabled(); |
+ |
+ base::debug::TraceLog::GetInstance()->Flush( |
+ base::Bind(&TracingImpl::SendChunk, base::Unretained(this))); |
+} |
+ |
+void TracingImpl::SendChunk( |
+ const scoped_refptr<base::RefCountedString>& events_str, |
+ bool has_more_events) { |
+ binding_.client()->DataCollected(mojo::String(events_str->data())); |
+ if (!has_more_events) { |
+ binding_.client()->EndTracing(); |
+ } |
} |
} // namespace mojo |