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

Анатомия игровых лагов › L2 ОС и устройство клиента

Ограничение обработки в свёрнутом или неактивном окне Minimized / unfocused window throttling

ID причины co-unfocused · Основной ответственный Команда разработки · Разработка клиента

Открыть карточку в основной версии с иллюстрациями и экспериментами →

Когда игрок переключается на другое окно или сворачивает игру, и сама игра, и Windows ради экономии энергии замедляют её работу. По возвращении накопившиеся пакеты приходят разом, или соединение уже оборвано.

Почему Переключение на другое окно через Alt+Tab или сворачивание игры → Следствие Пока игру не видно, она сильно снижает FPS или останавливается, а Windows тоже понижает приоритет невидимых программ → На экране В момент возвращения перемотка, а если игра была свёрнута долго, дисконнект

Симптомы
Перемотка, Микрофризы, Дисконнект
Факторы
Остановка
У кого
Только у меня
Когда
При определённом действии, После бездействия
Ответственные
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Продолжать приём пакетов и хартбиты в отдельном потоке, даже когда окно не видно, проверить настройку движка «Run In Background», при возвращении разом переходить к актуальному состоянию.
Цифры для ориентира
Если в невидимом окне FPS снижается до 5–10, один кадр длится 100–200 ms. Игра, которая обрабатывает пакеты раз в кадр, читает их с таким же опозданием.
На графике
Провал, затем пачка · интервал между кадрами (до и после переключения окна), число обработанных пакетов
Где смотреть
С запущенным PresentMon переключиться через Alt+Tab или свернуть игру и посмотреть интервал между кадрами, пока окно не видно. Писать в лог игры моменты смены фокуса окна и сопоставлять их с причинами обрывов
Подтверждает
Пока окно не видно, интервал между кадрами растёт до 100 ms и больше или запись прерывается, а в момент возвращения накопившиеся пакеты обрабатываются разом, и получается перемотка. Если игра свёрнута долго, соединение рвётся по таймауту хартбита
Опровергает
Если то же самое и с открытым окном, это «Фоновые процессы занимают CPU» или проблема в сети
Чем проверить
Проверка на стороне игрока
Подробнее
Windows 11 не гарантирует таймер 1 ms программам, чьё окно свёрнуто или полностью перекрыто и не издаёт звука. На ноутбуке, работающем от батареи, такие программы переводятся на самую экономичную частоту, а на CPU с ядрами разных типов могут работать на медленных энергоэффективных ядрах. Если из двух клиентов на одном ПК странно ведёт себя только фоновый, посмотрите также причину «Ограничение обработки в фоновом окне».

Источники

  1. Quality of Service Microsoft
    Программы, окна которых не видны и не слышны, получают Low QoS: при работе от батареи они выполняются на самой экономичной частоте CPU и на энергоэффективных ядрах
  2. timeBeginPeriod function (timeapi.h) Microsoft
    Windows 11 не гарантирует процессам со свёрнутыми или перекрытыми окнами разрешение таймера выше стандартного
  3. Application.runInBackground Unity
    В Unity по умолчанию false, поэтому, когда окно уходит в фон, игровой цикл останавливается
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsBetweenPresents: время между текущим и предыдущим вызовом Present() (ms)

Смотрите также

Тот же слой: L2 ОС и устройство клиента

Причины с тем же симптомом (Перемотка) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами