blob: 19c88c21180ad5e34fa07a9f610efa927a352b49 [file] [log] [blame]
James Robinson115caf82015-04-07 12:52:40 -07001// 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.
4
5#ifndef SERVICES_TRACING_TRACING_APP_H_
6#define SERVICES_TRACING_TRACING_APP_H_
7
8#include "base/macros.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/memory/scoped_vector.h"
Mitch Rudominerb543d0f2015-07-20 10:14:56 -070011#include "mojo/common/interface_ptr_set.h"
James Robinson115caf82015-04-07 12:52:40 -070012#include "mojo/public/cpp/application/application_delegate.h"
13#include "mojo/public/cpp/application/application_impl.h"
14#include "mojo/public/cpp/bindings/strong_binding.h"
Viet-Trung Luu0f4f3ba2015-10-10 01:08:40 -070015#include "mojo/services/tracing/interfaces/tracing.mojom.h"
James Robinson115caf82015-04-07 12:52:40 -070016#include "services/tracing/trace_data_sink.h"
Przemyslaw Pietrzkiewicz4825af92015-08-13 10:27:45 +020017#include "services/tracing/trace_recorder_impl.h"
James Robinson115caf82015-04-07 12:52:40 -070018
19namespace tracing {
20
21class TracingApp : public mojo::ApplicationDelegate,
Przemyslaw Pietrzkiewicz4825af92015-08-13 10:27:45 +020022 public mojo::InterfaceFactory<TraceCollector>,
23 public TraceCollector {
James Robinson115caf82015-04-07 12:52:40 -070024 public:
25 TracingApp();
26 ~TracingApp() override;
27
28 private:
29 // mojo::ApplicationDelegate implementation.
30 bool ConfigureIncomingConnection(
31 mojo::ApplicationConnection* connection) override;
32
Przemyslaw Pietrzkiewicz4825af92015-08-13 10:27:45 +020033 // mojo::InterfaceFactory<TraceCollector> implementation.
James Robinson115caf82015-04-07 12:52:40 -070034 void Create(mojo::ApplicationConnection* connection,
Przemyslaw Pietrzkiewicz4825af92015-08-13 10:27:45 +020035 mojo::InterfaceRequest<TraceCollector> request) override;
James Robinson115caf82015-04-07 12:52:40 -070036
Przemyslaw Pietrzkiewicz4825af92015-08-13 10:27:45 +020037 // tracing::TraceCollector implementation.
James Robinson115caf82015-04-07 12:52:40 -070038 void Start(mojo::ScopedDataPipeProducerHandle stream,
39 const mojo::String& categories) override;
40 void StopAndFlush() override;
41
42 void AllDataCollected();
43
44 scoped_ptr<TraceDataSink> sink_;
Przemyslaw Pietrzkiewicz4825af92015-08-13 10:27:45 +020045 ScopedVector<TraceRecorderImpl> recorder_impls_;
46 mojo::InterfacePtrSet<TraceProvider> provider_ptrs_;
47 mojo::Binding<TraceCollector> collector_binding_;
James Robinson115caf82015-04-07 12:52:40 -070048 bool tracing_active_;
49 mojo::String tracing_categories_;
50
51 DISALLOW_COPY_AND_ASSIGN(TracingApp);
52};
53
54} // namespace tracing
55
56#endif // SERVICES_TRACING_TRACING_APP_H_