1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "mojo/common/trace_controller_impl.h"
7 #include "base/trace_event/trace_event.h"
8 #include "mojo/application/public/cpp/application_connection.h"
9 #include "mojo/application/public/cpp/application_impl.h"
13 TraceControllerImpl::TraceControllerImpl(
14 InterfaceRequest
<tracing::TraceController
> request
)
15 : binding_(this, request
.Pass()) {
18 TraceControllerImpl::~TraceControllerImpl() {
21 void TraceControllerImpl::StartTracing(
22 const String
& categories
,
23 tracing::TraceDataCollectorPtr collector
) {
24 DCHECK(!collector_
.get());
25 collector_
= collector
.Pass();
26 std::string categories_str
= categories
.To
<std::string
>();
27 base::trace_event::TraceLog::GetInstance()->SetEnabled(
28 base::trace_event::TraceConfig(categories_str
,
29 base::trace_event::RECORD_UNTIL_FULL
),
30 base::trace_event::TraceLog::RECORDING_MODE
);
33 void TraceControllerImpl::StopTracing() {
34 base::trace_event::TraceLog::GetInstance()->SetDisabled();
36 base::trace_event::TraceLog::GetInstance()->Flush(
37 base::Bind(&TraceControllerImpl::SendChunk
, base::Unretained(this)));
40 void TraceControllerImpl::SendChunk(
41 const scoped_refptr
<base::RefCountedString
>& events_str
,
42 bool has_more_events
) {
43 collector_
->DataCollected(mojo::String(events_str
->data()));
44 if (!has_more_events
) {