Консоль оператора
C открывает второе окно на мониторе, отличном от того, где идёт показ, чтобы вести
приложение со стола, а не печатать у проектора. В нём есть список пресетов и меню настроек — пока
оно открыто, ни то, ни другое больше не рисуется поверх показа — плюс полоса управления
(prev, next, rotate, auto, dwell -/+, всё кликабельно), строка с тем, что автосмена
возьмёт следующим, и живой предпросмотр вывода, вписанный в угол.
Она выключена по умолчанию и ничего не стоит, пока закрыта: ни второй поверхности, ни
промежуточной цели рендера, ни лишней копии на кадр. Открыть её можно строкой Console в меню
настроек, клавишей C или при запуске через --console / enabled = true в разделе [console]
файла config.toml; все четыре пути — один и тот же код, поэтому разойтись в том, открыта она или
нет, они не могут. Монитор консоль выбирает по тому же правилу «имя важнее индекса», что и сам
показ — сначала [console] display_name, затем [console] display, — а если это приводит её на
монитор показа, она переезжает на другой, если он есть. Закрытие консоли из её собственного меню
настроек оставляет это меню на показе, поэтому вместе с окном меню не теряется.
На машине с одним монитором она открывается обычным окном на нём же — это поддерживаемый способ работы, а не ошибка.
Открытая консоль не отнимает у вывода ничего сверх шума измерения. Это измерено на пяти сочетаниях
двух ключей темпа — frame_latency и present_every_n, оба описаны в
Configuration — и трёх режимах времени кадра на машине разработчика проекта,
поэтому значения по умолчанию можно оставить как есть — подстраивать нечего. Строка
console opened: в diagnostics.log называет режим, задержку кадра после ограничения и
действующий темп, а периодическая заметка console open: несёт итоги показанных / пропущенных /
прореженных кадров — именно это делает замер стоимости на чужой машине правдоподобным, а не просто
низким.
Как отзеркалить показ в другую программу
--preview stdout отправляет кадры, которые видит проектор, тому, кто запустил приложение, — сырыми
пикселями в стандартный вывод. Так редактор смотрит на настоящий показ, а не на второй,
безоконный. Зеркало — это масштабированная копия с полями фиксированного размера, 640x360, если
--preview stdout@WIDTHxHEIGHT не назвал другой, поэтому изменение размера окна или полный экран
никогда не меняют то, что получает читатель; а порядок каналов назван в поле format события
stream, а не угадывается. Кадр по-прежнему рисуется в свою настоящую цель без изменений; копия для
зеркала снимается рядом. Полное сравнение с безоконным потоком — в
Headless capture and video.
Цикл отрисовки никогда его не ждёт. Промежуточная копия снимается заодно с отправкой самого кадра, а её отображение берётся на следующем кадре неблокирующим опросом, поэтому ещё не готовый кадр не стоит показу ничего. Зеркало из-за этого отстаёт от проектора на кадр — в этом вся цена того, что оно никогда не тормозит.
Оно пропускает кадры, а не тормозит. Читатель медленнее показа теряет кадры; показ идёт дальше. Это
противоположность безоконному --sink stdout, который блокирует: у безоконного цикла нет срока
показа кадра, который можно пропустить, а у этого есть.
Консоль ему не нужна, и закрытие консоли его не убирает: это два независимых потребителя одного
промежуточного результата. Геометрия берётся у вывода и объявляется до первого кадра событием
stream в стандартном потоке ошибок (при --events), поэтому читатель знает, как разбить поток на кадры.
Цена записана, а не предполагается. При выходе и при закрытии консоли в diagnostics.log
добавляется заметка preview с названием режима, p50 и p99 времени кадра показа и — если зеркало
было включено — сколько кадров оно записало и сколько потеряло. Счётчики кадров и делают замер
замером: прогон, показавший время кадра и ноль записанных кадров, измерял зеркало, которое ничего
не доставило. Цену даёт сравнение прогона с флагом и без него; заметка называет свой режим, поэтому
перепутать их нельзя.
Built from f4f807a at version 0.178.0. This site tracks main and is not versioned per release.