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) {

Reply via email to