// 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/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()); 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(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