class IsAlternateFor
Defined at line 1271 of file fidling/gen/sdk/fidl/fuchsia.sysmem2/fuchsia.sysmem2/cpp/fidl/fuchsia.sysmem2/cpp/markers.h
Check whether the calling [`fuchsia.sysmem2/Node`] is in a subtree
rooted at a different child token of a common parent
[`fuchsia.sysmem2/BufferCollectionTokenGroup`], in relation to the
passed-in `node_ref`.
This call is for assisting with admission control de-duplication, and
with debugging.
The `node_ref` must be obtained using
[`fuchsia.sysmem2/Node.GetNodeRef`].
The `node_ref` can be a duplicated handle; it's not necessary to call
`GetNodeRef` for every call to [`fuchsia.sysmem2/Node.IsAlternateFor`].
If a calling token may not actually be a valid token at all due to a
potentially hostile/untrusted provider of the token, call
[`fuchsia.sysmem2/Allocator.ValidateBufferCollectionToken`] first
instead of potentially getting stuck indefinitely if `IsAlternateFor`
never responds due to a calling token not being a real token (not really
talking to sysmem). Another option is to call
[`fuchsia.sysmem2/Allocator.BindSharedCollection`] with this token first
which also validates the token along with converting it to a
[`fuchsia.sysmem2/BufferCollection`], then call `IsAlternateFor`.
All table fields are currently required.
- response `is_alternate`
- true: The first parent node in common between the calling node and
the `node_ref` `Node` is a `BufferCollectionTokenGroup`. This means
that the calling `Node` and the `node_ref` `Node` will not have both
their constraints apply - rather sysmem will choose one or the other
of the constraints - never both. This is because only one child of
a `BufferCollectionTokenGroup` is selected during logical
allocation, with only that one child's subtree contributing to
constraints aggregation.
- false: The first parent node in common between the calling `Node`
and the `node_ref` `Node` is not a `BufferCollectionTokenGroup`.
Currently, this means the first parent node in common is a
`BufferCollectionToken` or `BufferCollection` (regardless of not
`Release`ed). This means that the calling `Node` and the `node_ref`
`Node` may have both their constraints apply during constraints
aggregation of the logical allocation, if both `Node`(s) are
selected by any parent `BufferCollectionTokenGroup`(s) involved. In
this case, there is no `BufferCollectionTokenGroup` that will
directly prevent the two `Node`(s) from both being selected and
their constraints both aggregated, but even when false, one or both
`Node`(s) may still be eliminated from consideration if one or both
`Node`(s) has a direct or indirect parent
`BufferCollectionTokenGroup` which selects a child subtree other
than the subtree containing the calling `Node` or `node_ref` `Node`.
* error `[fuchsia.sysmem2/Error.NOT_FOUND]` The node_ref wasn't
associated with the same buffer collection as the calling `Node`.
Another reason for this error is if the `node_ref` is an
[`zx.Handle.EVENT`] handle with sufficient rights, but isn't actually
a real `node_ref` obtained from `GetNodeRef`.
* error `[fuchsia.sysmem2/Error.PROTOCOL_DEVIATION]` The caller passed a
`node_ref` that isn't a [`zx.Handle:EVENT`] handle , or doesn't have
the needed rights expected on a real `node_ref`.
* No other failing status codes are returned by this call. However,
sysmem may add additional codes in future, so the client should have
sensible default handling for any failing status code.
Public Members
static const bool kHasClientToServer
static const bool kHasClientToServerBody
static const bool kHasServerToClient
static const bool kHasServerToClientBody
static const bool kHasNonEmptyUserFacingResponse
static const bool kHasDomainError
static const bool kHasFrameworkError
static const uint64_t kOrdinal