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..9ce379b3669650386ad4f1f997eb71bcbdbbee25 |
--- /dev/null |
+++ b/sky/tools/debugger/prompt/trace_collector.cc |
@@ -0,0 +1,47 @@ |
+// 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), |
+ callback_requested_(false) { |
+} |
+ |
+TraceCollector::~TraceCollector() { |
+} |
+ |
+void TraceCollector::GetTrace(TraceCallback callback) { |
+ DCHECK(!callback_requested_); |
+ if (is_complete_) { |
+ callback.Run(GetTraceAsString()); |
+ return; |
+ } |
+ callback_requested_ = true; |
+ 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_requested_) |
jamesr
2015/01/15 23:56:58
can't you just check if callback_ is null and clea
abarth-chromium
2015/01/16 00:31:53
Done.
|
+ callback_.Run(GetTraceAsString()); |
+} |
+ |
+std::string TraceCollector::GetTraceAsString() { |
+ return std::string(&trace_.front(), trace_.size()); |
+} |
+ |
+} // namespace debugger |
+} // namespace sky |