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, DefaultFuchsiaResourceDialect> for VmoBuffer
impl Decode<VmoBuffer, DefaultFuchsiaResourceDialect> 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.