// Copyright 2019 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.debugdata;

/// The maximum length, in bytes, of data sink or configuration name.
const uint64 MAX_NAME = 1024;

/// DebugData defines the interface for instrumentation configuration and data publishing.
[Layout = "Simple", Discoverable]
protocol DebugData {
    /// The program runtime sends a string naming a `data_sink` and transfers the sole 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 client must transfer the only handle to the VMO (which prevents the VMO being
    /// resized without the receiver's knowledge), but it might still have the VMO mapped in and
    /// continue to write data to it.  Code instrumentation runtimes use this to deliver large
    /// binary trace results.
    Publish(string:MAX_NAME data_sink, handle<vmo> data);

    /// The program runtime names a `config_name` referring to a debug configuration of some kind
    /// and gets back a VMO to read configuration data from.  The sanitizer runtimes use this to
    /// allow large options text to be stored in a file rather than passed directly in environment
    /// strings.
    LoadConfig(string:MAX_NAME config_name) -> (handle<vmo>? config);
};
