O timer padrão do Windows trabalha em passos de 15,6 ms, então um “espere só 1 ms” na prática vai até o próximo ciclo do timer, podendo chegar a 15,6 ms.
Por quê Limitação de frames e envio de pacotes implementados com Sleep (espera curta) → Efeito O SO só acorda a thread em passos de 15,6 ms → Na tela Os intervalos entre frames e entre envios de input ficam irregulares
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Usar timer de alta resolução, fazer o pacing com base em eventos ou no V-Sync, sem depender de esperas com Sleep.
Números de referência
Com passos de 15,6 ms, não dá para acertar um intervalo de 16,7 ms, e o intervalo entre frames alterna entre 15,6 ms e 31,2 ms.
No gráfico
Sempre alto desde o início · Distribuição dos intervalos entre frames
Onde olhar
Ver a distribuição de MsBetweenPresents (intervalo entre frames) no PresentMon e o item “Platform Timer Resolution” do relatório powercfg /energy (processos que mudaram a resolução do timer)
Confirma se
Os intervalos entre frames se concentram em múltiplos de 15,6 ms, como 15,6 ms e 31,2 ms, e o jogo não pede uma resolução de timer mais alta
Descarta se
Intervalos espalhados de forma uniforme: aponta mais para “Processos em segundo plano ocupando a CPU” ou para a carga do frame do que para o timer
Como verificar
Verificação no ambiente do jogador
Saiba mais
Nas versões antigas do Windows, quando um programa mudava o timer para 1 ms, a mudança valia para todos os programas. Por isso circulava até a dica “com o navegador aberto, o jogo fica mais suave”. A partir do Windows 10 versão 2004, a mudança vale só para o programa que a pediu, e o Windows 11 pode ignorar o pedido de janelas minimizadas ou totalmente encobertas que não estejam emitindo som.
Fontes
_WDF_TIMER_CONFIG (wdftimer.h)Microsoft A precisão dos timers comuns é o intervalo do tick do relógio do sistema, 15,6 ms por padrão; a dos timers de alta resolução é de 1 ms
timeBeginPeriod function (timeapi.h)Microsoft Antes do Windows 10 versão 2004, era uma configuração global; depois, vale só para o processo que pediu; o Windows 11 não garante a resolução alta para processos com janelas encobertas ou minimizadas
Results for the Idle Energy Efficiency AssessmentMicrosoft Resolução padrão do timer do sistema: 15,6 ms; o item “Platform Timer Resolution” do relatório de energia mostra os processos que mudaram a resolução do timer