한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Game Lag White Paper › L2 Client OS and device

Timer resolution Timer resolution (Windows 15.6ms)

Cause ID co-timer · Primary owner Game team (Client development)

Open the interactive card with figures and simulations →

Windows’ default timer ticks every 15.6 ms, so “sleep for just 1 ms” actually lasts until the next timer tick, up to 15.6 ms.

Why Frame limiting and packet sending are implemented with Sleep (a short wait) → Effect The OS wakes the thread only every 15.6 ms → On screen Frame intervals and input send intervals become uneven

Symptoms
Stutter
Factors
Jitter
Who’s affected
Just me
When
Always
Owner
Primary owner Game team (Client development)
Game team action items
Use high-resolution timers, replace Sleep-based waits with event- or V-Sync-based pacing.
Ballpark numbers
15.6 ms steps can’t hit a 16.7 ms interval, so frame intervals alternate between 15.6 ms and 31.2 ms.
On the graph
Always high · Frame interval distribution
Where to look
Look at the distribution of PresentMon’s MsBetweenPresents (frame interval) and the “Platform Timer Resolution” entries in the powercfg /energy report (processes that changed the timer resolution)
Confirmed if
Frame intervals cluster at multiples of 15.6 ms, such as 15.6 ms and 31.2 ms, and the game doesn’t request a higher timer resolution
Ruled out if
Intervals spread out evenly: more likely “Background processes taking up CPU” or frame load than the timer
Check with
The player’s own environment
Learn more
In older versions of Windows, when one program set the timer to 1 ms, it applied to every program. That’s where the saying “leave a browser open and your game runs smoother” came from. Since Windows 10 version 2004, the change applies only to the program that requested it, and Windows 11 may ignore requests from windows that are minimized or fully hidden and not playing sound.

Sources

  1. _WDF_TIMER_CONFIG (wdftimer.h) Microsoft
    Standard timer accuracy is the system clock tick interval, 15.6 ms by default; high-resolution timers get 1 ms
  2. timeBeginPeriod function (timeapi.h) Microsoft
    Before Windows 10 2004 it was a global setting; since then it applies only to the requesting process, and Windows 11 doesn’t guarantee high resolution to processes whose windows are hidden or minimized
  3. CreateWaitableTimerExW function (synchapi.h) Microsoft
    High-resolution waitable timer flag CREATE_WAITABLE_TIMER_HIGH_RESOLUTION
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsBetweenPresents: time between this Present() call and the previous one (ms)
  5. Results for the Idle Energy Efficiency Assessment Microsoft
    Default system timer resolution is 15.6 ms; the “Platform Timer Resolution” entries in the energy report show which processes changed the timer resolution
  6. Powercfg command-line options Microsoft
    powercfg /energy: analyzes the system and generates an energy report (HTML)

See also

Same layer: L2 Client OS and device

Same symptom (Stutter), other layers

View the interactive card with figures and simulations