Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Включил layers.* в about:config, что означают выводимые FPS и цвет границ слоев?

Сейчас у меня Mozilla Developer Edition 42.0a2 (2015-09-08), не знаю с какой версии появились эти свойства, но все же.
layers.acceleration.draw-fps добавляет три цифровых блока в левый верхний угол окна. Первый блок отвечает за fps, это я понял, а что показывают остальные 2, я не смог пока сообразить. Что они значат? layers.draw-borders позволяет браузеру выделять слои, грузящиеся в GPU, в документе, на сколько я знаю. Браузер выделяет их зеленым цветом, однако, бывают случаи, порой замечал на других сайтах, довольно редко правда, когда он это делает синим или даже красным цветом, что это значит?


Ответ

1) layers.acceleration.draw-fps выводит 3 числа: compositions/sec, transactions/sec, fill ratio %
Чтобы понять, что они означают, надо разбираться в архитектуре графической подсистемы Firefox. Не могу сказать, что я эксперт в этой области, но в частности из Gecko overview: compositing и вот этих двух постов: 1, 2, у меня сложилось такое понимание:
Все окно/страница разбивается на "слои" (layers): блоки, нарисовав которые друг поверх друга, можно получить искомое изображение. Например, "прикрепленная" фоновая картинка, текст, изображение в и видео могут каждый быть в своем слое. Прорисовка происходит в два этапа: сначала обновляется содержимое "слоев", потом слои складываются (это называется "compositing") в итоговое изображение на экране (в идеале - весьма эффективно, с использованием GPU). Эти два этапа выполняются в разных потоках (с т.н. OMTC - off-main-thread compositing) или даже в разных процессах (отрисовка слоев - в "content" процессе конкретной страницы, финальный compositing в основном процессе).
Это позволяет в ситуациях, когда страница притормаживает (из-за JavaScript или просто когда обновление слоев получается тяжелым) показывать лучший responsiveness, т.е. не тормозить слишком сильно с точки зрения пользователя. Например, прокрутка (scrolling) возможна за счет сдвига слоев, показать следующий кадр видео можно не дожидаясь пока отработает JS на странице.
Так вот,
Первое число - это сколько раз выполнился compositing, т.е. обновилась картинка на экране. Это то, что логично назвать FPS. Второе число, как я понимаю, - это сколько раз (в секунду) обновились "слои". (Про третье - fill ratio - кроме того, что написано по ссылке в самом начале ответа, ничего сказать не могу.)
Например, когда я на OS X проигрываю HTML5 видео в YouTube, первое число = 60FPS, второе 0. А если навести мышь на видео так, чтобы начали отображаться элементы управления видео, второе сразу становится >0.
Доступность и интерпретация этих чисел зависит от платформы, версии и настроек, на полноту ответа не претендую. Кстати, тут утверждается, что под Windows числа могут быть неверными.
2) layers.draw-borders рисуются вроде как в Compositor::DrawDiagnosticsInternal. Если я правильно читаю, то разными цветами обозначаются layer-ы разных типов, красным и голубым - картинки и одноцветные слои, соответственно.

Комментариев нет:

Отправить комментарий