| // Copyright 2016 The Fuchsia 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 GARNET_BIN_TRACE_MANAGER_TRACE_MANAGER_H_ |
| #define GARNET_BIN_TRACE_MANAGER_TRACE_MANAGER_H_ |
| |
| #include <list> |
| |
| #include <fuchsia/tracelink/cpp/fidl.h> |
| #include <fuchsia/tracing/cpp/fidl.h> |
| |
| #include "garnet/bin/trace_manager/config.h" |
| #include "garnet/bin/trace_manager/trace_provider_bundle.h" |
| #include "garnet/bin/trace_manager/trace_session.h" |
| #include "lib/component/cpp/startup_context.h" |
| #include "lib/fidl/cpp/binding_set.h" |
| #include "lib/fidl/cpp/interface_ptr_set.h" |
| #include "lib/fidl/cpp/interface_request.h" |
| #include "lib/fxl/macros.h" |
| |
| namespace tracing { |
| |
| class TraceManager : public fuchsia::tracelink::Registry, |
| public fuchsia::tracing::TraceController { |
| public: |
| TraceManager(component::StartupContext* context, const Config& config); |
| ~TraceManager() override; |
| |
| private: |
| // |TraceController| implementation. |
| void StartTracing(fuchsia::tracing::TraceOptions options, zx::socket output, |
| StartTracingCallback cb) override; |
| void StopTracing() override; |
| void GetKnownCategories(GetKnownCategoriesCallback callback) override; |
| |
| // |TraceRegistry| implementation. |
| void RegisterTraceProviderWorker( |
| fidl::InterfaceHandle<fuchsia::tracelink::Provider> provider, |
| uint64_t pid, fidl::StringPtr name); |
| void RegisterTraceProviderDeprecated( |
| fidl::InterfaceHandle<fuchsia::tracelink::Provider> provider) override; |
| void RegisterTraceProvider( |
| fidl::InterfaceHandle<fuchsia::tracelink::Provider> provider, |
| uint64_t pid, fidl::StringPtr name) override; |
| void RegisterTraceProviderSynchronously( |
| fidl::InterfaceHandle<fuchsia::tracelink::Provider> provider, |
| uint64_t pid, fidl::StringPtr name, |
| RegisterTraceProviderSynchronouslyCallback callback) override; |
| |
| void FinalizeTracing(); |
| void LaunchConfiguredProviders(); |
| |
| component::StartupContext* const context_; |
| const Config& config_; |
| |
| uint32_t next_provider_id_ = 1u; |
| fxl::RefPtr<TraceSession> session_; |
| std::list<TraceProviderBundle> providers_; |
| // True if tracing has been started, and is not (yet) being stopped. |
| bool trace_running_ = false; |
| |
| FXL_DISALLOW_COPY_AND_ASSIGN(TraceManager); |
| }; |
| |
| } // namespace tracing |
| |
| #endif // GARNET_BIN_TRACE_MANAGER_TRACE_MANAGER_H_ |