Skip to main content

BufferCollectionSetConstraintsRequest

Struct BufferCollectionSetConstraintsRequest 

Source
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 Debug for BufferCollectionSetConstraintsRequest

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Decode<BufferCollectionSetConstraintsRequest, DefaultFuchsiaResourceDialect> for BufferCollectionSetConstraintsRequest

Source§

fn new_empty() -> Self

Creates a valid instance of Self. The specific value does not matter, since it will be overwritten by decode.
Source§

unsafe fn decode( &mut self, decoder: &mut Decoder<'_, DefaultFuchsiaResourceDialect>, offset: usize, depth: Depth, ) -> Result<()>

Decodes an object of type T from the decoder’s buffers into self. Read more
Source§

impl Default for BufferCollectionSetConstraintsRequest

Source§

fn default() -> BufferCollectionSetConstraintsRequest

Returns the “default value” for a type. Read more
Source§

impl Encode<BufferCollectionSetConstraintsRequest, DefaultFuchsiaResourceDialect> for &mut BufferCollectionSetConstraintsRequest

Source§

unsafe fn encode( self, encoder: &mut Encoder<'_, DefaultFuchsiaResourceDialect>, offset: usize, depth: Depth, ) -> Result<()>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl PartialEq for BufferCollectionSetConstraintsRequest

Source§

fn eq(&self, other: &BufferCollectionSetConstraintsRequest) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl ResourceTypeMarker for BufferCollectionSetConstraintsRequest

Source§

type Borrowed<'a> = &'a mut BufferCollectionSetConstraintsRequest

The Rust type to use for encoding. This is a particular Encode<Self> type cheaply obtainable from &mut Self::Owned. There are three cases: Read more
Source§

fn take_or_borrow<'a>( value: &'a mut <Self as TypeMarker>::Owned, ) -> Self::Borrowed<'a>

Cheaply converts from &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

Source§

type Owned = BufferCollectionSetConstraintsRequest

The owned Rust type which this FIDL type decodes into.
Source§

fn inline_align(_context: Context) -> usize

Returns the minimum required alignment of the inline portion of the encoded object. It must be a (nonzero) power of two.
Source§

fn inline_size(_context: Context) -> usize

Returns the size of the inline portion of the encoded object, including padding for alignment. Must be a multiple of inline_align.
Source§

fn encode_is_copy() -> bool

Returns true if the memory layout of 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 more
Source§

fn decode_is_copy() -> bool

Returns true if the memory layout of 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.
Source§

impl Standalone<DefaultFuchsiaResourceDialect> for BufferCollectionSetConstraintsRequest

Source§

impl StructuralPartialEq for BufferCollectionSetConstraintsRequest

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.