/* * 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_PRODUCER_H_ #define INCLUDE_PERFETTO_EXT_TRACING_CORE_PRODUCER_H_ #include "perfetto/base/export.h" #include "perfetto/ext/tracing/core/basic_types.h" #include "perfetto/tracing/core/flush_flags.h" #include "perfetto/tracing/core/forward_decls.h" namespace perfetto { class SharedMemory; // A Producer is an entity that connects to the write-only port of the Service // and exposes the ability to produce performance data on-demand. The lifecycle // of a Producer is as follows: // 1. The producer connects to the service and advertises its data sources // (e.g., the ability to get kernel ftraces, to list process stats). // 2. The service acknowledges the connection and sends over the SharedMemory // region that will be used to exchange data (together with the signalling // API TracingService::ProducerEndpoint::OnPageAcquired()/OnPageReleased()). // 3. At some point later on, the Service asks the Producer to turn on some of // the previously registered data sources, together with some configuration // parameters. This happens via the StartDataSource() callback. // 4. In response to that the Producer will spawn an instance of the given data // source and inject its data into the shared memory buffer (obtained during // OnConnect). // This interface is subclassed by: // 1. The actual producer code in the clients e.g., the ftrace reader process. // 2. The transport layer when interposing RPC between service and producers. class PERFETTO_EXPORT_COMPONENT Producer { … }; } // namespace perfetto #endif // INCLUDE_PERFETTO_EXT_TRACING_CORE_PRODUCER_H_