diff --git a/crates/gpui/src/platform/windows/events.rs b/crates/gpui/src/platform/windows/events.rs index 61f410a8c6f9ebbdf70ce2ba29c18b83229f552f..2b66388368f48a9f296c6692a8cac57d7de8b9f9 100644 --- a/crates/gpui/src/platform/windows/events.rs +++ b/crates/gpui/src/platform/windows/events.rs @@ -380,6 +380,7 @@ fn handle_keydown_msg( state_ptr: Rc, ) -> Option { let mut lock = state_ptr.state.borrow_mut(); + lock.keydown_time = Some(std::time::Instant::now()); let Some(input) = handle_key_event(handle, wparam, lparam, &mut lock, |keystroke| { PlatformInput::KeyDown(KeyDownEvent { keystroke, @@ -1237,10 +1238,15 @@ fn draw_window( .request_frame .take()?; request_frame(RequestFrameOptions { - require_presentation: false, + require_presentation: true, force_render, }); - state_ptr.state.borrow_mut().callbacks.request_frame = Some(request_frame); + let mut lock = state_ptr.state.borrow_mut(); + if let Some(keydown_time) = lock.keydown_time.take() { + let elapsed = keydown_time.elapsed(); + println!("Elapsed keydown time: {:.02} ms", elapsed.as_secs_f64() * 1000.0); + } + lock.callbacks.request_frame = Some(request_frame); unsafe { ValidateRect(Some(handle), None).ok().log_err() }; Some(0) } diff --git a/crates/gpui/src/platform/windows/window.rs b/crates/gpui/src/platform/windows/window.rs index 1141e93565b5afb5602a4cc921970f8f9e21d52d..42f6847a2350154ba2adfb77a2085a1475129c06 100644 --- a/crates/gpui/src/platform/windows/window.rs +++ b/crates/gpui/src/platform/windows/window.rs @@ -49,6 +49,7 @@ pub struct WindowsWindowState { pub hovered: bool, pub renderer: DirectXRenderer, + pub keydown_time: Option, pub click_state: ClickState, pub system_settings: WindowsSystemSettings, @@ -115,6 +116,7 @@ impl WindowsWindowState { let nc_button_pressed = None; let fullscreen = None; let initial_placement = None; + let keydown_time = None; Ok(Self { origin, @@ -133,6 +135,7 @@ impl WindowsWindowState { system_key_handled, hovered, renderer, + keydown_time, click_state, system_settings, current_cursor,