.TH "wayland::presentation_feedback_t" 3 "Wed May 3 2023" "Version 1.0.0" "Wayland++" \" -*- nroff -*- .ad l .nh .SH NAME wayland::presentation_feedback_t \- presentation time feedback event .SH SYNOPSIS .br .PP .PP \fC#include \fP .PP Inherits \fBwayland::proxy_t\fP\&. .SS "Public Types" .in +1c .ti -1c .RI "enum class \fBwrapper_type\fP { \fBstandard\fP, \fBdisplay\fP, \fBforeign\fP, \fBproxy_wrapper\fP }" .br .in -1c .SS "Public Member Functions" .in +1c .ti -1c .RI "std::function< void(\fBoutput_t\fP)> & \fBon_sync_output\fP ()" .br .RI "presentation synchronized to this output " .ti -1c .RI "std::function< void(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, \fBpresentation_feedback_kind\fP)> & \fBon_presented\fP ()" .br .RI "the content update was displayed " .ti -1c .RI "std::function< void()> & \fBon_discarded\fP ()" .br .RI "the content update was not displayed " .ti -1c .RI "uint32_t \fBget_id\fP () const" .br .RI "Get the id of a proxy object\&. " .ti -1c .RI "std::string \fBget_class\fP () const" .br .RI "Get the interface name (class) of a proxy object\&. " .ti -1c .RI "uint32_t \fBget_version\fP () const" .br .RI "Get the protocol object version of a proxy object\&. " .ti -1c .RI "\fBwrapper_type\fP \fBget_wrapper_type\fP () const" .br .RI "Get the type of a proxy object\&. " .ti -1c .RI "void \fBset_queue\fP (\fBevent_queue_t\fP queue)" .br .RI "Assign a proxy to an event queue\&. " .ti -1c .RI "wl_proxy * \fBc_ptr\fP () const" .br .RI "Get a pointer to the underlying C struct\&. " .ti -1c .RI "bool \fBproxy_has_object\fP () const" .br .RI "Check whether this wrapper actually wraps an object\&. " .ti -1c .RI "\fBoperator bool\fP () const" .br .RI "Check whether this wrapper actually wraps an object\&. " .ti -1c .RI "bool \fBoperator==\fP (const \fBproxy_t\fP &right) const" .br .RI "Check whether two wrappers refer to the same object\&. " .ti -1c .RI "bool \fBoperator!=\fP (const \fBproxy_t\fP &right) const" .br .RI "Check whether two wrappers refer to different objects\&. " .ti -1c .RI "void \fBproxy_release\fP ()" .br .RI "Release the wrapped object (if any), making this an empty wrapper\&. " .in -1c .SH "Detailed Description" .PP presentation time feedback event A presentation_feedback object returns an indication that a wl_surface content update has become visible to the user\&. One object corresponds to one content update submission (wl_surface\&.commit)\&. There are two possible outcomes: the content update is presented to the user, and a presentation timestamp delivered; or, the user did not see the content update because it was superseded or its surface destroyed, and the content update is discarded\&. .PP Once a presentation_feedback object has delivered a 'presented' or 'discarded' event it is automatically destroyed\&. .PP Definition at line \fB187\fP of file \fBwayland\-client\-protocol\-extra\&.hpp\fP\&. .SH "Member Enumeration Documentation" .PP .SS "enum class \fBwayland::proxy_t::wrapper_type\fP\fC [strong]\fP, \fC [inherited]\fP" Underlying wl_proxy type and properties of a \fBproxy_t\fP that affect construction, destruction, and event handling .PP \fBEnumerator\fP .in +1c .TP \fB\fIstandard \fP\fP C pointer is a standard type compatible with wl_proxy*\&. Events are dispatched and it is destructed when the \fBproxy_t\fP is destructed\&. User data is set\&. .TP \fB\fIdisplay \fP\fP C pointer is a wl_display*\&. No events are dispatched, wl_display_disconnect is called when the \fBproxy_t\fP is destructed\&. User data is set\&. .TP \fB\fIforeign \fP\fP C pointer is a standard type compatible with wl_proxy*, but another library owns it and it should not be touched in a way that could affect the operation of the other library\&. No events are dispatched, wl_proxy_destroy is not called when the \fBproxy_t\fP is destructed, user data is not touched\&. Consequently, there is no reference counting for the \fBproxy_t\fP\&. Lifetime of such wrappers should preferably be short to minimize the chance that the owning library decides to destroy the wl_proxy\&. .TP \fB\fIproxy_wrapper \fP\fP C pointer is a wl_proxy* that was constructed with wl_proxy_create_wrapper\&. No events are dispatched, wl_proxy_wrapper_destroy is called when the \fBproxy_t\fP is destroyed\&. Reference counting is active\&. A reference to the \fBproxy_t\fP creating this proxy wrapper is held to extend its lifetime until after the proxy wrapper is destroyed\&. .PP Definition at line \fB115\fP of file \fBwayland\-client\&.hpp\fP\&. .SH "Member Function Documentation" .PP .SS "wl_proxy * wayland::proxy_t::c_ptr () const\fC [inherited]\fP" .PP Get a pointer to the underlying C struct\&. .PP \fBReturns\fP .RS 4 The underlying wl_proxy wrapped by this \fBproxy_t\fP if it exists, otherwise an exception is thrown .RE .PP .SS "std::string wayland::proxy_t::get_class () const\fC [inherited]\fP" .PP Get the interface name (class) of a proxy object\&. .PP \fBReturns\fP .RS 4 The interface name of the object associated with the proxy .RE .PP .SS "uint32_t wayland::proxy_t::get_id () const\fC [inherited]\fP" .PP Get the id of a proxy object\&. .PP \fBReturns\fP .RS 4 The id the object associated with the proxy .RE .PP .SS "uint32_t wayland::proxy_t::get_version () const\fC [inherited]\fP" .PP Get the protocol object version of a proxy object\&. Gets the protocol object version of a proxy object, or 0 if the proxy was created with unversioned API\&. .PP A returned value of 0 means that no version information is available, so the caller must make safe assumptions about the object's real version\&. .PP \fBdisplay_t\fP will always return version 0\&. .PP \fBReturns\fP .RS 4 The protocol object version of the proxy or 0 .RE .PP .SS "\fBwrapper_type\fP wayland::proxy_t::get_wrapper_type () const\fC [inline]\fP, \fC [inherited]\fP" .PP Get the type of a proxy object\&. .PP Definition at line \fB301\fP of file \fBwayland\-client\&.hpp\fP\&. .SS "std::function< void()> & presentation_feedback_t::on_discarded ()" .PP the content update was not displayed The content update was never displayed to the user\&. .PP Definition at line \fB804\fP of file \fBwayland\-client\-protocol\-extra\&.cpp\fP\&. .SS "std::function< void(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, \fBpresentation_feedback_kind\fP)> & presentation_feedback_t::on_presented ()" .PP the content update was displayed .PP \fBParameters\fP .RS 4 \fItv_sec_hi\fP high 32 bits of the seconds part of the presentation timestamp .br \fItv_sec_lo\fP low 32 bits of the seconds part of the presentation timestamp .br \fItv_nsec\fP nanoseconds part of the presentation timestamp .br \fIrefresh\fP nanoseconds till next refresh .br \fIseq_hi\fP high 32 bits of refresh counter .br \fIseq_lo\fP low 32 bits of refresh counter .br \fIflags\fP combination of 'kind' values .RE .PP The associated content update was displayed to the user at the indicated time (tv_sec_hi/lo, tv_nsec)\&. For the interpretation of the timestamp, see presentation\&.clock_id event\&. .PP The timestamp corresponds to the time when the content update turned into light the first time on the surface's main output\&. Compositors may approximate this from the framebuffer flip completion events from the system, and the latency of the physical display path if known\&. .PP This event is preceded by all related sync_output events telling which output's refresh cycle the feedback corresponds to, i\&.e\&. the main output for the surface\&. Compositors are recommended to choose the output containing the largest part of the wl_surface, or keeping the output they previously chose\&. Having a stable presentation output association helps clients predict future output refreshes (vblank)\&. .PP The 'refresh' argument gives the compositor's prediction of how many nanoseconds after tv_sec, tv_nsec the very next output refresh may occur\&. This is to further aid clients in predicting future refreshes, i\&.e\&., estimating the timestamps targeting the next few vblanks\&. If such prediction cannot usefully be done, the argument is zero\&. .PP If the output does not have a constant refresh rate, explicit video mode switches excluded, then the refresh argument must be zero\&. .PP The 64-bit value combined from seq_hi and seq_lo is the value of the output's vertical retrace counter when the content update was first scanned out to the display\&. This value must be compatible with the definition of MSC in GLX_OML_sync_control specification\&. Note, that if the display path has a non-zero latency, the time instant specified by this counter may differ from the timestamp's\&. .PP If the output does not have a concept of vertical retrace or a refresh cycle, or the output device is self-refreshing without a way to query the refresh count, then the arguments seq_hi and seq_lo must be zero\&. .PP Definition at line \fB799\fP of file \fBwayland\-client\-protocol\-extra\&.cpp\fP\&. .SS "std::function< void(\fBoutput_t\fP)> & presentation_feedback_t::on_sync_output ()" .PP presentation synchronized to this output .PP \fBParameters\fP .RS 4 \fIoutput\fP presentation output .RE .PP As presentation can be synchronized to only one output at a time, this event tells which output it was\&. This event is only sent prior to the presented event\&. .PP As clients may bind to the same global wl_output multiple times, this event is sent for each bound instance that matches the synchronized output\&. If a client has not bound to the right wl_output global at all, this event is not sent\&. .PP Definition at line \fB794\fP of file \fBwayland\-client\-protocol\-extra\&.cpp\fP\&. .SS "wayland::proxy_t::operator bool () const\fC [inherited]\fP" .PP Check whether this wrapper actually wraps an object\&. .PP \fBReturns\fP .RS 4 true if there is an underlying object, false if this wrapper is empty .RE .PP .SS "bool wayland::proxy_t::operator!= (const \fBproxy_t\fP & right) const\fC [inherited]\fP" .PP Check whether two wrappers refer to different objects\&. .SS "bool wayland::proxy_t::operator== (const \fBproxy_t\fP & right) const\fC [inherited]\fP" .PP Check whether two wrappers refer to the same object\&. .SS "bool wayland::proxy_t::proxy_has_object () const\fC [inherited]\fP" .PP Check whether this wrapper actually wraps an object\&. .PP \fBReturns\fP .RS 4 true if there is an underlying object, false if this wrapper is empty .RE .PP .SS "void wayland::proxy_t::proxy_release ()\fC [inherited]\fP" .PP Release the wrapped object (if any), making this an empty wrapper\&. Note that \fBdisplay_t\fP instances cannot be released this way\&. Attempts to do so are ignored\&. .PP \fBExamples\fP .in +1c \fBforeign_display\&.cpp\fP\&. .SS "void wayland::proxy_t::set_queue (\fBevent_queue_t\fP queue)\fC [inherited]\fP" .PP Assign a proxy to an event queue\&. .PP \fBParameters\fP .RS 4 \fIqueue\fP The event queue that will handle this proxy .RE .PP Assign proxy to event queue\&. Events coming from proxy will be queued in queue instead of the display's main queue\&. .PP See also: \fBdisplay_t::dispatch_queue()\fP\&. .PP \fBExamples\fP .in +1c \fBproxy_wrapper\&.cpp\fP\&. .SH "Author" .PP Generated automatically by Doxygen for Wayland++ from the source code\&.