// 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. #ifndef MOJO_SERVICES_TRACING_PUBLIC_CPP_TRACING_IMPL_H_ #define MOJO_SERVICES_TRACING_PUBLIC_CPP_TRACING_IMPL_H_ #include "base/macros.h" #include "mojo/services/tracing/public/cpp/trace_provider_impl.h" #include "mojo/services/tracing/public/interfaces/tracing.mojom.h" #include "mojo/shell/public/cpp/interface_factory.h" namespace mojo { class Connection; class Connector; // Connects to mojo:tracing during your Application's Initialize() call once // per process. // // We need to deal with multiple ways of packaging mojo applications // together. We'll need to deal with packages that use the mojo.ContentHandler // interface to bundle several Applciations into a single physical on disk // mojo binary, and with those same services each in their own mojo binary. // // Have your bundle ContentHandler own a TracingImpl, and each Application own // a TracingImpl. In bundles, the second TracingImpl will be a no-op. class TracingImpl : public InterfaceFactory<tracing::TraceProvider> { public: TracingImpl(); ~TracingImpl() override; // This connects to the tracing service and registers ourselves to provide // tracing data on demand. void Initialize(Connector* connector, const std::string& url); private: // InterfaceFactory<tracing::TraceProvider> implementation. void Create(Connection* connection, InterfaceRequest<tracing::TraceProvider> request) override; scoped_ptr<Connection> connection_; TraceProviderImpl provider_impl_; DISALLOW_COPY_AND_ASSIGN(TracingImpl); }; } // namespace mojo #endif // MOJO_SERVICES_TRACING_PUBLIC_CPP_TRACING_IMPL_H_