| // Copyright 2022 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. |
| |
| library fuchsia.tracing.perfetto; |
| |
| using fuchsia.io; |
| using zx; |
| |
| /// An interface for exchanging trace data buffers between Providers and the |
| /// system tracing service. |
| closed protocol BufferReceiver { |
| /// Sends a file to be used as a trace buffer. |
| /// The file must support writable mmap() access. |
| @available(added=9) |
| strict ProvideBuffer(resource struct { |
| buffer client_end:fuchsia.io.File; |
| }) -> () error zx.Status; |
| |
| /// Called by the system tracing service, to provide a trace buffer |
| /// to the Perfetto Producer. The buffer size is specified via |
| /// the `ZX_PROP_VMO_CONTENT_SIZE` handle property. |
| /// The Producer will invoke the callback when the buffer is |
| /// received. The system tracing service must wait until the callback |
| /// is signaled before continuing with trace session setup. |
| /// Method should be called only once per BufferReceiver connection. |
| /// The channel may be safely dropped once a buffer is received. |
| @available(replaced=9) |
| strict ProvideBuffer(resource struct { |
| buffer zx.Handle:VMO; |
| }) -> () error zx.Status; |
| }; |
| |
| /// Specifies how the trace buffer should be exchanged. |
| type TraceBuffer = strict resource union { |
| /// Used to receive the trace buffer from the system tracing service. |
| 1: from_server client_end:<BufferReceiver>; |
| }; |
| |
| /// Interface for creating connections between Perfetto "Producers" and |
| /// a shared Perfetto service. |
| /// To learn more about Perfetto, see: https://www.perfetto.dev/docs/ |
| /// and https://perfetto.dev/docs/concepts/service-model . |
| @discoverable |
| closed protocol ProducerConnector { |
| /// Connects a Perfetto Producer to the Perfetto backend. Both sides |
| /// will communicate over `producer_socket` using Perfetto's internal |
| /// wire format "ProducerPort" (see |
| /// //third_party/perfetto/protos/perfetto/ipc/producer_port.proto). |
| /// |
| /// `trace_buffer` either provides a buffer for communicating trace data |
| /// from the client, or an interface for receiving a buffer from the |
| /// server, depending on the client's needs. |
| /// |
| /// The lifetime of `producer_socket` may outlive the connection lifetime |
| /// of ProducerConnector. |
| /// Multiple Producers may be connected simultaneously. |
| // TODO(https://fxbug.dev/42166474): Define error conditions and status codes. |
| strict ConnectProducer(resource struct { |
| producer_socket zx.Handle:SOCKET; |
| buffer TraceBuffer; |
| }) -> () error zx.Status; |
| }; |