| // 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 "services/debugger/trace_collector.h" |
| |
| 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()); |
| 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 |