Разработчики Valve продолжают полировать инструменты, делающие Linux-гейминг не только возможным, но и комфортным. Один из ключевых компонентов — композитный менеджер Gamescope, который отвечает за изоляцию игр, поддержку переменной частоты обновления (VRR) и наложение интерфейсов вроде MangoHud. Недавний коммит авторства Андреса Родригеса (Andres Rodriguez) с мержем ветки misyl/output_time_steam_fps привносит важное улучшение в механизм сбора статистики производительности.
Суть изменений
Ранее MangoHud (компонент, отвечающий за отображение статистики) полагался на данные о времени кадра, поступающие непосредственно от игрового приложения. Однако в случае с играми, работающими через слои трансляции (Proton/DXVK/VKD3D), эти данные могли быть не совсем точными из-за дополнительных прослоек.
Новое изменение добавляет в Gamescope возможность использовать тайминги вывода (output timing) для расчёта и отображения частоты кадров. Ключевые моменты:
- Идентификация приложения: В структуру коммита (
commit_t) добавлено полеappID, которое позволяет точно определить, какому приложению принадлежит кадр. - Переключатель mangoapp_use_output_timing: Добавлена консольная переменная (
ConVar)mangoapp_use_output_timing, которая по умолчанию установлена вtrue. Это позволяет при необходимости отключить новое поведение и вернуться к старому методу. - Два пути сбора статистики: В коде теперь реализованы два подхода:
- Старый: Вызов
wlserver_app_presentedс временем кадра, вычисленным как разница между временем презентации текущего и предыдущего коммита. - Новый (при включённой переменной): Вызов
mangoapp_output_update, который использует данные о времени от вывода (vblanktime) для более точного расчёта и последующего вызоваwlserver_app_presentedуже с appID базовой плоскости.
- Старый: Вызов
Почему это важно?
Для конечного пользователя это изменение означает более достоверные показатели частоты кадров в оверлеях. Особенно это актуально для:
- Игр через Proton: Трансляция DirectX в Vulkan может вносить дополнительные задержки, и старый метод мог показывать "капризные" значения.
- Систем с переменной частотой обновления (VRR): Точное знание времени вывода каждого кадра критически важно для корректной работы FreeSync/G-Sync.
- Steam Deck и других портативных консолей: На устройствах с ограниченными ресурсами и динамическим управлением частотой кадров (через FSR или другие апскейлеры) точная статистика помогает лучше понимать реальную производительность.
Технические детали
Коммит затрагивает три основных файла:
src/commit.h: В структуру коммита добавлено полеappID, которое теперь передаётся при импорте коммита.src/mangoapp.cpp: Добавлена функцияmangoapp_output_update, которая активируется, если включена соответствующая ConVar. Она использует глобальные переменныеg_uCurrentBasePlaneAppIDиg_uCurrentBasePlaneIsFifoдля определения приложения и типа очереди.src/steamcompmgr.cpp: Основная логика: добавлены глобальные переменные для хранения appID текущей базовой плоскости, инициализация ConVar, а также разделение старого и нового путей вызоваwlserver_app_presented.
Это обновление — ещё один шаг к тому, чтобы сделать Linux идеальной игровой платформой. Мелочи, вроде точности отображения FPS, складываются в общее впечатление о системе, и команда Valve уделяет им должное внимание.
Изменение уже доступно в актуальной ветке разработки Gamescope и, вероятно, войдёт в один из ближайших стабильных релизов.