pub struct PresentArgs {
    pub requested_presentation_time: Option<i64>,
    pub acquire_fences: Option<Vec<Event>>,
    pub release_fences: Option<Vec<Event>>,
    pub unsquashable: Option<bool>,
    pub server_wait_fences: Option<Vec<Event>>,
    pub server_signal_fences: Option<Vec<Event>>,
    /* private fields */
}
Expand description

Arguments passed into [Present]. All arguments are optional, and if an argument is omitted Flatland will use a reasonable default, specified below.

Fields§

§requested_presentation_time: Option<i64>

requested_presentation_time specifies the time on or after which the client would like the enqueued operations to take visible effect (light up pixels on the screen), expressed in nanoseconds in the CLOCK_MONOTONIC timebase.

The default requested_presentation_time is 0.

Using a requested_presentation_time in the present or past (such as 0) schedules enqueued operations to take visible effect as soon as possible, during the next frame to be prepared.

Using a requested_presentation_time in the future schedules the enqueued operations to take visible effect on or as closely as possible after the stated time, but no earlier.

Each rendered frame has a target presentation time. This is when Flatland aims to have the frame presented to the user. Before rendering a frame, Flatland applies all enqueued operations associated with all squashable calls to [Present] whose requested_presentation_time is on or before the frame’s target presentation time.

§acquire_fences: Option<Vec<Event>>

Flatland will wait until all of a Flatland instance’s acquire_fences are ready before it will execute the presented commands. Not signaling acquire_fences will block the current [Present] as well as the following ones even if their acquire_fences are signaled.

The default acquire_fences value is the empty vector.

§release_fences: Option<Vec<Event>>

Flatland will signal all release_fences when it is safe to reuse resources which no longer appear in the local scene graph at the time of the current [Present]. At the latest, this will happen when the local scene graph (checkpointed at this [Present]) has been integrated into the global scene graph, and the global scene has been displayed on screen.

(Under some circumstances, the fences may be signaled earlier, but clients do not need to worry about this: the fences will only be signaled when it is safe to reuse the associated resources).

These fences are intended to manage the reuse of shared memory resources such as sysmem buffers. For example, it is undesirable for the client to render into an image which is currently displayed on screen, because this may result in graphical artifacts such as tearing.

It is up to the client to maintain the mapping between each fence and the resources which will become reusable when the fence is signaled. A common strategy is to keep track of resources which were used by the previous [Present] but are no longer used by the current [Present]. For example, if an image is removed from the scene by the current [Present], the client would insert a fence here. When the fence is later signaled, the client knows that it is safe to render into the image and insert it into the local scene graph in a subsequent [Present].

If an error occurs, Flatland may close the channel without signaling these fences. Clients may immediately release shared buffers, but they should not immediately modify such buffers, because they may still be displayed on screen. There is currently no good signal available to the client about when it is safe to reuse shared buffers.

The default release_fences value is the empty vector.

§unsquashable: Option<bool>

If unsquashable is true, then the update is guaranteed to be uniquely shown for at least one vsync interval.

If unsquashable is false, then the update can be combined with those that come after it.

If absent, unsquashable is false.

§server_wait_fences: Option<Vec<Event>>

Unused. Originally intended to be a renaming of acquire_fences, but was never hooked up.

§server_signal_fences: Option<Vec<Event>>

Unused. Originally intended to be a renaming of release_fences, but was never hooked up.

Trait Implementations§

source§

impl Debug for PresentArgs

source§

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

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

impl Decode<PresentArgs> for PresentArgs

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<'_>, offset: usize, depth: Depth ) -> Result<()>

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

impl Default for PresentArgs

source§

fn default() -> PresentArgs

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

impl Encode<PresentArgs> for &mut PresentArgs

source§

unsafe fn encode( self, encoder: &mut Encoder<'_>, 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 PresentArgs

source§

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

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl ResourceTypeMarker for PresentArgs

§

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

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 PresentArgs

§

type Owned = PresentArgs

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.
§

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
§

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 for PresentArgs

source§

impl StructuralPartialEq for PresentArgs

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
§

impl<T> Encode<Ambiguous1> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _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
§

impl<T> Encode<Ambiguous2> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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>,

§

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>,

§

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.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more