Index: sky/tools/debugger/prompt/trace_collector.cc |
diff --git a/sky/tools/debugger/prompt/trace_collector.cc b/sky/tools/debugger/prompt/trace_collector.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..09481825d45492e7ce7a19168b79be5e874e56a3 |
--- /dev/null |
+++ b/sky/tools/debugger/prompt/trace_collector.cc |
@@ -0,0 +1,44 @@ |
+// Copyright 2014 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 "sky/tools/debugger/prompt/trace_collector.h" |
+ |
+namespace sky { |
+namespace debugger { |
+ |
+TraceCollector::TraceCollector(mojo::ScopedDataPipeConsumerHandle source) |
+ : drainer_(this, source.Pass()), is_complete_(false) { |
+} |
+ |
+TraceCollector::~TraceCollector() { |
+} |
+ |
+void TraceCollector::GetTrace(TraceCallback callback) { |
+ DCHECK(!callback_.is_null()); |
+ if (is_complete_) { |
+ callback.Run(GetTraceAsString()); |
+ return; |
+ } |
+ callback_ = callback; |
+} |
+ |
+void TraceCollector::OnDataAvailable(const void* data, size_t num_bytes) { |
+ DCHECK(!is_complete_); |
+ const char* chars = static_cast<const char*>(data); |
+ trace_.insert(trace_.end(), chars, chars + num_bytes); |
+} |
+ |
+void TraceCollector::OnDataComplete() { |
+ DCHECK(!is_complete_); |
+ is_complete_ = true; |
+ if (!callback_.is_null()) |
+ callback_.Run(GetTraceAsString()); |
+} |
+ |
+std::string TraceCollector::GetTraceAsString() { |
+ return std::string(&trace_.front(), trace_.size()); |
+} |
+ |
+} // namespace debugger |
+} // namespace sky |