class BufferCollectionConstraints
Defined at line 14250 of file fidling/gen/sdk/fidl/fuchsia.sysmem2/fuchsia.sysmem2/cpp/fidl/fuchsia.sysmem2/cpp/wire_types.h
Constraints on allocated buffers and, optionally, constraints on images
stored in the buffers. These constraints can be specified per-participant.
The sysmem service implements aggregation of constraints from multiple
participants.
Public Methods
void BufferCollectionConstraints ()
Defined at line 14252 of file fidling/gen/sdk/fidl/fuchsia.sysmem2/fuchsia.sysmem2/cpp/fidl/fuchsia.sysmem2/cpp/wire_types.h
void BufferCollectionConstraints (const BufferCollectionConstraints & other)
Defined at line 14253 of file fidling/gen/sdk/fidl/fuchsia.sysmem2/fuchsia.sysmem2/cpp/fidl/fuchsia.sysmem2/cpp/wire_types.h
void BufferCollectionConstraints (BufferCollectionConstraints && other)
Defined at line 14255 of file fidling/gen/sdk/fidl/fuchsia.sysmem2/fuchsia.sysmem2/cpp/fidl/fuchsia.sysmem2/cpp/wire_types.h
bool IsEmpty ()
Returns whether no field is set.
bool HasUnknownData ()
Returns whether the table references unknown fields.
::fidl::WireTableBuilder< ::fuchsia_sysmem2::wire::BufferCollectionConstraints> Builder (::fidl::AnyArena & arena)
Return a builder that by defaults allocates of an arena.
::fidl::WireTableExternalBuilder< ::fuchsia_sysmem2::wire::BufferCollectionConstraints> ExternalBuilder (::fidl::ObjectView< ::fidl::WireTableFrame< ::fuchsia_sysmem2::wire::BufferCollectionConstraints>> frame)
Return a builder that relies on explicitly allocating |fidl::ObjectView|s.
::fuchsia_sysmem2::wire::BufferUsage & usage ()
The `usage` is a hint to sysmem to potentially help choose a more
optimal [`fuchsia.images2/PixelFormat`] and/or `pixel_format_modifier`
when multiple compatible options exist.
When aggregating [`fuchsia.sysmem2/BufferCollectionConstraints`], these
values bitwise-OR.
At least one `usage` bit must be specified (however, it's permitted for
a [`fuchsia.sysmem2/BufferCollection.SetConstraints`] request to have
the request `constraints` field not set, in which case `kNoneUsage` is
the default, along with no constraints from the participant).
When `kNoneUsage` is specified it must be the only set bit, and no VMOs
will be sent in response to
[`fuchsia.sysmem2/BufferCollection.WaitForAllBuffersAllocated`].
bool has_usage ()
uint32_t & min_buffer_count_for_camping ()
Per-participant number of buffers that the participant may concurrently
hold for its exclusive use for more than a transient duration (camp on).
In this context, a "transient" duration is the time it takes to finish
running a small amount of non-blocking code that finishes transfering
away ownership of the buffer. Things like reading from storage, waiting
on hardware that isn't already known to be done, or doing things like
frame encode or decode are not considered transient durations, even if
they might sometimes complete quickly.
For example, a video decoder would specify (at least) the maximum number
of reference frames + 1 frame currently being decoded into. But not 1
more for the code that runs async and quickly to deliver a previously
decoded frame, even though that frame can potentially be owned for a
transient duration concurrent with decode of the next frame.
A participant must not camp on more buffers than specified here (except
for a transient duration) else processing may get stuck.
When aggregating BufferCollectionConstraints, these values add.
In testing scenarios, camping on more buffers than this for any
significant duration (one screen refresh period is "significant" in this
context) may (ideally will) be flagged as a failure. In testing
scenarios, the participant may not be provided with more buffers than
this concurrently.
bool has_min_buffer_count_for_camping ()
uint32_t & min_buffer_count_for_dedicated_slack ()
Per-participant minimum number of buffers that are needed for slack
reasons, for better overlap of processing / better performance.
When aggregating `BufferCollectionConstraints`, these values add.
A participant should typically specify 0 or 1 here - typically 0 is
appropriate if `min_buffer_count_for_camping` is already enough to keep
the participant busy 100% of the time when the participant is slightly
behind, while 1 can be appropriate if 1 more buffer than strictly needed
for min-camping reasons gives enough slack to stay busy 100% of the time
(when slightly behind, vs. lower % without the extra buffer).
In testing scenarios, this field may be forced to 0, and all
participants are expected to continue to work without getting stuck. If
a buffer is needed for forward progress reasons, that buffer should be
accounted for in `min_buffer_count_for_camping`.
bool has_min_buffer_count_for_dedicated_slack ()
uint32_t & min_buffer_count_for_shared_slack ()
Similar to `min_buffer_count_for_dedicated_slack`, except when
aggregating these values max (instead of add). The value here is not
shared with any participant's `min_buffer_count_for_dedicated_slack`.
A participant can specify > 0 here if a participant would like to ensure
there's some slack overall, but doesn't need that slack to be dedicated.
The choice whether to use `min_buffer_count_for_dedicated_slack` or
`min_buffer_count_for_shared_slack` (or both) will typically be about
the degree to which the extra slack improves performance.
In testing scenarios, this field may be forced to 0, and all
participants are expected to continue to work without getting stuck. If
a buffer is needed for forward progress reasons, that buffer should be
accounted for in `min_buffer_count_for_camping`.
bool has_min_buffer_count_for_shared_slack ()
uint32_t & min_buffer_count ()
A particularly-picky participant may unfortunately need to demand a
tight range of `buffer_count`, or even a specific `buffer_count`. This
field should remain 0 unless a participant really must set this field to
constrain the overall `BufferCollectionInfo.buffer_count`. Any such
participant should still fill out the min_buffer_count_for_* fields as
appropriate.
If this field is un-set, the logical `min_buffer_count` is 0.
bool has_min_buffer_count ()
uint32_t & max_buffer_count ()
A particularly-picky participant may unfortunately need to demand a
tight range of `buffer_count`, or even a specific `buffer_count`. This
field should remain 0 unless a participant really must set this field to
constrain the overall `BufferCollectionInfo.buffer_count`. Any such
participant should still fill out the min_buffer_count_for_* fields.
If this field is un-set, the logical `max_buffer_count` is 0xFFFFFFFF.
bool has_max_buffer_count ()
::fuchsia_sysmem2::wire::BufferMemoryConstraints & buffer_memory_constraints ()
Optional constraints on `BufferCollectionSettings.buffer_settings`.
A participant that intends to set `image_format_constraints` will
typically specify the minimum buffer size implicitly via
`image_format_constraints`, and possibly specify only the max buffer
size via `buffer_memory_constraints`.
If un-set, the client is specifying "don't care" re. any buffer memory
constraints.
bool has_buffer_memory_constraints ()
::fidl::VectorView< ::fuchsia_sysmem2::wire::ImageFormatConstraints> & image_format_constraints ()
Optional constraints on the image format parameters of an image stored
in a buffer of the collection. This includes
[`fuchsia.images2/PixelFormat`] and `pixel_format_modifier` (for tiling
and the like). These constraints can be specified separately per
`pixel_format` `pixel_format_modifier` pair. Duplicated `pixel_format`
`pixel_format_modifier` pairs aren't permitted.
When aggregating, only `pixel_format` `pixel_format_modifier` pairs that
are specified by all participants with non-zero
`image_format_constraints` size (and non-null)
BufferCollectionConstraints) are retained.
A participant can specify `pixel_format`
[`fuchsia.images2/PixelFormat.DO_NOT_CARE`] and/or
`pixel_format_modifier`
[`fuchsia.images2/PixelFormatModifier.DO_NOT_CARE`] to permit any value
to be selected, but at least one participant must specify a specific
format for overall allocation to succeed.
In a SetConstraints message, un-set or zero length means no image format
constraints; a raw buffer can be allocated if no other participants
specify any `image_format_constraints` entries.
bool has_image_format_constraints ()
BufferCollectionConstraints & set_usage (::fidl::ObjectView< ::fuchsia_sysmem2::wire::BufferUsage> elem)
BufferCollectionConstraints & set_usage (std::nullptr_t )
BufferCollectionConstraints & clear_usage ()
BufferCollectionConstraints & set_min_buffer_count_for_camping (uint32_t elem)
BufferCollectionConstraints & clear_min_buffer_count_for_camping ()
BufferCollectionConstraints & set_min_buffer_count_for_dedicated_slack (uint32_t elem)
BufferCollectionConstraints & clear_min_buffer_count_for_dedicated_slack ()
BufferCollectionConstraints & set_min_buffer_count_for_shared_slack (uint32_t elem)
BufferCollectionConstraints & clear_min_buffer_count_for_shared_slack ()
BufferCollectionConstraints & set_min_buffer_count (uint32_t elem)
BufferCollectionConstraints & clear_min_buffer_count ()
BufferCollectionConstraints & set_max_buffer_count (uint32_t elem)
BufferCollectionConstraints & clear_max_buffer_count ()
BufferCollectionConstraints & set_buffer_memory_constraints (::fidl::ObjectView< ::fuchsia_sysmem2::wire::BufferMemoryConstraints> elem)
BufferCollectionConstraints & set_buffer_memory_constraints (std::nullptr_t )
BufferCollectionConstraints & clear_buffer_memory_constraints ()
BufferCollectionConstraints & set_image_format_constraints (::fidl::ObjectView< ::fidl::VectorView< ::fuchsia_sysmem2::wire::ImageFormatConstraints>> elem)
BufferCollectionConstraints & set_image_format_constraints (std::nullptr_t )
BufferCollectionConstraints & clear_image_format_constraints ()
void BufferCollectionConstraints (::fidl::AnyArena & allocator)
void BufferCollectionConstraints (::fidl::ObjectView< ::fidl::WireTableFrame< ::fuchsia_sysmem2::wire::BufferCollectionConstraints>> && frame)
This constructor allows a user controlled allocation (not using a Arena).
It should only be used when performance is key.
As soon as the frame is given to the table, it must not be used directly or for another table.
void Allocate (::fidl::AnyArena & allocator)
void Init (::fidl::ObjectView< ::fidl::WireTableFrame< ::fuchsia_sysmem2::wire::BufferCollectionConstraints>> && frame_ptr)
BufferCollectionConstraints & operator= (const BufferCollectionConstraints & other)
Defined at line 14254 of file fidling/gen/sdk/fidl/fuchsia.sysmem2/fuchsia.sysmem2/cpp/fidl/fuchsia.sysmem2/cpp/wire_types.h
BufferCollectionConstraints & operator= (BufferCollectionConstraints && other)
Defined at line 14256 of file fidling/gen/sdk/fidl/fuchsia.sysmem2/fuchsia.sysmem2/cpp/fidl/fuchsia.sysmem2/cpp/wire_types.h
void ~BufferCollectionConstraints ()
Defined at line 14258 of file fidling/gen/sdk/fidl/fuchsia.sysmem2/fuchsia.sysmem2/cpp/fidl/fuchsia.sysmem2/cpp/wire_types.h
Friends
class WireTableBaseBuilder
class WireTableBaseBuilder