В композитор Gamescope от Valve добавлена важная оптимизация

Разработчики 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 и, вероятно, войдёт в один из ближайших стабильных релизов.

  • Просмотров: 134

Этот веб-сайт использует технические и функциональные файлы cookie. Чтобы зарегистрировать учетную запись, связаться с нами, получить наши продукты или услуги, вы должны принять нашу Политику Конфиденциальности. Нажимая кнопку «Принять» или щелкая любую ссылку на этой странице, вы соглашаетесь на использование файлов cookie и принимаете нашу Политику использования cookie-файлов.