Date: Friday, May 31, 2019 @ 08:39:40 Author: heftig Revision: 354559
3.32.2+5+g13a1624c1-1 Modified: mutter/trunk/PKGBUILD Deleted: mutter/trunk/0001-wayland-output-Report-unscaled-size-even-in-logical-.patch mutter/trunk/216.patch -----------------------------------------------------------------+ 0001-wayland-output-Report-unscaled-size-even-in-logical-.patch | 147 ---------- 216.patch | 128 -------- PKGBUILD | 18 - 3 files changed, 4 insertions(+), 289 deletions(-) Deleted: 0001-wayland-output-Report-unscaled-size-even-in-logical-.patch =================================================================== --- 0001-wayland-output-Report-unscaled-size-even-in-logical-.patch 2019-05-31 06:35:39 UTC (rev 354558) +++ 0001-wayland-output-Report-unscaled-size-even-in-logical-.patch 2019-05-31 08:39:40 UTC (rev 354559) @@ -1,147 +0,0 @@ -From 761000ec8f4b53d0fa06f235be2ed30b80ec5bcb Mon Sep 17 00:00:00 2001 -Message-Id: <761000ec8f4b53d0fa06f235be2ed30b80ec5bcb.1553890447.git.jan.steff...@gmail.com> -From: "Jan Alexander Steffens (heftig)" <[email protected]> -Date: Wed, 27 Mar 2019 00:38:02 +0100 -Subject: [PATCH] wayland/output: Report unscaled size even in logical layout - mode -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In physical layout mode, the size and scale of the `wl_output` matches -the actual monitor: - -| Monitor | `wl_output` | `GdkMonitor` | -| ------------ | ------------ | ------------ | -| 3840×2160 @1 | 3840×2160 @1 | 3840×2160 @1 | -| 3840×2160 @2 | 3840×2160 @2 | 1920×1080 @2 | - -GTK currently does not support `xdg_output`. To estimate the logical -output size for `GdkMonitor`, it divides the output's size by its scale -factor. There might be other legacy clients making the same assumption. - -In logical layout mode, mutter currently reports logical geometry for -the `wl_output`s, but this no longer matches the monitors: - -| Monitor | `wl_output` | `GdkMonitor` | -| -------------- | ------------ | ------------ | -| 3840×2160 @1 | 3840×2160 @1 | 3840×2160 @1 | -| 3840×2160 @2 | 1920×1080 @2 | 960×540 @2 | -| 3840×2160 @1.5 | 2560×1440 @2 | 1280×720 @2 | - -This patch changes logical layout mode to multiply the sizes by the -`wl_output`'s scale factor before sending them to the client. Now the -sizes match the physical layout mode again: - -| Monitor | `wl_output` | `GdkMonitor` | -| -------------- | ------------ | ------------ | -| 3840×2160 @1 | 3840×2160 @1 | 3840×2160 @1 | -| 3840×2160 @2 | 3840×2160 @2 | 1920×1080 @2 | -| 3840×2160 @1.5 | 5120×2880 @2 | 2560×1440 @2 | - -Unfortunately, non-integer output scales are not representable in -`wl_output`. Still, I believe these values are better than before, and -the best we can do for clients that do not know about `xdg_output`: The -size of the output will match the size that a buffer for a fullscreen -surface should have at the indicated scale. - -Fixes part of https://bugzilla.mozilla.org/show_bug.cgi?id=1534089 -https://gitlab.gnome.org/GNOME/mutter/merge_requests/510 ---- - src/wayland/meta-wayland-outputs.c | 33 +++++++++++++++++++----------- - 1 file changed, 21 insertions(+), 12 deletions(-) - -diff --git a/src/wayland/meta-wayland-outputs.c b/src/wayland/meta-wayland-outputs.c -index 7695d86af..712a143a8 100644 ---- a/src/wayland/meta-wayland-outputs.c -+++ b/src/wayland/meta-wayland-outputs.c -@@ -181,24 +181,36 @@ send_output_events (struct wl_resource *resource, - MetaLogicalMonitor *old_logical_monitor; - guint old_mode_flags; - gint old_scale; -+ gint scale; -+ MetaRectangle old_rect; -+ MetaRectangle rect; - float old_refresh_rate; - float refresh_rate; - - old_logical_monitor = wayland_output->logical_monitor; - old_mode_flags = wayland_output->mode_flags; - old_scale = wayland_output->scale; -+ old_rect = old_logical_monitor->rect; - old_refresh_rate = wayland_output->refresh_rate; - -+ scale = calculate_wayland_output_scale (logical_monitor); -+ rect = logical_monitor->rect; - monitor = pick_main_monitor (logical_monitor); -- - current_mode = meta_monitor_get_current_mode (monitor); - refresh_rate = meta_monitor_mode_get_refresh_rate (current_mode); - -+ if (meta_is_stage_views_scaled ()) { -+ old_rect.width *= old_scale; -+ old_rect.height *= old_scale; -+ rect.width *= scale; -+ rect.height *= scale; -+ } -+ - gboolean need_done = FALSE; - - if (need_all_events || -- old_logical_monitor->rect.x != logical_monitor->rect.x || -- old_logical_monitor->rect.y != logical_monitor->rect.y || -+ old_rect.x != rect.x || -+ old_rect.y != rect.y || - is_different_rotation (old_logical_monitor, logical_monitor)) - { - int width_mm, height_mm; -@@ -229,40 +241,37 @@ send_output_events (struct wl_resource *resource, - transform = WL_OUTPUT_TRANSFORM_NORMAL; - - wl_output_send_geometry (resource, -- logical_monitor->rect.x, -- logical_monitor->rect.y, -+ rect.x, -+ rect.y, - width_mm, - height_mm, - subpixel_order, - vendor, - product, - transform); - need_done = TRUE; - } - - preferred_mode = meta_monitor_get_preferred_mode (monitor); - if (current_mode == preferred_mode) - mode_flags |= WL_OUTPUT_MODE_PREFERRED; - - if (need_all_events || -- old_logical_monitor->rect.width != logical_monitor->rect.width || -- old_logical_monitor->rect.height != logical_monitor->rect.height || -+ old_rect.width != rect.width || -+ old_rect.height != rect.height || - old_refresh_rate != refresh_rate || - old_mode_flags != mode_flags) - { - wl_output_send_mode (resource, - mode_flags, -- logical_monitor->rect.width, -- logical_monitor->rect.height, -+ rect.width, -+ rect.height, - (int32_t) (refresh_rate * 1000)); - need_done = TRUE; - } - - if (version >= WL_OUTPUT_SCALE_SINCE_VERSION) - { -- int scale; -- -- scale = calculate_wayland_output_scale (logical_monitor); - if (need_all_events || - old_scale != scale) - { --- -2.21.0 - Deleted: 216.patch =================================================================== --- 216.patch 2019-05-31 06:35:39 UTC (rev 354558) +++ 216.patch 2019-05-31 08:39:40 UTC (rev 354559) @@ -1,128 +0,0 @@ -From 6d8d73beeef3a618c553e89b0b3e532ec3654a30 Mon Sep 17 00:00:00 2001 -From: Daniel van Vugt <[email protected]> -Date: Mon, 23 Jul 2018 16:28:56 +0800 -Subject: [PATCH] cogl-winsys-glx: Fix frame notification race/leak - -If a second `set_{sync,complete}_pending` was queued before the idle -handler had flushed the first then one of them would be forgotten. -It would stay queued forever and never emitted as a notification. - -This could happen repeatedly causing a slow leak. But worse still, -`clutter-stage-cogl` would then have `pending_swaps` permanently stuck -above zero preventing the presentation timing logic from being used. - -The problem is that a boolean can only count to one, but in some cases -(triple buffering, whether intentional or accidental #334) we need it to -count to two. So just change booleans to integers and count properly. - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 ---- - cogl/cogl/winsys/cogl-winsys-glx.c | 58 +++++++++++++++--------------- - 1 file changed, 29 insertions(+), 29 deletions(-) - -diff --git a/cogl/cogl/winsys/cogl-winsys-glx.c b/cogl/cogl/winsys/cogl-winsys-glx.c -index 2623d02c6..235cfe81f 100644 ---- a/cogl/cogl/winsys/cogl-winsys-glx.c -+++ b/cogl/cogl/winsys/cogl-winsys-glx.c -@@ -99,9 +99,9 @@ typedef struct _CoglOnscreenGLX - CoglOnscreenXlib _parent; - GLXDrawable glxwin; - uint32_t last_swap_vsync_counter; -- gboolean pending_sync_notify; -- gboolean pending_complete_notify; -- gboolean pending_resize_notify; -+ uint32_t pending_sync_notify; -+ uint32_t pending_complete_notify; -+ uint32_t pending_resize_notify; - - GThread *swap_wait_thread; - GQueue *swap_wait_queue; -@@ -347,35 +347,35 @@ flush_pending_notifications_cb (void *data, - { - CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer); - CoglOnscreenGLX *glx_onscreen = onscreen->winsys; -- gboolean pending_sync_notify = glx_onscreen->pending_sync_notify; -- gboolean pending_complete_notify = glx_onscreen->pending_complete_notify; - -- /* If swap_region is called then notifying the sync event could -- * potentially immediately queue a subsequent pending notify so -- * we need to clear the flag before invoking the callback */ -- glx_onscreen->pending_sync_notify = FALSE; -- glx_onscreen->pending_complete_notify = FALSE; -- -- if (pending_sync_notify) -+ while (glx_onscreen->pending_sync_notify > 0 || -+ glx_onscreen->pending_complete_notify > 0 || -+ glx_onscreen->pending_resize_notify > 0) - { -- CoglFrameInfo *info = g_queue_peek_head (&onscreen->pending_frame_infos); -- -- _cogl_onscreen_notify_frame_sync (onscreen, info); -- } -+ if (glx_onscreen->pending_sync_notify > 0) -+ { -+ CoglFrameInfo *info = -+ g_queue_peek_head (&onscreen->pending_frame_infos); - -- if (pending_complete_notify) -- { -- CoglFrameInfo *info = g_queue_pop_head (&onscreen->pending_frame_infos); -+ _cogl_onscreen_notify_frame_sync (onscreen, info); -+ glx_onscreen->pending_sync_notify--; -+ } - -- _cogl_onscreen_notify_complete (onscreen, info); -+ if (glx_onscreen->pending_complete_notify > 0) -+ { -+ CoglFrameInfo *info = -+ g_queue_pop_head (&onscreen->pending_frame_infos); - -- cogl_object_unref (info); -- } -+ _cogl_onscreen_notify_complete (onscreen, info); -+ cogl_object_unref (info); -+ glx_onscreen->pending_complete_notify--; -+ } - -- if (glx_onscreen->pending_resize_notify) -- { -- _cogl_onscreen_notify_resize (onscreen); -- glx_onscreen->pending_resize_notify = FALSE; -+ if (glx_onscreen->pending_resize_notify > 0) -+ { -+ _cogl_onscreen_notify_resize (onscreen); -+ glx_onscreen->pending_resize_notify--; -+ } - } - } - } -@@ -417,7 +417,7 @@ set_sync_pending (CoglOnscreen *onscreen) - NULL); - } - -- glx_onscreen->pending_sync_notify = TRUE; -+ glx_onscreen->pending_sync_notify++; - } - - static void -@@ -440,7 +440,7 @@ set_complete_pending (CoglOnscreen *onscreen) - NULL); - } - -- glx_onscreen->pending_complete_notify = TRUE; -+ glx_onscreen->pending_complete_notify++; - } - - static void -@@ -533,7 +533,7 @@ notify_resize (CoglContext *context, - NULL); - } - -- glx_onscreen->pending_resize_notify = TRUE; -+ glx_onscreen->pending_resize_notify++; - - if (!xlib_onscreen->is_foreign_xwin) - { --- -2.18.1 - Modified: PKGBUILD =================================================================== --- PKGBUILD 2019-05-31 06:35:39 UTC (rev 354558) +++ PKGBUILD 2019-05-31 08:39:40 UTC (rev 354559) @@ -3,7 +3,7 @@ # Contributor: Michael Kanis <mkanis_at_gmx_dot_de> pkgname=mutter -pkgver=3.32.2 +pkgver=3.32.2+5+g13a1624c1 pkgrel=1 pkgdesc="A window manager for GNOME" url="https://gitlab.gnome.org/GNOME/mutter" @@ -15,13 +15,9 @@ makedepends=(gobject-introspection git egl-wayland meson xorg-server) checkdepends=(xorg-server-xvfb) groups=(gnome) -_commit=189f71f5d1e70dd16796418d568d3e3e4cad49e0 # tags/3.32.2^0 -source=("git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit" - 0001-wayland-output-Report-unscaled-size-even-in-logical-.patch - 216.patch) -sha256sums=('SKIP' - '842162bf8cec5d69fdb80c85fd152ddd3db6a9179d11d6f81d486f79814838c0' - 'ed4f3cf738a3cffdf8a6e1a352bf24d74078c3b26fb9262c5746e0d95b9df756') +_commit=13a1624c1050c91cd4d8a298f7a10fafe56fe9e5 # gnome-3-32 +source=("git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit") +sha256sums=('SKIP') pkgver() { cd $pkgname @@ -30,12 +26,6 @@ prepare() { cd $pkgname - - # https://bugzilla.mozilla.org/show_bug.cgi?id=1534089 - patch -Np1 -i ../0001-wayland-output-Report-unscaled-size-even-in-logical-.patch - - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 - git apply -3 ../216.patch } build() {
