Patch | Description | Author | Forwarded | Bugs | Origin | Last update |
---|---|---|---|---|---|---|
tests-Reinstate-meta_test_get_plugin_name.patch | tests: Reinstate meta_test_get_plugin_name() Another package could conceivably have been relying on this. This partially reverts commit 2a5ad7cb5196e9bdda9c747f8bd881b95b74a8b4. |
Simon McVittie <smcv@debian.org> | no | 2023-08-17 | ||
tests-Break-up-stacking-installed-tests-into-more-smaller.patch | tests: Break up stacking installed-tests into more, smaller tests Running each stacking test as a separate installed-test is analogous to what was done for build-time tests in c6d1cf4a (!442) and should make it easier to track regressions, by being able to see whether a regression is specific to one .metatest script or applies to more than one. An accidental side-effect of this is that state is not carried over between one test and the next, which makes the workspace-basic test stop crashing (see #2559). (If the same issue can happen in real life, the previous patch mitigates it from a crash to a critical warning.) Accidentally mitigates: https://gitlab.gnome.org/GNOME/mutter/-/issues/2559 Accidentally mitigates: https://bugs.debian.org/1024438 |
Simon McVittie <smcv@debian.org> | yes | 2022-12-18 | ||
tests-Use-a-more-interoperable-path-to-bash.patch | tests: Use a more interoperable path to bash On systems that have undergone the /usr merge, /bin/bash and /usr/bin/bash can be used interchangeably, but on systems where /bin and /usr/bin are separate (such as Debian 11 or older), bash was traditionally in /bin and there is no bash in /usr/bin. |
Simon McVittie <smcv@debian.org> | yes | upstream | 2023-03-06 | |
meson-add-back-default_driver-option.patch | meson: add back default_driver option In autotools it was possible to pass the --with-default-driver option to force the usage of a specific cogl driver at build time. Expose this functionality in meson as well |
=?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | invalid | https://gitlab.gnome.org/GNOME/mutter/merge_requests/392 | 2019-01-16 | |
tests-Mark-view-verification-tests-as-incomplete-in-big-e.patch | tests: Mark view-verification tests as incomplete in big-endian archs Saved pixmaps are invalid in big-endian architectures, so let's disable the tests for now, checking only the basic metadata but not comparing the contents. |
=?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | yes | upstream | 2021-06-15 | |
theme-load-icons-as-Gtk-does-with-fallback-and-RTL-suppor.patch | theme: load icons as Gtk does with fallback and RTL support | =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | invalid | 2018-03-30 | ||
theme-use-gtk_render_icon_suface-to-paint-button-icon.patch | theme: use gtk_render_icon_suface to paint button icon This will properly take care of the icon transformations and of the shadow. Fixes #100 |
=?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | invalid | upstream | 2018-03-30 | |
debian/backends-native-kms-crtc-Don-t-compare-gamma-values-on-un.patch | backends/native/kms-crtc: Don't compare gamma values on unitialized memory On hotplugs, to check if we had a gamma change we compare the gamma states values, and we assumed that the gamma pointers were initialized by KMS, however drmModeCrtcGetGamma may not set those values, leaving the gamma values not initialized. And this may lead meta_kms_crtc_state_changes() to return wrong values. |
=?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | no | https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2371 | 2022-04-12 | |
debian/meson-Do-not-mark-CI-test-tools-as-required.patch | meson: Do not mark CI test tools as required This way we can mark them as nocheck without build issues. |
=?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | no | 2022-02-18 | ||
debian/tests-Do-not-run-screencast-tests.patch | tests: Do not run screencast tests They require to have a full running pipewire (that requires a system dbus daemon) so, we can't easily get one up and running while building. So let's disable this for now |
=?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | no | 2021-05-20 | ||
debian/tests-skip-monitor-width-size-check-as-it-may-lead-to-une.patch | tests: skip monitor width size check as it may lead to unexpected failure This seems to be broken only on autopkg-tests. |
=?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | not-needed | 2022-03-14 | ||
debian/tests-Tag-unstable-tests-as-flaky.patch | tests: Tag unstable tests as flaky Then test runners can run these ones non-fatally. This is Debian-only: for upstream these tests should be fixed. |
Iain Lane <iainl@gnome.org> | not-needed | 2019-08-14 | ||
debian/wayland-data-device-Allow-any-drag-timestamp-as-drag-star.patch | wayland-data-device: Allow any drag timestamp as drag start serial In some scenarios under wayland DnD may not work because the start-drag serial is not matching the one we expect for the pointer that we set when handling the button event. This is because since commit 26676a82 we're repeatedly pinging the windows at each event to ensure that they're still alive, but we're using the event timestamp for that, and this makes wayland to use such value as the start-drag serial. To avoid this, let's keep track of all the grab timestamps we got while dragging and accept a serial to match any of these. |
=?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net> | yes | upstream | 2022-04-06 | |
triple-buffering/onscreen-native-Tidy-up-secondary-GPU-buffer-tracking.patch | onscreen/native: Tidy up secondary GPU buffer tracking The primary plane of a CRTC can only have one `current_fb` and therefore only one `next_fb`, so don't confuse the situation by maintaining two of each. In the past a single onscreen targeted multiple CRTCs meaning separate tracking was necessary, but not anymore. If we're using `COPY_MODE_ZERO` then the `imported_buffer` will reference the importee internally. We don't need to keep a redundant reference to the old buffer after importation. If we're using `COPY_MODE_PRIMARY` or `COPY_MODE_SECONDARY_GPU` then we only need to keep the final copy for the duration of scanout. All of that happens before the flip so only one `next_fb` needs to live on after the flip. And if there's only one `next_fb` then there's only one `current_fb`. In a related cleanup we now also ensure that `onscreen_native->gbm.next_fb` is only assigned once per frame. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-11-10 | |
triple-buffering/onscreen-native-Hold-primary-GPU-FBs-for-the-secondary-sc.patch | onscreen/native: Hold primary GPU FBs for the secondary scanout lifetime This is out of an abundance of caution. In cases where we have copied the primary GPU's buffer to a dumb buffer for secondary GPU (DisplayLink) scanout, we don't really know how long OpenGL will take to complete that copy in the background. And there is no swap buffers or locking of the secondary GPU front buffer to guarantee when. So to avoid needing `glFinish` or similar we now reference the original source FB for the scanout lifetime of the secondary (dumb) buffer. This is effectively identical to the pre-!2087 behaviour. Although it's not theoretically optimal because the primary GPU FB is not needed after scanout starts (`next_fb` is moved to `current_fb`), this approach does give us the simplicity of only having to track the lifetime of a single buffer after it is flipped. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-01-19 | |
triple-buffering/kms-update-Hold-a-reference-to-the-buffer-used-in-a-plane.patch | kms/update: Hold a reference to the buffer used in a plane assignment | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-16 | |
triple-buffering/kms-crtc-Add-an-API-to-hold-references-to-buffers-while-a.patch | kms/crtc: Add an API to hold references to buffers while asssigned to planes | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-16 | |
triple-buffering/kms-page-flip-Pump-the-CRTC-s-buffer-reference-queue-on-s.patch | kms/page-flip: Pump the CRTC's buffer reference queue on scanout Precise timing of this call is not important. We only need to notify that the *previous* scanout is definitely no longer happening. So any old buffers no longer used in the latest scanout can be released. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-17 | |
triple-buffering/kms-impl-device-Release-buffers-from-MetaKmsCrtc-in-prepa.patch | kms/impl-device: Release buffers from MetaKmsCrtc in prepare_shutdown This allows them to release their buffers cleanly while all the associated resources to do the release still exist. Otherwise we might crash later in meta_drm_buffer_finalize. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-02-09 | |
triple-buffering/kms-impl-device-simple-Pump-the-CRTC-s-buffer-reference-q.patch | kms/impl-device/simple: Pump the CRTC's buffer reference queue on scanout In this case "on scanout" means when `drmModeSetCrtc` succeeds. This is the only case where there won't be a `meta_kms_page_flip_data_flipped` to do it for us. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-12-07 | |
triple-buffering/kms-impl-device-simple-Keep-a-reference-to-buffers-assign.patch | kms/impl-device/simple: Keep a reference to buffers assigned to planes The MetaKmsCrtc will hold these references during future scanouts until such time as a new buffer is assigned to the plane AND another scanout has occurred after that. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-17 | |
triple-buffering/kms-impl-device-simple-Keep-a-reference-to-buffers-needed.patch | kms/impl-device/simple: Keep a reference to buffers needed in retries | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-12-07 | |
triple-buffering/kms-impl-device-atomic-Keep-a-reference-to-buffers-assign.patch | kms/impl-device/atomic: Keep a reference to buffers assigned to planes The MetaKmsCrtc will hold these references during future scanouts until such time as a new buffer is assigned to the plane AND another scanout has occurred after that. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-17 | |
triple-buffering/onscreen-native-Stop-holding-the-current-onscreen-buffer.patch | onscreen/native: Stop holding the current onscreen buffer The scanout lifetime of the buffer is now automatically managed via meta_crtc_kms_assign_primary_plane. Se we don't need `current_fb` at all, and `next_fb` can be unreferenced as soon as we've passed it to meta_crtc_kms_assign_primary_plane. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-18 | |
triple-buffering/onscreen-native-Keep-the-onscreen-alive-longer-than-MetaD.patch | onscreen/native: Keep the onscreen alive longer than `MetaDrmBufferGbm` Because `MetaDrmBufferGbm` uses `gbm_surface` in its destructor and `gbm_surface` can't be refcounted directly. So we reference its owner (the onscreen) instead. This avoids a crash that can otherwise occur when hotplugging monitors as the old onscreen might get disposed before the new onscreen has presented a replacement frame on the same `MetaKmsCrtc`. We could instead wrap and refcount all users of `gbm_surface`, but that would be a lot more work for no additional benefit right now. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-24 | |
triple-buffering/cursor-renderer-native-Stop-holding-onto-historical-curso.patch | cursor-renderer/native: Stop holding onto historical cursor buffers Their scanout lifetimes are now managed automatically via the call to meta_kms_update_assign_plane. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-18 | |
triple-buffering/cursor-renderer-native-Remove-MetaCursorBufferState.patch | cursor-renderer/native: Remove MetaCursorBufferState It was theoretically useful for flagging when a NULL buffer had been SET, but in practice set_cursor_sprite_buffer is never called when the buffer is NULL. So we can instead just compare the buffer with NULL to tell when it is valid. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-18 | |
triple-buffering/cogl-onscreen-Add-function-cogl_onscreen_count_pending_fr.patch | cogl/onscreen: Add function cogl_onscreen_count_pending_frames | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-17 | |
triple-buffering/kms-Keep-a-shutting_down-flag.patch | kms: Keep a shutting_down flag | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-04-20 | |
triple-buffering/renderer-native-Avoid-requeuing-the-same-onscreen-for-a-p.patch | renderer/native: Avoid requeuing the same onscreen for a power save flip This is a case that triple buffering will encounter. We don't want it to queue the same onscreen multiple times because that would represent multiple flips occurring simultaneously. It's a linear search but the list length is typically only 1 or 2 so no need for anything fancier yet. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-10-26 | |
triple-buffering/renderer-native-Steal-the-power-save-flip-list-before-ite.patch | renderer/native: Steal the power save flip list before iterating over it Because a single iteration might also grow the list again. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-11-01 | |
triple-buffering/onscreen-native-Log-swapbuffers-and-N-buffering-when-MUTT.patch | onscreen/native: Log swapbuffers and N-buffering when MUTTER_DEBUG=kms | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-12-10 | |
triple-buffering/onscreen-native-Replace-an-assertion-that-double-bufferin.patch | onscreen/native: Replace an assertion that double buffering is the maximum Because it soon won't be the maximum. But we do want to verify that the frame info queue is not empty, to avoid NULL dereferencing and catch logic errors. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-07-28 | |
triple-buffering/onscreen-native-Deduplicate-calls-to-clutter_frame_set_re.patch | onscreen/native: Deduplicate calls to clutter_frame_set_result All paths out of `meta_onscreen_native_swap_buffers_with_damage` from here onward would set the same `CLUTTER_FRAME_RESULT_PENDING_PRESENTED` (or terminate with `g_assert_not_reached`). Even failed posts set this result because they will do a `meta_onscreen_native_notify_frame_complete` in `page_flip_feedback_discarded`. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-16 | |
triple-buffering/onscreen-native-Split-swap_buffers_with_damage-into-two-f.patch | onscreen/native: Split swap_buffers_with_damage into two functions 1. The EGL part: meta_onscreen_native_swap_buffers_with_damage 2. The KMS part: post_latest_swap |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-07-28 | |
triple-buffering/onscreen-native-Warn-instead-of-crashing-if-posting-witho.patch | onscreen/native: Warn instead of crashing if posting without an update | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-12 | |
triple-buffering/onscreen-native-Add-a-missing-frame-notification.patch | onscreen/native: Add a missing frame notification In the unlikely event that swap_buffers_with_damage drops the previous swap it was forgetting to notify about the discarded frame. That could lead to frame clock freezes. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-10-28 | |
triple-buffering/onscreen-native-Defer-posting-if-there-s-already-a-post-i.patch | onscreen/native: Defer posting if there's already a post in progress And when the number of pending posts decreases we know it's safe to submit a new one. Since KMS generally only supports one outstanding post right now, "decreases" means equal to zero. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-17 | |
triple-buffering/onscreen-native-Keep-a-reference-to-the-CRTC-used.patch | onscreen/native: Keep a reference to the CRTC used Otherwise it may get destroyed during hotplug events. Meanwhile we're still active and might try using it in the next/final frame notification callbacks. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-11-02 | |
triple-buffering/onscreen-native-Add-function-meta_onscreen_native_discard.patch | onscreen/native: Add function meta_onscreen_native_discard_pending_swaps | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-11-04 | |
triple-buffering/onscreen-native-Skip-try_post_latest_swap-if-shutting-dow.patch | onscreen/native: Skip try_post_latest_swap if shutting down Otherwise we could get: meta_kms_prepare_shutdown -> flush_callbacks -> ... -> try_post_latest_swap -> post and queue more callbacks So later in shutdown those callbacks would trigger an assertion failure in meta_kms_impl_device_atomic_finalize: g_hash_table_size (impl_device_atomic->page_flip_datas) == 0 Also remember to discard_pending_swaps to break the circular reference between MetaOnscreenNative and its next_fb caused by the association "gbm_surface owner". Or else that would trigger another assertion failure: meta_device_pool_finalize: runtime check failed: (!pool->files) |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-05-11 | |
triple-buffering/renderer-native-Discard-pending-swaps-when-rebuilding-vie.patch | renderer/native: Discard pending swaps when rebuilding views It's analogous to discard_pending_page_flips but represents swaps that might become flips after the next frame notification callbacks, thanks to triple buffering. Since the views are being rebuilt and their onscreens are about to be destroyed, turning those swaps into more flips/posts would just lead to unexpected behaviour (like trying to flip on a half-destroyed inactive CRTC). |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-11-04 | |
triple-buffering/clutter-frame-clock-Lower-the-threshold-for-disabling-err.patch | clutter/frame-clock: Lower the threshold for disabling error diffusion Error diffusion was introduced in 0555a5bbc15 for Nvidia where last presentation time is always unknown (zero). Dispatch times would drift apart always being a fraction of a frame late, and accumulated to cause periodic frame skips. So error diffusion corrected that precisely and avoided the skips. That works great with double buffering but less great with triple buffering. It's certainly still needed with triple buffering but correcting for a lateness of many milliseconds isn't a good idea. That's because a dispatch being that late is not due to main loop jitter but due to Nvidia's swap buffers blocking when the queue is full. So scheduling the next frame even earlier using last_dispatch_lateness_us would just perpetuate the problem of swap buffers blocking for too long. So now we lower the threshold of when error diffusion gets disabled. It's still high enough to fix the original smoothness problem it was for, but now low enough to detect Nvidia's occasionally blocking swaps and backs off in that case. Since the average duration of a blocking swap is half a frame interval and we want to distinguish between that and sub-millisecond jitter, the logical threshold is halfway again: refresh_interval_us/4. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-08-10 | |
triple-buffering/clutter-frame-clock-Merge-states-DISPATCHING-and-PENDING_.patch | clutter/frame-clock: Merge states DISPATCHING and PENDING_PRESENTED Chronologically they already overlap in time as presentation may complete in the middle of the dispatch function, otherwise they are contiguous in time. And most switch statements treated the two states the same already so they're easy to merge into a single `DISPATCHED` state. Having fewer states now will make life easier when we add more states later. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2020-07-24 | |
triple-buffering/clutter-frame-clock-Add-triple-buffering-support.patch | clutter/frame-clock: Add triple buffering support | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2020-09-10 | |
triple-buffering/clutter-frame-clock-Log-N-buffers-in-CLUTTTER_DEBUG-frame.patch | clutter/frame-clock: Log N-buffers in CLUTTTER_DEBUG=frame-timings | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-12-10 | |
triple-buffering/clutter-frame-clock-Don-t-clamp-compute_max_render_time_u.patch | clutter/frame-clock: Don't clamp compute_max_render_time_us Because values over refresh_interval_us are real and valid. They tell us when we're not keeping up. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-12-13 | |
triple-buffering/clutter-frame-clock-Subtract-buffer-queue-latency-from-ma.patch | clutter/frame-clock: Subtract buffer queue latency from max_swap_to_flip_us swap_to_flip times were getting stuck at over one frame interval because of a positive feedback loop with triple buffering. The moment triple buffering started it would cause swap_to_flip times to exceed one frame interval. Then that high value would feed back through max_render_time which in turn ensured triple buffering continued which ensured swap_to_flip stayed over one frame interval. So even when actual GPU render times became low we were stuck with a high value of max_render_time and stuck in triple buffering when we should have switched to double buffering. By subtracting the constant buffer queue latency from max_swap_to_flip_us we break this positive feedback loop and only include real performance measurements. So now the frame clock is able to drop back to double buffering when appropriate. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-02-17 | |
triple-buffering/clutter-frame-Add-ClutterFrameHint-to-ClutterFrame.patch | clutter/frame: Add ClutterFrameHint to ClutterFrame This will allow the backend to provide performance hints to the frame clock in future. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-07 | |
triple-buffering/backends-Flag-that-the-frame-attempted-direct-scanout.patch | backends: Flag that the frame attempted direct scanout We need this hint whether direct scanout succeeds or fails because it's the mechanism by which we will tell the clock to enforce double buffering, thus making direct scanout possible on future frames. Triple buffering will be disabled until such time that direct scanout is not being attempted. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-07 | |
triple-buffering/clutter-Pass-ClutterFrameHint-s-to-the-frame-clock.patch | clutter: Pass ClutterFrameHint(s) to the frame clock | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-07 | |
triple-buffering/clutter-frame-clock-Throttle-back-to-double-buffering-for.patch | clutter/frame-clock: Throttle back to double buffering for direct scanout There's no compositing during direct scanout so the "render" time is zero. Thus there is no need to implement triple buffering for direct scanouts. Stick to double buffering and enjoy the lower latency. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-07 | |
triple-buffering/clutter-frame-clock-Add-env-var-MUTTER_DEBUG_DISABLE_TRIP.patch | clutter/frame-clock: Add env var MUTTER_DEBUG_DISABLE_TRIPLE_BUFFERING You can set environment variable MUTTER_DEBUG_DISABLE_TRIPLE_BUFFERING=1 to disable triple buffering. This shouldn't ever be needed except when debugging. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-03-10 | |
triple-buffering/kms-Keep-a-hash-table-of-CRTCs-relating-to-the-KmsUpdate.patch | kms: Keep a hash table of CRTCs relating to the KmsUpdate This will allow more efficient lookup than linear searching each of the GLists. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-22 | |
triple-buffering/kms-Map-ensure_connector_update-to-a-specific-CRTC-if-act.patch | kms: Map ensure_connector_update to a specific CRTC if active Otherwise the connector update gets orphaned and never committed: https://launchpad.net/bugs/1966178 Although I wonder if there's a nicer way to decide when to apply connector updates (i.e. not reliant on swap buffers). |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-04-13 | |
triple-buffering/kms-Add-functions-meta_kms_update_include-s-_crtc.patch | kms: Add functions meta_kms_update_include[s]_crtc() | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-22 | |
triple-buffering/kms-Add-per-CRTC-update-functions.patch | kms: Add per-CRTC update functions | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2021-09-22 | |
triple-buffering/cursor-renderer-native-Use-CRTC-specific-update-retrieval.patch | cursor-renderer/native: Use CRTC-specific update retrieval | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-01-28 | |
triple-buffering/crtc-native-Use-CRTC-specific-update-retrieval.patch | crtc/native: Use CRTC-specific update retrieval | Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-01-28 | |
triple-buffering/onscreen-native-Use-CRTC-specific-update-retrieval.patch | onscreen/native: Use CRTC-specific update retrieval For mode setting we want all CRTCs to share the same MetaKmsUpdate, but after that we don't want them to share the same update for regular flips and cursor movement. The reason being that different CRTCs are attached to different displays with different clocks. So each CRTC would finish the same update at slightly different times. If you wait for all CRTCs to complete a shared update then you have waited half a frame on average, possibly more. This waiting would consume most of the render time for the next frame and risk stuttering. If you only wait for one CRTC to complete a shared update then the next shared update may be posted before other CRTCs have finished the last, so the next update would fail due to those other CRTCs still being busy. So the only safe answer for maintaining full framerate of multiple outputs is to ensure unsynchronized CRTCs don't share the same update. At least not after mode setting. This fixes a multi-monitor bug for atomic KMS whereby `meta_onscreen_native_finish_frame` would fail its post because it was trying to commit a cursor update on the wrong (busy) CRTC. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-01-28 | |
triple-buffering/tests-native-kms-render-Fix-failing-client-scanout-test.patch | tests/native-kms-render: Fix failing client-scanout test It was assuming an immediate transition from compositing (triple buffering) to direct scanout (double buffering), whereas there is a one frame delay in that transition as the buffer queue shrinks. We don't lose any frames in the transition. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-06-30 | |
triple-buffering/kms-Avoid-queuing-multiple-un-assignments-to-the-same-pla.patch | kms: Avoid queuing multiple (un)assignments to the same plane in an update Just like we already do in `meta_kms_update_assign_plane`. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-09-08 | |
triple-buffering/onscreen-native-Increase-secondary-GPU-dumb_fbs-from-2-to.patch | onscreen/native: Increase secondary GPU dumb_fbs from 2 to 3 So that they don't get overwritten prematurely during triple buffering causing tearing. https://launchpad.net/bugs/1999216 |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2022-12-09 | |
triple-buffering/clutter-frame-clock-Target-the-correct-next_presentation_.patch | clutter/frame-clock: Target the correct next_presentation_time_us Where "correct" means a different time to when we expect the previous update(s) to present. Otherwise we get stuck in triple buffering for too long by scheduling the next update earlier than necessary. This logic error has existed for a long time but it worked because prior to triple buffering, `calculate_next_update_time_us` would only ever be called from the `IDLE` state. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2023-02-03 | |
triple-buffering/clutter-frame-clock-Fall-back-to-triple-buffering-not-dou.patch | clutter/frame-clock: Fall back to triple buffering, not double buffering When the driver doesn't support GPU timestamps (Xorg, Raspberry Pi, others) https://launchpad.net/bugs/2017137 https://launchpad.net/bugs/2017097 |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2023-04-24 | |
triple-buffering/clutter-frame-clock-Avoid-rapidly-toggling-dynamic-max-re.patch | clutter/frame-clock: Avoid rapidly toggling dynamic max render time This could happen when moving the cursor over GUIs that only redraw in response to cursor movement. Mutter would experience alternating cursor-only updates and page flips, and so the `max_render_time_allowed_us` would jump between pessimised and optimised resulting in inconsistent frame pacing. Aside from fixing the smoothness problem this should also provide lower latency cursor movement. (cherry picked from commit be0aa2976e19f4a6b91bd90ce3942d6b107af7c0) |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2023-06-14 | |
triple-buffering/clutter-frame-clock-Record-measurements-of-zero-for-curso.patch | clutter/frame-clock: Record measurements of zero for cursor-only updates But only if we've ever got actual swap measurements (COGL_FEATURE_ID_TIMESTAMP_QUERY). If it's supported then we now drop to double buffering and get optimal latency on a burst of cursor-only updates. |
Daniel van Vugt <daniel.van.vugt@canonical.com> | no | https://gitlab.gnome.org/Community/Ubuntu/mutter/-/commits/triple-buffering-v4-43 | 2023-07-18 | |
debian/tests-Disable-restore-size-test.patch | tests: Disable restore-size test This intermittently fails on x86 and consistently fails on 32-bit ARM. Workaround for https://gitlab.gnome.org/GNOME/mutter/-/issues/2509 |
Simon McVittie <smcv@debian.org> | not-needed | upstream | 2022-11-15 | |
workspace-Don-t-crash-on-invalid-argument-to-meta_workspa.patch | workspace: Don't crash on invalid argument to meta_workspace_index | Simon McVittie <smcv@debian.org> | yes | debian upstream | 2022-12-18 | |
debian/Mark-xwayland-test-case-as-known-to-be-flaky-on-32-bit-AR.patch | Mark xwayland test case as known to be flaky on 32-bit ARM | Simon McVittie <smcv@debian.org> | no | debian | 2022-12-20 | |
cursor-renderer-native-Workaround-broken-arm64-drivers.patch | cursor-renderer-native: Workaround broken arm64 drivers By forcing cursors to use dumb buffers. At least until Mesa gets fixed for panfrost, vc4, v3d... |
Daniel van Vugt <daniel.van.vugt@canonical.com> | yes | upstream | 2022-11-04 |