pub struct BufferCollectionSetConstraintsRequest {
pub constraints: Option<BufferCollectionConstraints>,
pub must_match_vmo: Option<Vmo>,
/* private fields */
}Fields§
§constraints: Option<BufferCollectionConstraints>These are the constraints on the buffer collection imposed by the
sending client/participant. The constraints field is not required
to be set. If not set, the client is not setting any actual
constraints, but is indicating that the client has no constraints to
set. A client that doesn’t set the constraints field won’t receive
any VMO handles, but can still find out how many buffers were
allocated and can still refer to buffers by their buffer_index.
must_match_vmo: Option<Vmo>This field should only be set if a client must force the new buffer collection to have exactly identical SingleBufferSettings as a previously-allocated collection, else the allocation must fail.
Setting this field nails down all the constraints except the buffer count, so clients shouldn’t expect this to work unless the overall set of participants on this logical buffer collection is the same as for the previous allocation (though this isn’t strictly required to be true). Even then, if any participant indicates different constraints than for this VMO’s collection, the allocation is fairly likely to fail. For these reasons, clients will want to avoid setting this field unless it’s really needed.
The must_match_vmo handle must be a handle to a sysmem-provided
VMO, else the logical buffer collection will fail. To check whether
a VMO handle refers to a sysmem-provided VMO before setting this
field (if not already known), see
[fuchsia.sysmem2/Allocator.GetVmoInfo].
This still ensures that constraints of other participants are satisfied as well, else the allocation will fail.
This field is a VMO rather than SingleBufferSettings so that adding a new field to SingleBufferSettings remains compatible with this mechanism without needing to update/rebuild all clients using this mechanism to copy the new field.
This field is a VMO rather than a “handle to a SingleBufferSettings” (or similar) to avoid this field causing allocation failure when there are zero actual still-existing buffers to match (in which case not setting this field is better than letting an already-gone buffer dictate the settings for new buffers).
Clients should avoid keeping a buffer alive just to use it with this field; instead drop the old buffer when appropriate, and allocate new buffer(s) like it’s the first allocation after boot again.
See also [fuchsia.sysmem2/BufferCollection.AttachToken] which is a
substantially different mechanism, but might be a workable
alternative to setting this feild in a few (but not all) situations
that would otherwise need to set this field.
In most cases the constraints field should specify all the necessary constraints known to the client, and this field should not be set.
Trait Implementations§
Source§impl Decode<BufferCollectionSetConstraintsRequest, DefaultFuchsiaResourceDialect> for BufferCollectionSetConstraintsRequest
impl Decode<BufferCollectionSetConstraintsRequest, DefaultFuchsiaResourceDialect> for BufferCollectionSetConstraintsRequest
Source§impl Default for BufferCollectionSetConstraintsRequest
impl Default for BufferCollectionSetConstraintsRequest
Source§fn default() -> BufferCollectionSetConstraintsRequest
fn default() -> BufferCollectionSetConstraintsRequest
Source§impl Encode<BufferCollectionSetConstraintsRequest, DefaultFuchsiaResourceDialect> for &mut BufferCollectionSetConstraintsRequest
impl Encode<BufferCollectionSetConstraintsRequest, DefaultFuchsiaResourceDialect> for &mut BufferCollectionSetConstraintsRequest
Source§impl PartialEq for BufferCollectionSetConstraintsRequest
impl PartialEq for BufferCollectionSetConstraintsRequest
Source§fn eq(&self, other: &BufferCollectionSetConstraintsRequest) -> bool
fn eq(&self, other: &BufferCollectionSetConstraintsRequest) -> bool
self and other values to be equal, and is used by ==.Source§impl ResourceTypeMarker for BufferCollectionSetConstraintsRequest
impl ResourceTypeMarker for BufferCollectionSetConstraintsRequest
Source§type Borrowed<'a> = &'a mut BufferCollectionSetConstraintsRequest
type Borrowed<'a> = &'a mut BufferCollectionSetConstraintsRequest
Encode<Self>
type cheaply obtainable from &mut Self::Owned. There are three cases: Read moreSource§fn take_or_borrow<'a>(
value: &'a mut <Self as TypeMarker>::Owned,
) -> Self::Borrowed<'a>
fn take_or_borrow<'a>( value: &'a mut <Self as TypeMarker>::Owned, ) -> Self::Borrowed<'a>
&mut Self::Owned to Self::Borrowed. For
HandleBased types this is “take” (it returns an owned handle and
replaces value with Handle::invalid), and for all other types it is
“borrow” (just converts from one reference to another).Source§impl TypeMarker for BufferCollectionSetConstraintsRequest
impl TypeMarker for BufferCollectionSetConstraintsRequest
Source§type Owned = BufferCollectionSetConstraintsRequest
type Owned = BufferCollectionSetConstraintsRequest
Source§fn inline_align(_context: Context) -> usize
fn inline_align(_context: Context) -> usize
Source§fn inline_size(_context: Context) -> usize
fn inline_size(_context: Context) -> usize
inline_align.Source§fn encode_is_copy() -> bool
fn encode_is_copy() -> bool
Self::Owned matches the FIDL wire
format and encoding requires no validation. When true, we can optimize
encoding arrays and vectors of Self::Owned to a single memcpy. Read moreSource§fn decode_is_copy() -> bool
fn decode_is_copy() -> bool
Self::Owned matches the FIDL wire
format and decoding requires no validation. When true, we can optimize
decoding arrays and vectors of Self::Owned to a single memcpy.