Стандартный таймер Windows работает с шагом 15,6 ms, поэтому «подождать всего 1 ms» на деле растягивается до следующего тика таймера, то есть до 15,6 ms.
Почему Ограничение FPS и отправка пакетов сделаны через Sleep (короткое ожидание) → Следствие ОС будит поток только с шагом 15,6 ms → На экране Интервалы между кадрами и между отправками ввода неравномерные
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Использовать таймеры высокого разрешения, выдерживать интервалы кадров по событиям или V-Sync вместо Sleep.
Цифры для ориентира
С шагом 15,6 ms интервал 16,7 ms выдержать нельзя, поэтому интервал между кадрами прыгает между 15,6 ms и 31,2 ms.
На графике
Высоко с самого начала · распределение интервалов между кадрами
Где смотреть
Смотреть распределение MsBetweenPresents (интервал между кадрами) в PresentMon и пункт «Platform Timer Resolution» в отчёте powercfg /energy (процессы, изменившие разрешение таймера)
Подтверждает
Интервалы между кадрами скапливаются на значениях, кратных 15,6 ms (15,6 ms и 31,2 ms), и игра не запрашивает более высокое разрешение таймера
Опровергает
Если интервалы разбросаны равномерно, дело скорее в причине «Фоновые процессы занимают CPU» или в тяжёлых кадрах, чем в таймере
Чем проверить
Проверка на стороне игрока
Подробнее
В старых версиях Windows, если одна программа переключала таймер на 1 ms, это действовало на все программы. Отсюда и поверье «с открытым браузером игра идёт плавнее». Начиная с Windows 10 версии 2004 настройка действует только на запросившую программу, а Windows 11 может не выполнять запрос окна, которое свёрнуто или полностью перекрыто и не издаёт звука.
Источники
_WDF_TIMER_CONFIG (wdftimer.h)Microsoft Точность обычного таймера равна интервалу системного тика, по умолчанию 15,6 ms, у таймера высокого разрешения 1 ms
timeBeginPeriod function (timeapi.h)Microsoft До Windows 10 версии 2004 настройка глобальная, начиная с неё действует только на запросивший процесс. Windows 11 не гарантирует высокое разрешение процессам со свёрнутыми или перекрытыми окнами
Results for the Idle Energy Efficiency AssessmentMicrosoft Разрешение системного таймера по умолчанию 15,6 ms, процессы, изменившие его, видны в пункте «Platform Timer Resolution» отчёта об энергопотреблении
Powercfg command-line optionsMicrosoft powercfg /energy: анализирует систему и создаёт отчёт об энергопотреблении (HTML)