17 , QtWaylandServer::wp_presentation(*display, 1)
21void PresentationTime::wp_presentation_bind_resource(Resource *resource)
23 send_clock_id(resource->handle, CLOCK_MONOTONIC);
26void PresentationTime::wp_presentation_destroy(Resource *resource)
28 wl_resource_destroy(resource->handle);
31void PresentationTime::wp_presentation_feedback(Resource *resource, wl_resource *surface, uint32_t callback)
36 auto &feedback = surfPriv->pending->presentationFeedback;
38 feedback = std::make_unique<PresentationTimeFeedback>();
41 wl_resource *feedbackResource = wl_resource_create(resource->client(), &wp_presentation_feedback_interface, resource->version(), callback);
42 wl_resource_set_implementation(feedbackResource,
nullptr,
nullptr, [](wl_resource *resource) {
43 wl_list_remove(wl_resource_get_link(resource));
46 wl_list_insert(feedback->resources.prev, wl_resource_get_link(feedbackResource));
56 wl_resource *resource;
58 wl_resource_for_each_safe (resource, tmp, &
resources) {
59 wp_presentation_feedback_send_discarded(resource);
60 wl_resource_destroy(resource);
66 const auto secs = std::chrono::duration_cast<std::chrono::seconds>(timestamp);
67 const uint32_t tvSecHi = secs.count() >> 32;
68 const uint32_t tvSecLo = secs.count() & 0xffffffff;
69 const uint32_t tvNsec = (timestamp - secs).count();
72 const uint32_t refreshDuration = adaptiveSync ? 0 : refreshCycleDuration.count();
73 uint32_t flags = WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK | WP_PRESENTATION_FEEDBACK_KIND_HW_COMPLETION;
75 flags |= WP_PRESENTATION_FEEDBACK_KIND_VSYNC;
78 wl_resource *resource;
80 wl_resource_for_each_safe (resource, tmp, &
resources) {
81 wp_presentation_feedback_send_presented(resource, tvSecHi, tvSecLo, tvNsec, refreshDuration, 0, 0, flags);
82 wl_resource_destroy(resource);
Class holding the Wayland server display loop.
~PresentationTimeFeedback() override
PresentationTimeFeedback()
void presented(std::chrono::nanoseconds refreshCycleDuration, std::chrono::nanoseconds timestamp, PresentationMode mode) override
PresentationTime(Display *display, QObject *parent)
static SurfaceInterface * get(wl_resource *native)
static SurfaceInterfacePrivate * get(SurfaceInterface *surface)