Chromium Code Reviews| 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 |