Merge pull request 'perf(window): block message loop while paused on Win32 (#134)' (#152) from claude/issue-134 into master
This commit is contained in:
commit
7720f0a9bc
1 changed files with 13 additions and 0 deletions
|
|
@ -698,7 +698,20 @@ void Window::StartSync() {
|
|||
}
|
||||
#endif
|
||||
#ifdef CRAFTER_GRAPHICS_WINDOW_WIN32
|
||||
// While updating, the FIFO present inside Update() paces this loop to the
|
||||
// vblank, so the PeekMessage poll is vsync-gated. While NOT updating
|
||||
// (paused / minimized / stopped) nothing throttles the loop, and a bare
|
||||
// PeekMessage(PM_REMOVE) spin pins a core at 100% while uselessly re-running
|
||||
// Gamepad::Tick() (mutex + per-pad COM reads) and onBeforeUpdate every
|
||||
// iteration. Block on the message queue instead, waking on input or after a
|
||||
// short timeout so gamepad polling / onBeforeUpdate still tick at a sane
|
||||
// rate (e.g. to detect a controller button asking to resume).
|
||||
constexpr DWORD kPausedPollIntervalMs = 16;
|
||||
while(open) {
|
||||
if (!updating) {
|
||||
MsgWaitForMultipleObjectsEx(0, nullptr, kPausedPollIntervalMs,
|
||||
QS_ALLINPUT, MWMO_INPUTAVAILABLE);
|
||||
}
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||
TranslateMessage(&msg);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue