blob: 7d1659792b4c2cb62465a65ebd9e2422961a2db8 [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.
/// AGIS - Android GPU Inspector Service
library fuchsia.gpu.agis;
using zx;
/// AGIS provides FIDL services that facilitate Vulkan command tracing.
/// It acts as an intermediary between gapii, the Android GPU Inspector
/// interposing shared library and Vulkan layer, and the host Android GPU
/// Inspector application.
///
/// Vtc == Vulkan Traceable Component
type Vtc = resource table {
1: process_koid zx.koid;
2: process_name string:zx.MAX_NAME_LEN;
3: agi_socket zx.handle:SOCKET;
};
/// Max vtcs that may be registered.
/// ZX_CHANNEL_MAX_MESSAGE_BYTES = 64KiB. At an approximate message size
/// of 50B, rounding up to 64B, we easily fit 512 vtcs in a message
/// with ample headroom for message size growth.
///
/// The number of vtcs is determined by developers, rather than users.
/// The typical expected vtc count is 1 considering a developer
/// performing Vulkan tracing on 1 component at a time.
const MAX_VTCS uint32 = 512;
type Error = flexible enum {
NOT_FOUND = 1;
ALREADY_REGISTERED = 2;
VTCS_EXCEEDED = 3;
INTERNAL_ERROR = 4;
};
/// The AGIS ComponentRegistry protocol allows traceable components to register as
/// Vulkan traceable.
@discoverable
protocol ComponentRegistry {
/// Register a process as traceable and retrieve its bound socket.
/// For AGI, gapii will be the only client of this Register interface.
Register(struct {
/// Client assigned unique ID for the vtc.
id uint64;
/// Process koid.
process_koid zx.koid;
/// Must match ZX_PROP_NAME of the kernel object.
process_name string:zx.MAX_NAME_LEN;
}) -> (resource struct {
gapii_socket zx.handle:SOCKET;
}) error Error;
/// Remove an entry from the registry.
Unregister(struct {
id uint64;
}) -> (struct {}) error Error;
};
/// The AGIS Observer protocol provides the interface to retrieve registered
/// Vulkan Traceable Components.
@discoverable
protocol Observer {
/// Retrieve registered components.
/// For AGI, gapis will be the only client of this Vtcs interface.
Vtcs() -> (resource struct {
vtcs vector<Vtc>:MAX_VTCS;
}) error Error;
};