| // 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. |
| |
| library fuchsia.tracing.controller; |
| |
| // The controller interface used by the trace tool to start/stop tracing. |
| [Discoverable] |
| protocol Controller { |
| // Requests to start tracing with the specified |options|. |
| // |
| // The trace controller acknowledges the request when all |
| // registered providers have been started or after |options.start_timeout_milliseconds| milliseconds. |
| // |
| // The trace controller emits trace data to |output| as a sequence of |
| // binary formatted trace records. Traces obtained from different providers |
| // are delimited by metadata records within the stream. |
| // |
| // The trace controller is responsible for lightly validating the structure of |
| // trace records as it copies them from trace buffers into the output. |
| // In particular, it must verify the size of each record header to ensure |
| // that the framing of trace records in the data stream is maintained. |
| // |
| // The trace controller does not validate the contents of the trace records |
| // themselves. For example, it should not try to check argument lengths in |
| // events. This ensures that the trace format can be extended without needing |
| // to modify the trace controller. |
| StartTracing(TraceOptions options, handle<socket> output) -> (); |
| |
| // Requests to stop tracing. |
| // |
| // The trace controller continues to transfer any remaining data to the |
| // output until finished, then closes the output. |
| StopTracing(); |
| |
| // Gets the known categories. |
| GetKnownCategories() -> (vector<KnownCategory> categories); |
| }; |
| |
| struct KnownCategory { |
| string:100 name; |
| string description; |
| }; |
| |
| // This is a copy of tracelink.fidl:BufferingMode. |
| enum BufferingMode : uint8 { |
| ONESHOT = 0; |
| CIRCULAR = 1; |
| STREAMING = 2; |
| }; |
| |
| // Individual providers can be tuned with this. |
| table ProviderSpec { |
| 1: string:100 name; |
| 2: uint32 buffer_size_megabytes_hint; |
| }; |
| |
| // Provides options for the trace. |
| table TraceOptions { |
| // The trace categories to record, or an empty array for all. |
| 1: vector<string:100>:100 categories; |
| |
| // Suggested size of trace buffer which each provider should receive. |
| 2: uint32 buffer_size_megabytes_hint = 4; |
| |
| // Acknowledge start request after at most |start_timeout_milliseconds|. |
| 3: uint64 start_timeout_milliseconds = 5000; |
| |
| 4: BufferingMode buffering_mode = ONESHOT; |
| |
| // Overrides for particular providers. |
| 5: vector<ProviderSpec>:100 provider_specs; |
| }; |