/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef INCLUDE_PERFETTO_EXT_TRACING_CORE_TRACING_SERVICE_H_ #define INCLUDE_PERFETTO_EXT_TRACING_CORE_TRACING_SERVICE_H_ #include <stdint.h> #include <functional> #include <memory> #include <vector> #include "perfetto/base/export.h" #include "perfetto/ext/base/scoped_file.h" #include "perfetto/ext/base/sys_types.h" #include "perfetto/ext/tracing/core/basic_types.h" #include "perfetto/ext/tracing/core/shared_memory.h" #include "perfetto/ext/tracing/core/trace_packet.h" #include "perfetto/tracing/buffer_exhausted_policy.h" #include "perfetto/tracing/core/clock_snapshots.h" #include "perfetto/tracing/core/flush_flags.h" #include "perfetto/tracing/core/forward_decls.h" namespace perfetto { namespace base { class TaskRunner; } // namespace base class Consumer; class Producer; class SharedMemoryArbiter; class TraceWriter; class ClientIdentity; // TODO: for the moment this assumes that all the calls happen on the same // thread/sequence. Not sure this will be the case long term in Chrome. // The API for the Producer port of the Service. // Subclassed by: // 1. The tracing_service_impl.cc business logic when returning it in response // to the ConnectProducer() method. // 2. The transport layer (e.g., src/ipc) when the producer and // the service don't talk locally but via some IPC mechanism. class PERFETTO_EXPORT_COMPONENT ProducerEndpoint { … }; // class ProducerEndpoint. // The API for the Consumer port of the Service. // Subclassed by: // 1. The tracing_service_impl.cc business logic when returning it in response // to // the ConnectConsumer() method. // 2. The transport layer (e.g., src/ipc) when the consumer and // the service don't talk locally but via some IPC mechanism. class PERFETTO_EXPORT_COMPONENT ConsumerEndpoint { … }; // class ConsumerEndpoint. struct PERFETTO_EXPORT_COMPONENT TracingServiceInitOpts { … }; // The API for the Relay port of the Service. Subclassed by the // tracing_service_impl.cc business logic when returning it in response to the // ConnectRelayClient() method. class PERFETTO_EXPORT_COMPONENT RelayEndpoint { … }; // The public API of the tracing Service business logic. // // Exposed to: // 1. The transport layer (e.g., src/unix_rpc/unix_service_host.cc), // which forwards commands received from a remote producer or consumer to // the actual service implementation. // 2. Tests. // // Subclassed by: // The service business logic in src/core/tracing_service_impl.cc. class PERFETTO_EXPORT_COMPONENT TracingService { … }; } // namespace perfetto #endif // INCLUDE_PERFETTO_EXT_TRACING_CORE_TRACING_SERVICE_H_