Bounds pending UI submissions while retaining only the most recent input request.
More...
#include "donner/editor/gui/EditorWindow.h"
|
| struct | Fence |
| | One submitted UI frame: the GPU serial that retires it and the input it presented. More...
|
| struct | CompletionObservation |
| | Serial and clock read after a bounded GPU completion confirmation. More...
|
|
| enum class | Admission {
Ready
,
Busy
,
TimedOut
} |
| | Whether another UI frame may be submitted. More...
|
|
using | Clock = std::chrono::steady_clock |
| | Clock that times pending submissions.
|
|
| Admission | observe (std::uint64_t completedSerial, Clock::time_point now, std::optional< Clock::time_point > lastProgress=std::nullopt) |
| | Observe completion before admitting a frame; a stopped queue reaches a finite deadline.
|
template<typename CompletionProbe>
requires std::invocable<CompletionProbe&> |
| Admission | observe (std::uint64_t completedSerial, Clock::time_point now, CompletionProbe &&confirmCompletion) |
| | Recheck an expired submission using a bounded completion query.
|
|
void | submitted (Fence fence) |
| | Seal the serial and input that reached the GPU as one UI frame.
|
|
std::size_t | pendingCount () const |
| | Number of submitted frames whose GPU work has not been observed complete.
|
|
Fence | completed () const |
| | Most recently retired frame, or a default fence before any frame retires.
|
|
std::uint64_t | oldestSerial () const |
| | Serial of the oldest pending frame, or zero when none is pending.
|
|
std::chrono::milliseconds | oldestAge (Clock::time_point now) const |
| | Elapsed time of the oldest unfinished frame without restarting its submission clock.
|
|
|
static constexpr std::chrono::seconds | kCompletionDeadline {5} |
| | How long the oldest pending submission may stay unfinished while the device makes no progress.
|
|
| std::ostream & | operator<< (std::ostream &os, Admission admission) |
| | Ostream output operator, e.g. Busy.
|
Bounds pending UI submissions while retaining only the most recent input request.
◆ donner::editor::gui::internal::PresentationSubmissionQueue::Fence
| struct donner::editor::gui::internal::PresentationSubmissionQueue::Fence |
One submitted UI frame: the GPU serial that retires it and the input it presented.
| Class Members |
|
uint64_t |
captureId = 0 |
Raster capture paired with the frame. |
|
uint64_t |
frameId = 0 |
Presentation frame identity. |
|
bool |
inputRepresented = false |
Whether the frame represents the input sealed with it; cleared when the full frame was not presented. |
|
bool |
mouseDown = false |
Whether the primary button was down when sealed. |
|
double |
pointerX = 0.0 |
Pointer x position when the frame was sealed. |
|
double |
pointerY = 0.0 |
Pointer y position when the frame was sealed. |
|
uint64_t |
serial = 0 |
Last GPU submission serial of the frame. |
|
time_point |
submittedAt |
When the frame's work was submitted. |
|
double |
viewportZoom = 0.0 |
Viewport zoom the frame was drawn with. |
◆ donner::editor::gui::internal::PresentationSubmissionQueue::CompletionObservation
| struct donner::editor::gui::internal::PresentationSubmissionQueue::CompletionObservation |
Serial and clock read after a bounded GPU completion confirmation.
| Class Members |
|
time_point |
observedAt |
When the completion was observed. |
|
uint64_t |
serial |
Highest completed submission serial observed. |
◆ Admission
Whether another UI frame may be submitted.
| Enumerator |
|---|
| Ready | Fewer than three submissions are pending and none has timed out.
|
| Busy | At least three submissions are pending and none has timed out. The oldest pending submission has waited at least kCompletionDeadline, and the work it waits behind has made no progress for that long either.
|
◆ observe()
| Admission donner::editor::gui::internal::PresentationSubmissionQueue::observe |
( |
std::uint64_t | completedSerial, |
|
|
Clock::time_point | now, |
|
|
std::optional< Clock::time_point > | lastProgress = std::nullopt ) |
|
inline |
Observe completion before admitting a frame; a stopped queue reaches a finite deadline.
A frame's work completes only after everything queued ahead of it, so an old frame behind a device that is still finishing work is slow, not stopped: it times out only once the device has also made no progress for kCompletionDeadline.
- Parameters
-
| completedSerial | Highest submission serial the device has completed. |
| now | Current time. |
| lastProgress | When the device last made progress, or nothing when it does not track progress, in which case the oldest frame's age alone reaches the deadline. |
◆ operator<<
| std::ostream & operator<< |
( |
std::ostream & | os, |
|
|
Admission | admission ) |
|
friend |
Ostream output operator, e.g. Busy.
- Parameters
-
| os | Output stream. |
| admission | Value to output. |
The documentation for this class was generated from the following file: