pub struct VmoBuffer {
pub vmo: Option<Vmo>,
pub vmo_usable_start: Option<u64>,
pub close_weak_asap: Option<EventPair>,
/* private fields */
}Fields§
§vmo: Option<Vmo>vmo can be un-set if a participant has only
[fuchsia.sysmem2/BufferUsage.none] set to NONE_USAGE (explicitly or
implicitly by [fuchsia.sysmem2/BufferCollection.SetConstraints]
without constraints set).
vmo_usable_start: Option<u64>Offset within the VMO of the first usable byte. Must be < the VMO’s size in bytes, and leave sufficient room for BufferMemorySettings.size_bytes before the end of the VMO.
Currently sysmem will always set this field to 0, and in future, sysmem won’t set this field to a non-zero value unless all participants have explicitly indicated support for non-zero vmo_usable_start (this mechanism does not exist as of this comment). A participant that hasn’t explicitly indicated support for non-zero vmo_usable_start (all current clients) should implicitly assume this field is set to 0 without actually checking this field.
close_weak_asap: Option<EventPair>This field is set iff vmo is a sysmem weak VMO handle.
If the client sent SetWeakOk, the client must keep close_weak_asap
around for as long as vmo, and must notice ZX_EVENTPAIR_PEER_CLOSED.
If that signal occurs, the client must close vmo asap.
If the vmo is a sysmem weak VMO handle but the client didn’t send
SetWeakOk, this means that a holder of a parent node sent SetWeakOk
with for_child_nodes_also true, and the owner of that parent node is
responsible for paying attention to close_weak_asap and informing
child token participants to close handles. In this case the participant
that never sent SetWeakOk is allowed to retain and/or pay attention to
close_weak_asap (to close the handle faster, or for other reasons such
as diagnosing overall buffer cleanup timing), but is not required to
retain or pay attention to close_weak_asap.
If sysmem closing the sysmem end of close_weak_asap does not result in
quick closure of all sysmem weak VMO handles to the buffer, that’s
considered a VMO leak, and in that case sysmem will eventually complain
loudly via syslog (currently 5s later).
Trait Implementations§
Source§impl Decode<VmoBuffer, FDomainResourceDialect> for VmoBuffer
impl Decode<VmoBuffer, FDomainResourceDialect> for VmoBuffer
Source§impl ResourceTypeMarker for VmoBuffer
impl ResourceTypeMarker for VmoBuffer
Source§type Borrowed<'a> = &'a mut VmoBuffer
type Borrowed<'a> = &'a mut VmoBuffer
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 VmoBuffer
impl TypeMarker for VmoBuffer
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.impl Standalone<FDomainResourceDialect> for VmoBuffer
impl StructuralPartialEq for VmoBuffer
Auto Trait Implementations§
impl Freeze for VmoBuffer
impl !RefUnwindSafe for VmoBuffer
impl Send for VmoBuffer
impl Sync for VmoBuffer
impl Unpin for VmoBuffer
impl !UnwindSafe for VmoBuffer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
Source§impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
§impl<T> InstanceFromServiceTransport<T> for T
impl<T> InstanceFromServiceTransport<T> for T
§fn from_service_transport(handle: T) -> T
fn from_service_transport(handle: T) -> T
T to [Self]