From 1c410c1b996020a7138bb6468f561238fe632a70 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Sun, 4 Feb 2024 19:36:58 -0800 Subject: [PATCH] linux: only tick the main thread tasks and one at a time in the event loop --- crates/gpui/screenshot.png | Bin 0 -> 9562 bytes crates/gpui/src/platform/linux/dispatcher.rs | 7 +++++++ crates/gpui/src/platform/linux/platform.rs | 7 +++---- 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 crates/gpui/screenshot.png diff --git a/crates/gpui/screenshot.png b/crates/gpui/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..50597680f03024039943557738252f4270e19c3f GIT binary patch literal 9562 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 JDwJRm{|DkQwW$CA literal 0 HcmV?d00001 diff --git a/crates/gpui/src/platform/linux/dispatcher.rs b/crates/gpui/src/platform/linux/dispatcher.rs index 14072f040a5e4e5a174a717be574b42330dc885f..d669e56ab6e2c665233d88cc306ffc82c3527ad3 100644 --- a/crates/gpui/src/platform/linux/dispatcher.rs +++ b/crates/gpui/src/platform/linux/dispatcher.rs @@ -46,6 +46,13 @@ impl LinuxDispatcher { main_thread_id: thread::current().id(), } } + + pub fn tick_main(&self) { + assert!(self.is_main_thread()); + if let Ok(runnable) = self.main_receiver.try_recv() { + runnable.run(); + } + } } impl PlatformDispatcher for LinuxDispatcher { diff --git a/crates/gpui/src/platform/linux/platform.rs b/crates/gpui/src/platform/linux/platform.rs index b7d51971a1964991b66c1810131bbae395b3261c..e1d21ef69d41efb1da372af7b3c90c45e74efcdb 100644 --- a/crates/gpui/src/platform/linux/platform.rs +++ b/crates/gpui/src/platform/linux/platform.rs @@ -3,9 +3,8 @@ use crate::{ Action, AnyWindowHandle, BackgroundExecutor, Bounds, ClipboardItem, CursorStyle, DisplayId, ForegroundExecutor, Keymap, LinuxDispatcher, LinuxDisplay, LinuxTextSystem, LinuxWindow, - LinuxWindowState, Menu, PathPromptOptions, Platform, PlatformDispatcher as _, PlatformDisplay, - PlatformInput, PlatformTextSystem, PlatformWindow, Point, Result, SemanticVersion, Size, Task, - WindowOptions, + LinuxWindowState, Menu, PathPromptOptions, Platform, PlatformDisplay, PlatformInput, + PlatformTextSystem, PlatformWindow, Point, Result, SemanticVersion, Size, Task, WindowOptions, }; use collections::{HashMap, HashSet}; @@ -121,7 +120,7 @@ impl Platform for LinuxPlatform { } _ => {} } - self.0.lock().dispatcher.tick(false); + self.0.lock().dispatcher.tick_main(); } }