Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package picom for openSUSE:Factory checked in at 2024-02-06 16:35:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/picom (Old) and /work/SRC/openSUSE:Factory/.picom.new.1815 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "picom" Tue Feb 6 16:35:58 2024 rev:9 rq:1144655 version:11.1 Changes: -------- --- /work/SRC/openSUSE:Factory/picom/picom.changes 2023-11-07 21:26:49.936560419 +0100 +++ /work/SRC/openSUSE:Factory/.picom.new.1815/picom.changes 2024-02-06 16:36:41.567702615 +0100 @@ -1,0 +2,43 @@ +Sat Feb 3 16:44:06 UTC 2024 - Alexei Sorokin <[email protected]> + +- Update to version 11.1 (changes since 10.2): + * Notable features + - picom now uses dithering to prevent banding. Banding is most + notable when using a strong background blur. + - Frame pacing. picom uses present feedback information to + schedule new frames when it makes sense to do so. This + improves latency, and replaces the `glFlush` and + `GL_MaxFramesAllowed=1` hacks we used to do for NVIDIA. + - Some missing features have been implemented for the EGL + backend. + * Bug fixes + - Many memory/resource leak fixes. + - Fix tiling of wallpaper. + - Fix some blur artefacts. + - Fix shadow colour for transparent shadows. + - Don't spam logs when another compositor is running. + - Fix rounded corners showing as black with the xrender + backend. + - Fix blur with rounded windows. + - Fix missing fading on window close for some window managers. + * Build changes + - Dependency `pcre` has been replaced by `pcre2`. + - New dependency xcb-util. + - xinerama is no longer used. + - picom now tries to give itself a real-time scheduling + priority. + * Deprecations + - The `kawase` blur method is removed. Note this is just an + alias to the `dual_kawase` method, which is still available. + - Uses of `--sw-opti`, and `--respect-prop-shadow` are now hard + errors. + - `-F` has been removed completely. It was deprecated in 2012. +- Drop patches included in upstream: + * 0001-core-expand-X-error-handling.patch + * 0002-core-added-proper-event-handling-for-XESetWireToEven.patch + * 0003-core-event-code-refactoring.patch +- Add picom-11.1-fix-nvidia-high-cpu-usage.patch: Workaround a + NVIDIA problem that causes high CPU usage after suspend/resume + (adapted from commit 238c3cc8336fe24370a3ca44ff0d891ca8907c94). + +------------------------------------------------------------------- Old: ---- 0001-core-expand-X-error-handling.patch 0002-core-added-proper-event-handling-for-XESetWireToEven.patch 0003-core-event-code-refactoring.patch v10.2.tar.gz New: ---- picom-11.1-fix-nvidia-high-cpu-usage.patch picom-11.1.tar.gz BETA DEBUG BEGIN: Old:- Drop patches included in upstream: * 0001-core-expand-X-error-handling.patch * 0002-core-added-proper-event-handling-for-XESetWireToEven.patch Old: * 0001-core-expand-X-error-handling.patch * 0002-core-added-proper-event-handling-for-XESetWireToEven.patch * 0003-core-event-code-refactoring.patch Old: * 0002-core-added-proper-event-handling-for-XESetWireToEven.patch * 0003-core-event-code-refactoring.patch - Add picom-11.1-fix-nvidia-high-cpu-usage.patch: Workaround a BETA DEBUG END: BETA DEBUG BEGIN: New: * 0003-core-event-code-refactoring.patch - Add picom-11.1-fix-nvidia-high-cpu-usage.patch: Workaround a NVIDIA problem that causes high CPU usage after suspend/resume BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ picom.spec ++++++ --- /var/tmp/diff_new_pack.Q2yqlt/_old 2024-02-06 16:36:42.603740094 +0100 +++ /var/tmp/diff_new_pack.Q2yqlt/_new 2024-02-06 16:36:42.603740094 +0100 @@ -1,7 +1,7 @@ # # spec file for package picom # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,20 +17,15 @@ Name: picom -Version: 10.2 +Version: 11.1 Release: 0 Summary: Stand-alone compositor for X11 License: MIT AND MPL-2.0 Group: System/X11/Utilities URL: https://github.com/yshui/picom -Source0: https://github.com/yshui/picom/archive/v%{version}.tar.gz -# Patch-FIX-UPSTREAM core: expand X error handling based on -# aca3fdcef7bfcb1c3ce65cf87413fa6ab280d183 -# Required for the fix further below -Patch1: 0001-core-expand-X-error-handling.patch -# PATCH-FIX-UPSTREAM added proper event handling for XESetWireToEvent -- based on PR 123 -Patch2: 0002-core-added-proper-event-handling-for-XESetWireToEven.patch -Patch3: 0003-core-event-code-refactoring.patch +Source: https://github.com/yshui/picom/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz +# PATCH-FIX-UPSTREAM picom-11.1-fix-nvidia-high-cpu-usage.patch [email protected] -- Workaround a NVIDIA problem that causes high CPU usage after suspend/resume +Patch0: picom-11.1-fix-nvidia-high-cpu-usage.patch BuildRequires: asciidoc BuildRequires: c_compiler BuildRequires: hicolor-icon-theme @@ -43,7 +38,7 @@ BuildRequires: pkgconfig(libconfig) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(libev) -BuildRequires: pkgconfig(libpcre) +BuildRequires: pkgconfig(libpcre2-8) BuildRequires: pkgconfig(libxdg-basedir) BuildRequires: pkgconfig(pixman-1) BuildRequires: pkgconfig(x11) @@ -59,7 +54,6 @@ BuildRequires: pkgconfig(xcb-sync) BuildRequires: pkgconfig(xcb-util) BuildRequires: pkgconfig(xcb-xfixes) -BuildRequires: pkgconfig(xcb-xinerama) BuildRequires: pkgconfig(xext) Obsoletes: compton <= 0.1.0 Provides: compton = %{version} ++++++ picom-11.1-fix-nvidia-high-cpu-usage.patch ++++++ --- a/src/vblank.c +++ b/src/vblank.c @@ -78,13 +78,14 @@ struct sgi_video_sync_vblank_scheduler { // Since glXWaitVideoSyncSGI blocks, we need to run it in a separate thread. // ... and all the thread shenanigans that come with it. - _Atomic unsigned int last_msc; - _Atomic uint64_t last_ust; + _Atomic unsigned int current_msc; + _Atomic uint64_t current_ust; ev_async notify; pthread_t sync_thread; bool running, error; + unsigned int last_msc; - /// Protects `running`, `error` and `base.vblank_event_requested` + /// Protects `running`, and `base.vblank_event_requested` pthread_mutex_t vblank_requested_mtx; pthread_cond_t vblank_requested_cnd; }; @@ -207,8 +208,8 @@ static void *sgi_video_sync_thread(void struct timespec now; clock_gettime(CLOCK_MONOTONIC, &now); - atomic_store(&self->last_msc, last_msc); - atomic_store(&self->last_ust, + atomic_store(&self->current_msc, last_msc); + atomic_store(&self->current_ust, (uint64_t)(now.tv_sec * 1000000 + now.tv_nsec / 1000)); ev_async_send(self->base.loop, &self->notify); pthread_mutex_lock(&self->vblank_requested_mtx); @@ -241,7 +242,10 @@ cleanup: static void sgi_video_sync_scheduler_schedule(struct vblank_scheduler *base) { auto self = (struct sgi_video_sync_vblank_scheduler *)base; - log_verbose("Requesting vblank event for msc %d", self->last_msc + 1); + if (self->error) { + return; + } + log_verbose("Requesting vblank event for msc %d", self->current_msc + 1); pthread_mutex_lock(&self->vblank_requested_mtx); assert(!base->vblank_event_requested); base->vblank_event_requested = true; @@ -250,16 +254,7 @@ static void sgi_video_sync_scheduler_sch } static void -sgi_video_sync_scheduler_callback(EV_P attr_unused, ev_async *w, int attr_unused revents) { - auto sched = container_of(w, struct sgi_video_sync_vblank_scheduler, notify); - auto event = (struct vblank_event){ - .msc = atomic_load(&sched->last_msc), - .ust = atomic_load(&sched->last_ust), - }; - sched->base.vblank_event_requested = false; - log_verbose("Received vblank event for msc %lu", event.msc); - vblank_scheduler_invoke_callbacks(&sched->base, &event); -} +sgi_video_sync_scheduler_callback(EV_P attr_unused, ev_async *w, int attr_unused revents); static void sgi_video_sync_scheduler_init(struct vblank_scheduler *base) { auto self = (struct sgi_video_sync_vblank_scheduler *)base; @@ -287,7 +282,10 @@ static void sgi_video_sync_scheduler_ini log_fatal("Failed to start sgi_video_sync_thread, error code: %d", args.start_status); abort(); + } else { + self->error = false; } + self->last_msc = 0; pthread_mutex_destroy(&args.start_mtx); pthread_cond_destroy(&args.start_cnd); log_info("Started sgi_video_sync_thread"); @@ -306,6 +304,32 @@ static void sgi_video_sync_scheduler_dei pthread_mutex_destroy(&self->vblank_requested_mtx); pthread_cond_destroy(&self->vblank_requested_cnd); } + +static void +sgi_video_sync_scheduler_callback(EV_P attr_unused, ev_async *w, int attr_unused revents) { + auto sched = container_of(w, struct sgi_video_sync_vblank_scheduler, notify); + auto msc = atomic_load(&sched->current_msc); + if (sched->last_msc == msc) { + // NVIDIA spams us with duplicate vblank events after a suspend/resume + // cycle. Recreating the X connection and GLX context seems to fix this. + // Oh NVIDIA. + log_warn("Duplicate vblank event found with msc %d. Possible NVIDIA bug?", msc); + log_warn("Resetting the vblank scheduler"); + sgi_video_sync_scheduler_deinit(&sched->base); + sched->base.vblank_event_requested = false; + sgi_video_sync_scheduler_init(&sched->base); + sgi_video_sync_scheduler_schedule(&sched->base); + return; + } + auto event = (struct vblank_event){ + .msc = msc, + .ust = atomic_load(&sched->current_ust), + }; + sched->base.vblank_event_requested = false; + sched->last_msc = msc; + log_verbose("Received vblank event for msc %lu", event.msc); + vblank_scheduler_invoke_callbacks(&sched->base, &event); +} #endif static void present_vblank_scheduler_schedule(struct vblank_scheduler *base) {
