| // Copyright 2015 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 SERVICES_DART_DART_TRACING_H_ | 
 | #define SERVICES_DART_DART_TRACING_H_ | 
 |  | 
 | #include "base/trace_event/trace_event.h" | 
 | #include "mojo/common/tracing_impl.h" | 
 | #include "mojo/public/cpp/bindings/interface_request.h" | 
 | #include "mojo/services/tracing/interfaces/tracing.mojom.h" | 
 |  | 
 | namespace dart { | 
 |  | 
 | class DartTimelineController { | 
 |  public: | 
 |   static void Enable(const mojo::String& categories); | 
 |   static void EnableAll(); | 
 |   static void Disable(); | 
 | }; | 
 |  | 
 | class DartTraceProvider : public tracing::TraceProvider { | 
 |  public: | 
 |   DartTraceProvider(); | 
 |   ~DartTraceProvider() override; | 
 |  | 
 |   void Bind(mojo::InterfaceRequest<tracing::TraceProvider> request); | 
 |  | 
 |  private: | 
 |   // tracing::TraceProvider implementation: | 
 |   void StartTracing( | 
 |       const mojo::String& categories, | 
 |       mojo::InterfaceHandle<tracing::TraceRecorder> recorder) override; | 
 |   void StopTracing() override; | 
 |  | 
 |   void SplitAndRecord(char* data, size_t length); | 
 |  | 
 |   mojo::Binding<tracing::TraceProvider> binding_; | 
 |   tracing::TraceRecorderPtr recorder_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(DartTraceProvider); | 
 | }; | 
 |  | 
 | class DartTracingImpl { | 
 |  public: | 
 |   DartTracingImpl(); | 
 |   ~DartTracingImpl(); | 
 |  | 
 |   // This connects to the tracing service and registers ourselves to provide | 
 |   // tracing data on demand. | 
 |   void Initialize(mojo::ApplicationImpl* app); | 
 |  | 
 |  private: | 
 |   DartTraceProvider provider_impl_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(DartTracingImpl); | 
 | }; | 
 |  | 
 | }  // namespace dart | 
 |  | 
 | #endif  // SERVICES_DART_DART_TRACING_H_ |