blob: ee6d72ea126591262f7feaa5c2d563bd2e5e840f [file] [log] [blame]
// 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.
@available(added=11)
library fuchsia.debugdata;
using zx;
using fuchsia.io;
/// Publisher defines the interface for publishing instrumentation data.
@discoverable
closed protocol Publisher {
/// The program runtime sends a string naming a `data_sink` and transfers
/// the handle to a VMO containing the `data` it wants published
/// there. The `data_sink` string identifies a type of data, and the
/// VMO's object name can specifically identify the data set in this VMO.
/// The ZX_PROP_VMO_CONTENT_SIZE property should be set on the VMO to
/// indicate the precise size of the data in case that is not whole pages;
/// however, leaving it unset (i.e. 0) is acceptable when the whole-page
/// size of the VMO is the intended size of dump. Code instrumentation
/// runtimes use this to deliver large binary trace results. In such cases,
/// the client can resize the VMO and should use the `vmo_token` handle to
/// signal when the VMO is ready for processing by the recipient. The
/// receiver will not process the VMO until the peer of `vmo_token` handle
/// is closed. Therefore, the client should retain the peer handle until
/// it has completed all writes to the VMO.
strict Publish(resource struct {
data_sink string:fuchsia.io.MAX_NAME_LENGTH;
data zx.Handle:VMO;
vmo_token zx.Handle:EVENTPAIR;
});
};