[Bf-blender-cvs] [0c2a3054ba9] master: Fix high CPU use when idle under Wayland
Campbell Barton
noreply at git.blender.org
Fri Jan 13 07:56:29 CET 2023
Commit: 0c2a3054ba92494fb1a63ceea3bf441093fd5b03
Author: Campbell Barton
Date: Fri Jan 13 17:48:52 2023 +1100
Branches: master
https://developer.blender.org/rB0c2a3054ba92494fb1a63ceea3bf441093fd5b03
Fix high CPU use when idle under Wayland
Recently the event handling thread for Wayland sometimes used 100% of a
CPU core while idle.
Resolve by waiting for changes to the Wayland file-handle when
there are no events to read.
===================================================================
M intern/ghost/intern/GHOST_SystemWayland.cpp
===================================================================
diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp
index ef8ccd66685..d9e5b0c4e9d 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.cpp
+++ b/intern/ghost/intern/GHOST_SystemWayland.cpp
@@ -1662,15 +1662,23 @@ static int ghost_wl_display_event_pump_from_thread(struct wl_display *wl_display
server_mutex->lock();
int err = 0;
if (wl_display_prepare_read(wl_display) == 0) {
+ bool wait_on_fd = false;
/* Use #GWL_IOR_NO_RETRY to ensure #SIGINT will break us out of our wait. */
if (file_descriptor_is_io_ready(fd, GWL_IOR_READ | GWL_IOR_NO_RETRY, 0) > 0) {
err = wl_display_read_events(wl_display);
}
else {
wl_display_cancel_read(wl_display);
+ /* Without this, the thread will loop continuously, 100% CPU. */
+ wait_on_fd = true;
}
server_mutex->unlock();
+
+ if (wait_on_fd) {
+ /* Important this runs after unlocking. */
+ file_descriptor_is_io_ready(fd, GWL_IOR_READ | GWL_IOR_NO_RETRY, INT32_MAX);
+ }
}
else {
server_mutex->unlock();
More information about the Bf-blender-cvs
mailing list