// Copyright 2023 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.heapdump.process;

using zx;

/// Rights to map a VMO in read-only mode and read its "content size" property.
const VMO_MAP_READONLY_RIGHTS zx.rights
        = zx.RIGHTS_BASIC | zx.rights.READ | zx.rights.GET_PROPERTY | zx.rights.MAP;

/// Instrumented processes send application-initiated snapshots over this channel.
///
/// This channel is also used by the server to detect when an instrumented process exits.
// TODO(fxbug.dev/122389): Application-initiated snapshots are not implemented yet.
protocol SnapshotSinkV1 {};

/// The Registry keeps track of all the instrumented processes that are running in the system.
@discoverable
protocol Registry {
    /// Binds the given process to the registry and share the relevant resources.
    RegisterV1(resource struct {
        process zx.handle:<PROCESS, zx.RIGHTS_BASIC | zx.RIGHTS_IO | zx.rights.GET_PROPERTY>;
        allocations_vmo zx.handle:<VMO, VMO_MAP_READONLY_RIGHTS>;
        snapshot_sink server_end:SnapshotSinkV1;
    });
};
