gpui(windows): Force a paint message when running out foreground budget (#46609) (cherry-pick to preview) (#46622)
zed-zippy[bot]
,
Lukas Wirth
, and
John Tur
created
Cherry-pick of #46609 to preview
----
Release Notes:
- Fixed zed no longer rendering on windows in a timely manner if it gets
overloaded with foreground work
Co-authored-by: John Tur <john-tur@outlook.com>
Co-authored-by: Lukas Wirth <lukas@zed.dev>
Co-authored-by: John Tur <john-tur@outlook.com>
@@ -838,6 +838,11 @@ impl WindowsPlatformInner {
let peek_msg = |msg: &mut _, msg_kind| unsafe {
PeekMessageW(msg, None, 0, 0, PM_REMOVE | msg_kind).as_bool()
};
+ // We need to process a paint message here as otherwise we will re-enter `run_foreground_task` before painting if we have work remaining.
+ // The reason for this is that windows prefers custom application message processing over system messages.
+ if peek_msg(&mut msg, PM_QS_PAINT) {
+ process_message(&msg);
+ }
while peek_msg(&mut msg, PM_QS_INPUT) {
process_message(&msg);
}