blob: fa03a2979482936a37581f6b9f2a485727fc0f63 [file] [log] [blame]
// Copyright 2021 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.developer.bridge;
using fuchsia.device;
using fuchsia.tracing.controller;
/// This covers erorr from using the `Tracing` protocol below (specifically
/// trace recording errors).
type RecordingError = strict enum {
/// Error encountered when opening the proxy to the target.
TARGET_PROXY_OPEN = 0;
/// This is a general error when starting a trace.
RECORDING_START = 1;
/// An error encountered if a trace recording has already been started
/// for a given Fuchsia target.
RECORDING_ALREADY_STARTED = 2;
/// An error encountered when attempting to stop a trace. This causes an
/// immediate termination of the client channel, so the user should not
/// attempt to run `StopRecording` again.
RECORDING_STOP = 3;
/// Error for when a trace file is already being written to by the tracing
/// service.
DUPLICATE_TRACE_FILE = 4;
/// When attempting to stop a trace, there were no active traces found for
/// the given file.
NO_SUCH_TRACE_FILE = 5;
};
/// An action to be preformed on this trace. Used as part of a Trigger.
type Action = strict enum {
/// Terminates the active trace.
TERMINATE = 1;
};
/// A trigger is an action that is done when a certain alert has been raised in the
/// fuchsia tracing system.
type Trigger = table {
/// The name of the alert being watched.
/// See fuchsia.tracing.controller.Controller.WatchAlert for more info.
1: alert string:fuchsia.tracing.controller.MAX_ALERT_NAME_LENGTH;
/// The action to run when this alert has been witnessed.
2: action Action;
};
/// Covers how a trace will be run when invoking `StartRecording`.
type TraceOptions = table {
/// Determines how long a trace recording will run before terminating in
/// fractional seconds. This is an "at-least" duration, with the actual
/// runtime terminating likely a few dozen milliseconds longer.
///
/// If this is not set, a trace will run indefinitely and must be stopped
/// using `StopRecording`. Or by cleanly shutting down the daemon via
/// `ffx daemon stop` or by using the Deamon proxy itself.
1: duration float64;
/// The triggers to run against this trace.
2: triggers vector<Trigger>:MAX;
};
@discoverable
protocol Tracing {
/// Starts a trace recording. If the target behind the query is already
/// running a trace, or some trace is actively writing to the output file,
/// this will return a [RecordingAlreadyStarted] error.
///
/// On success, returns the target on which the trace is running.
StartRecording(struct {
target_query string:<fuchsia.device.DEVICE_NAME_MAX, optional>;
output_file string:255;
options TraceOptions;
target_config fuchsia.tracing.controller.TraceConfig;
}) -> (struct {
target Target;
}) error RecordingError;
/// Stops the trace recording, flushing the remaining contents to the output
/// file.
///
/// Returns:
/// - the resolved target for which the trace was running.
StopRecording(struct {
output_file string:255;
}) -> (struct {
target Target;
}) error RecordingError;
/// Reports the current status of all running traces.
Status(resource struct {
iterator server_end:TracingStatusIterator;
}) -> ();
};
type TraceInfo = table {
/// The target on which the trace is running.
1: target Target;
/// Path to the output file.
2: output_file string:255;
/// The total duration of the command in fractional seconds. This will not
/// be set if the command is supposed to run indefinitely.
3: duration float64;
/// The amount of time remaining before the trace terminates. This will not
/// be set if the command is supposed to run indefinitely.
4: remaining_runtime float64;
/// The original config sent to the `StartRecording` command.
5: config fuchsia.tracing.controller.TraceConfig;
/// A list of triggers active for this trace. See [Trigger] for more info.
6: triggers vector<Trigger>:MAX;
};
protocol TracingStatusIterator {
/// Gets the next block of trace info entries.
GetNext() -> (struct {
entries vector<TraceInfo>:MAX;
});
};