mutter/src/backends
Georges Basile Stavracas Neto 77d5c8c928 screen-cast/monitor-stream: Immediately record scanout frames
When the before-paint function is executed, it's only purpose
is to check if there's any scanout queue, and immediately
record it if any.

However, since [1], we regressed in this specific case with the
introduction of an idle callback in the before-paint function.
The regression only happens when the PipeWire stream is using
DMA-BUF buffers, and it would operate as follows:

 1. In before-paint, when there's a scanout available, we queue
    an idle callback to capture the monitor. The idle callback
    (almost always) executes after the scanout is pulled from
    the stage view

 2. meta_screen_cast_stream_src_maybe_record_frame() is called
    by the idle callback. In the DMA-BUF case, it then runs
    meta_screen_cast_monitor_stream_src_record_to_framebuffer()

 3. In meta_screen_cast_monitor_stream_src_record_to_framebuffer(),
    because the stage view doesn't have a scanout anymore, it
    ends up calling cogl_blit_framebuffer() with the stage view
    framebuffer. This is the regression bug.

This regression presents itself in the form of the screencast
stream showing the desktop when there's an unredirected fullscreen
application window running.

Revert before-paint - and only that - back to immediately capturing
any available scanout. Only record these frames when the target
buffer is a DMA-BUF handle. Nothing is captured on before-paint if
the stream is not using DMA-BUF, since the regular paint routine
will handle these frames regularly post-paint.

[1] https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1914

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2186>
2022-01-07 19:59:36 +00:00
..
native wayland: Use new KMS update test API to try acquiring scanout 2022-01-05 20:00:36 +00:00
x11 crtc-mode-xrandr: Take RR_DoubleScan and RR_Interlace flags into account 2022-01-02 21:10:31 +00:00
edid-parse.c Clean up include macros mess 2018-11-06 17:17:36 +01:00
edid.h
gsm-inhibitor-flag.h idle-monitor: Take idle inhibition into account 2018-04-16 13:28:03 +02:00
meta-backend-private.h tests/wayland-unit-tests: Add test case for remapping popup with subsurface 2021-12-19 15:48:51 +00:00
meta-backend-types.h context: Make the context own MetaWaylandCompositor 2021-07-15 11:34:37 +02:00
meta-backend.c backend: Return NULL cursor renderer if there is no seat 2021-12-22 16:22:08 +00:00
meta-barrier-private.h Use G_DECLARE_DERIVABLE/FINAL_TYPE on some types 2018-12-21 19:48:50 +00:00
meta-barrier.c src: Stop using GSlice 2021-02-22 13:52:27 +01:00
meta-crtc-mode.c crtc-kms: Make KMS CRTC mode a type inheriting MetaCrtcMode 2020-06-11 09:20:16 +00:00
meta-crtc-mode.h crtc-mode-info: Add vblank duration field 2021-07-13 08:09:42 +00:00
meta-crtc.c monitor-manager: Connect assigned CRTCs to their outputs both ways 2021-01-22 16:47:08 +00:00
meta-crtc.h monitor-manager: Connect assigned CRTCs to their outputs both ways 2021-01-22 16:47:08 +00:00
meta-cursor-renderer.c backends: Remove superfluous intermediate variable 2021-12-07 20:04:08 +00:00
meta-cursor-renderer.h cursor-renderer: Remove meta_cursor_renderer_is_overlay_visible 2021-09-20 14:00:08 +00:00
meta-cursor-sprite-xcursor.c cursor-sprite: Register all cursor sprites with the cursor tracker 2021-12-22 16:22:08 +00:00
meta-cursor-sprite-xcursor.h cursor-sprite: Register all cursor sprites with the cursor tracker 2021-12-22 16:22:08 +00:00
meta-cursor-tracker-private.h cursor-sprite: Register all cursor sprites with the cursor tracker 2021-12-22 16:22:08 +00:00
meta-cursor-tracker.c cursor-tracker: Add missing newline 2021-12-22 16:22:08 +00:00
meta-cursor.c cursor: Hold reference to cursor tracker 2021-12-22 19:37:16 +01:00
meta-cursor.h backends: Replace MetaCursorSprite::prepare-at with in-place function 2021-12-07 20:04:08 +00:00
meta-dbus-session-watcher.c dbus-session-watcher: Chain up to parent finalize() 2019-10-14 09:09:01 +02:00
meta-dbus-session-watcher.h Add remote desktop and screen cast functionality 2017-08-29 14:39:04 +08:00
meta-display-config-shared.h Use a consistent style for enum braces 2019-02-28 09:31:01 +01:00
meta-dnd-private.h compositor: Move out X11 compositing code into sub type 2019-08-19 08:44:58 +00:00
meta-egl-ext.h EGL: Include EGL/eglmesaext.h 2019-10-21 14:04:30 +00:00
meta-egl.c egl: Add eglQueryDisplayAttribEXT() helper 2022-01-05 16:36:48 +00:00
meta-egl.h egl: Add eglQueryDisplayAttribEXT() helper 2022-01-05 16:36:48 +00:00
meta-gles3-table.h backends: Add OpenGL ES 3 abstraction layer 2017-10-05 18:17:26 -04:00
meta-gles3.c Fix const qualifier usage 2019-01-22 18:31:53 +01:00
meta-gles3.h Fix const qualifier usage 2019-01-22 18:31:53 +01:00
meta-gpu.c output: Move output info to MetaOutputInfo struct 2020-06-10 18:54:50 +00:00
meta-gpu.h backend: Move GPU ownership from the monitor manager to the backend 2019-06-20 13:31:55 +00:00
meta-idle-manager.c context: Move 'replace-current-wm' tracking to the context 2021-07-15 11:34:37 +02:00
meta-idle-manager.h backends: Introduce MetaIdleManager 2021-05-18 13:19:36 +00:00
meta-idle-monitor-private.h backends: Introduce MetaIdleManager 2021-05-18 13:19:36 +00:00
meta-idle-monitor.c backends: Introduce MetaIdleManager 2021-05-18 13:19:36 +00:00
meta-input-device-private.h backends: Add MetaInputDevice derivable class 2020-03-24 18:07:31 +00:00
meta-input-device.c backends: move 'input_device' to HAVE_LIBWACOM scope 2020-05-03 23:35:03 +01:00
meta-input-mapper-private.h backends: Make MetaInputMapper take over MetaInputSettings public API 2020-11-27 15:14:33 +00:00
meta-input-mapper.c backends: Do not exclude devices from an output based on capability 2021-12-07 14:59:57 +00:00
meta-input-settings-dummy.c input-settings: Make set_matrix() vfunc take const float array pointer 2021-04-14 19:16:22 +00:00
meta-input-settings-dummy.h backends/x11: Add dummy input-settings implementation 2021-03-10 13:56:54 +00:00
meta-input-settings-private.h input-settings: Make set_matrix() vfunc take const float array pointer 2021-04-14 19:16:22 +00:00
meta-input-settings.c backends: Drop MetaInputSettings::seat property 2021-05-05 19:07:26 +00:00
meta-keymap-utils.c *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
meta-keymap-utils.h compositor: use XDG_CONFIG_HOME as initial lookup path for xkb 2020-06-08 11:29:30 +00:00
meta-logical-monitor.c crtc: Move MetaCrtcConfig field to instance private 2020-06-10 18:54:50 +00:00
meta-logical-monitor.h *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
meta-monitor-config-manager.c monitor-transform: Add function to compute from orientation 2021-09-04 10:04:01 +02:00
meta-monitor-config-manager.h monitor-manager: Add config relationships and use it for orientation events 2021-09-04 10:01:29 +02:00
meta-monitor-config-migration.c monitor-manager: Pass the Logical mode when computing the monitor scale 2021-07-22 13:14:01 +02:00
meta-monitor-config-migration.h meta: Hide libmutter symbols by default and selectively export them 2019-01-23 14:18:13 +01:00
meta-monitor-config-store.c monitor-config-store: Properly escape monitor spec 2021-01-29 16:49:58 +00:00
meta-monitor-config-store.h meta: Hide libmutter symbols by default and selectively export them 2019-01-23 14:18:13 +01:00
meta-monitor-manager-dummy.c monitor-manager: Pass the Logical mode when computing the monitor scale 2021-07-22 13:14:01 +02:00
meta-monitor-manager-dummy.h crtc: Make implementations inherit MetaCrtc 2020-06-10 18:54:51 +00:00
meta-monitor-manager-private.h monitor-manager: Use connect_object to connect to settings signals 2021-09-20 15:37:59 +00:00
meta-monitor-manager.c monitor-manager: Fix orientation changes on devices with 90° mounted panels 2021-12-20 10:08:13 +00:00
meta-monitor-transform.c monitor-transform: Add function to compute from orientation 2021-09-04 10:04:01 +02:00
meta-monitor-transform.h monitor-transform: Add function to compute from orientation 2021-09-04 10:04:01 +02:00
meta-monitor.c monitor: Add hash function 2021-08-22 16:40:42 +00:00
meta-monitor.h monitor: Add hash function 2021-08-22 16:40:42 +00:00
meta-orientation-manager.c orientation-manager: Use an idle to apply monitor orientation changes 2021-09-04 10:04:01 +02:00
meta-orientation-manager.h tests: Add MetaOrientationManager tests via SensorsProxy mock 2021-09-04 10:04:00 +02:00
meta-output.c kms: Only emit resources-changed signal if we recorded a change 2021-09-20 15:37:59 +00:00
meta-output.h kms: Only emit resources-changed signal if we recorded a change 2021-09-20 15:37:59 +00:00
meta-pointer-constraint.c backends: Delegate pointer confinements to an impl object 2020-11-27 15:14:33 +00:00
meta-pointer-constraint.h backends: Delegate pointer confinements to an impl object 2020-11-27 15:14:33 +00:00
meta-profiler.c Remove misplaced line break in g_* logging functions 2020-10-08 16:38:41 +02:00
meta-profiler.h profile: Add a Sysprof-based profiler 2019-05-31 11:57:07 -03:00
meta-remote-access-controller-private.h remote-access-controller: Allow inhibiting remote access 2020-04-27 14:31:06 +00:00
meta-remote-access-controller.c remote-access-handle: Add 'is-recording' property 2020-07-31 10:41:38 +02:00
meta-remote-desktop-session.c remote-desktop: Check pipe fd before assuming existing read() operation 2021-07-28 15:26:04 +00:00
meta-remote-desktop-session.h remote-desktop/session: Add support for SelectionTransfer/Write 2021-02-05 16:44:27 +00:00
meta-remote-desktop.c remote-desktop: Close sessions on prepare-shutdown 2021-05-11 16:18:13 +00:00
meta-remote-desktop.h remote-desktop: Add backend getter 2021-03-04 17:39:08 +00:00
meta-renderer-view.c backends: Rename ClutterStage[View]Cogl API and types 2021-07-16 19:08:06 +02:00
meta-renderer-view.h backends: Excise MetaStageView to its own file 2021-07-16 19:08:06 +02:00
meta-renderer.c renderer: Cleanup views in dispose 2021-05-05 19:52:04 +00:00
meta-renderer.h tests/monitor: Check that the CRTC "layout" is correct 2021-01-22 16:47:08 +00:00
meta-screen-cast-area-stream-src.c screen-cast/area-src: Add before-paint watch to catch scanouts 2021-07-05 15:57:20 +00:00
meta-screen-cast-area-stream-src.h screen-cast: Add RecordArea for screen cast arbitrary area 2020-04-23 14:45:53 +00:00
meta-screen-cast-area-stream.c remote-desktop/session: Handle unable to transform coordinate gracefully 2021-03-12 15:09:45 +00:00
meta-screen-cast-area-stream.h screen-cast: Add screen cast flag to streams 2020-07-30 09:51:16 +02:00
meta-screen-cast-monitor-stream-src.c screen-cast/monitor-stream: Immediately record scanout frames 2022-01-07 19:59:36 +00:00
meta-screen-cast-monitor-stream-src.h ScreenCast: Pass PipeWire stream node ID directly 2017-08-29 14:39:04 +08:00
meta-screen-cast-monitor-stream.c screencast: Fix transform_position(), when using fractional scaling 2021-05-17 16:11:47 +02:00
meta-screen-cast-monitor-stream.h screen-cast: Add screen cast flag to streams 2020-07-30 09:51:16 +02:00
meta-screen-cast-session.c screen-cast-session: Add is-active tracking 2021-12-07 19:23:52 +00:00
meta-screen-cast-session.h screen-cast-session: Add is-active tracking 2021-12-07 19:23:52 +00:00
meta-screen-cast-stream-src.c screen-cast/stream: Add DMABUF-only record flag 2022-01-07 19:59:36 +00:00
meta-screen-cast-stream-src.h screen-cast/stream: Add DMABUF-only record flag 2022-01-07 19:59:36 +00:00
meta-screen-cast-stream.c ScreenCast: Allow recording new streams on active sessions 2021-12-07 19:23:52 +00:00
meta-screen-cast-stream.h remote-desktop/session: Handle unable to transform coordinate gracefully 2021-03-12 15:09:45 +00:00
meta-screen-cast-virtual-stream-src.c screen-cast/session: Introduce RecordVirtual D-Bus API 2021-03-12 15:09:45 +00:00
meta-screen-cast-virtual-stream-src.h screen-cast/session: Introduce RecordVirtual D-Bus API 2021-03-12 15:09:45 +00:00
meta-screen-cast-virtual-stream.c screen-cast/session: Introduce RecordVirtual D-Bus API 2021-03-12 15:09:45 +00:00
meta-screen-cast-virtual-stream.h screen-cast/session: Introduce RecordVirtual D-Bus API 2021-03-12 15:09:45 +00:00
meta-screen-cast-window-stream-src.c screen-cast/src: Allow for source with adaptive stream size 2021-03-12 15:09:45 +00:00
meta-screen-cast-window-stream-src.h screen-cast-session: Add screen-cast window mode 2018-12-14 13:26:16 +01:00
meta-screen-cast-window-stream.c remote-desktop/session: Handle unable to transform coordinate gracefully 2021-03-12 15:09:45 +00:00
meta-screen-cast-window-stream.h screen-cast: Add screen cast flag to streams 2020-07-30 09:51:16 +02:00
meta-screen-cast-window.c window-stream-source: Draw into DMA buffer image 2020-02-28 15:52:19 -03:00
meta-screen-cast-window.h window-stream-source: Draw into DMA buffer image 2020-02-28 15:52:19 -03:00
meta-screen-cast.c screen-cast: Clean up sessions on 'prepare-shutdown' 2021-06-09 17:40:34 +00:00
meta-screen-cast.h screen-cast/session: Introduce RecordVirtual D-Bus API 2021-03-12 15:09:45 +00:00
meta-settings-private.h xwayland: Enable Xwayland on demand by default 2021-01-19 09:33:33 +01:00
meta-settings.c xwayland: Enable Xwayland on demand by default 2021-01-19 09:33:33 +01:00
meta-stage-impl-private.h backends: Excise MetaStageView to its own file 2021-07-16 19:08:06 +02:00
meta-stage-impl.c backends: Enable partial update on clipped redraws 2021-10-26 16:56:39 +00:00
meta-stage-private.h tests: Add reference test framework 2021-03-12 15:09:45 +00:00
meta-stage-view-private.h backends: Excise MetaStageView to its own file 2021-07-16 19:08:06 +02:00
meta-stage-view.c backends: Excise MetaStageView to its own file 2021-07-16 19:08:06 +02:00
meta-stage.c src: Stop using GSlice 2021-02-22 13:52:27 +01:00
meta-viewport-info.c main: Move rect related macro to util-private.h 2021-05-17 16:08:42 +00:00
meta-viewport-info.h backends: Store whether views are scaled in MetaViewportInfo 2021-04-13 10:32:14 +00:00
meta-virtual-monitor.c Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-virtual-monitor.h tests: Add virtual monitor tests 2021-03-12 15:09:45 +00:00