linux: only tick the main thread tasks and one at a time in the event loop

This commit is contained in:
Dzmitry Malyshau 2024-02-04 19:36:58 -08:00
parent f92be4b817
commit 1c410c1b99
3 changed files with 10 additions and 4 deletions

BIN
crates/gpui/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View file

@ -46,6 +46,13 @@ impl LinuxDispatcher {
main_thread_id: thread::current().id(), 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 { impl PlatformDispatcher for LinuxDispatcher {

View file

@ -3,9 +3,8 @@
use crate::{ use crate::{
Action, AnyWindowHandle, BackgroundExecutor, Bounds, ClipboardItem, CursorStyle, DisplayId, Action, AnyWindowHandle, BackgroundExecutor, Bounds, ClipboardItem, CursorStyle, DisplayId,
ForegroundExecutor, Keymap, LinuxDispatcher, LinuxDisplay, LinuxTextSystem, LinuxWindow, ForegroundExecutor, Keymap, LinuxDispatcher, LinuxDisplay, LinuxTextSystem, LinuxWindow,
LinuxWindowState, Menu, PathPromptOptions, Platform, PlatformDispatcher as _, PlatformDisplay, LinuxWindowState, Menu, PathPromptOptions, Platform, PlatformDisplay, PlatformInput,
PlatformInput, PlatformTextSystem, PlatformWindow, Point, Result, SemanticVersion, Size, Task, PlatformTextSystem, PlatformWindow, Point, Result, SemanticVersion, Size, Task, WindowOptions,
WindowOptions,
}; };
use collections::{HashMap, HashSet}; use collections::{HashMap, HashSet};
@ -121,7 +120,7 @@ impl Platform for LinuxPlatform {
} }
_ => {} _ => {}
} }
self.0.lock().dispatcher.tick(false); self.0.lock().dispatcher.tick_main();
} }
} }