LINUX.ORG.RU

Firefox VA-API/X11 (заброшен; смержили другую реализацию)

 , , ,


4

10

Проект по добавлению VA-API/X11 в Firefox. Заброшен.
Текущее состояние на 3 июля 2020: (комментарий).

Текст от 25 марта 2020:
Атипичная простуда в очередной раз всех напугала и напомнила, что люди не вечные, причём часто внезапно. Было бы жаль совсем потерять результаты работы, поэтому выкладываю текущий вариант патча к Firefox с поддержкой VA-API под иксами.

Это ещё не готовый к мержу патч, всё держится на честном слове. Из текущих проблем:

  • если не подкрутить настройки, ест больше ватт, чем полностью программное декодирование;
  • с WebRender видео не видно; возможно роняет контент-процесс;
  • с layers-opengl нет видео, если не включить gfx.use-glx-texture-from-pixmap;
  • истерично переаллоцирует X11-пиксмапы, если под layers-opengl переключиться на другую вкладку.

Чтобы под layers-basic экономия от декодирования вообще имела смысл, нужно включить gfx.xrender.enabled. Без XRender чтение картинки обратно в память CPU ест больше энергии, чем просто декодирование сразу на CPU.

До рабочего варианта ещё далеко. Но если кто-то захочет собрать и потестить, ссылка внизу. Патчсет базируется на 74.0. Оригинальный репозиторий был в Mercurial, и файлы .gitignore там где-то игнорят нужное для сборки, поэтому не факт, что код как есть соберётся. Если так оно и есть, должно помочь использование релизных исходников от 74.0 с последующим накладыванием патча.

Для VP9 Firefox предпочитает ffvpx, особую сборку ffmpeg, которую таскает с собой. Чтобы VP9 декодировать через системный ffmpeg с поддержкой VA-API, нужно выключить media.ffvpx.enabled.


https://github.com/i-rinat/firefox/compare/master...vaapi

★★★★★

Хм, круто. А можно технических подробностей? Этот патч переиспользует код, добавленный Мартином Странски (который для декодирования под wayland)? Насколько я понимаю, ты пошёл иным путём нежели предложенный Мартином (смена рендёринга в иксах с GLX на EGL)?

eternal_sorrow ★★★★★ ()

Почему вы делаете патчи к ФФ, а не к Хромиуму, или к нему тоже делаете?

Ну просто при всём прочем, кажется что у Хромиума больше шансов выжить в исторической перспективе чем у ФФ, имхо.

bonta ★★★ ()
Ответ на: комментарий от bonta

После событий с рекламой и переходом многих интересных и полезных аддонописателей только на фф, под большим вопросом выживание хромиума, а не фф. Он и раньше ничем хорошим не отличался, а сейчас и подавно.

anonymous ()
Ответ на: комментарий от anonymous

Ну как-то на рекламу пофиг, потому что лично мне она (в одном из Хромообразных клонов) не прилетает.

А вот объективно по производительности и по потреблению памяти Хромообразные куда приятнее чем ФФ.

Ну и в принципе учитывая научно-техническую мощь Гугла и огромного количества сторонних организаций, который делают клоны на этом браузере (Опера, Яндекс, Майкрософт) - и все свои наработки складывают в единую копилку (совместно работают над некоторыми аспектами общего кода, а уже потом оборачивают в свою уникальную функциональность) - ну короче это все выглядит куда более перспективно чем Моззила и те, якобы перешедшие аддонописатели только на ФФ.

bonta ★★★ ()
Ответ на: комментарий от bonta

А вот объективно по производительности … Хромообразные куда приятнее чем ФФ

Тут согласен.

по потреблению памяти … Хромообразные куда приятнее чем ФФ.

А тут бред. Времена, когда Firefox жрал кучу RAM давно прошли. Теперь Firefox на удивление экономичен и лучший выбор для слабого и старого ноутбука с < 8GB RAM.

Это я как пользователь хромообразных говорю.

EXL ★★★★★ ()
Ответ на: комментарий от gtk3

/0

А вот, как человек, который скрипя зубами расщедрился на 16 (больше мой старенький Lenovo b570e не умеет), я с ним, пожалуй, соглашусь. 8Гб на данный момент уже необходимый минимум и часто хватает впритык.

SkyMaverick ★★ ()
Ответ на: комментарий от bonta

У хромиума никаких перспектив нет. Только корпоративный фашизм в будущем: отключение аддонов убирающих рекламу, запрет на контроль скриптов аддонами — ничего хорошего.

With ★★☆ ()
Ответ на: комментарий от EXL

Времена, когда Firefox жрал кучу RAM давно прошли.

в принципе да, оперативы он жрёт немного, но проц прожирает люто.

Теперь Firefox на удивление экономичен и лучший выбор для слабого и старого ноутбука с < 8GB RAM.

это нифига не старый и не слабый ноутбук с таким огромным объёмом памяти.

OpenMind ★★★ ()
Ответ на: комментарий от bonta

А вот объективно по производительности и по потреблению памяти Хромообразные куда приятнее чем ФФ.

Пока не запустишь что-то ресурсоёмкое, например видеоредактор перегнать из одного формата в другой. И тут-то у хроумиума начинают отваливться вкладки, сам он начинает крешиться, а если и работает, то всё дёргается и тормозит. А где же GPU ускорение? Ведь нагружен только процессор, странно. По потреблению памяти все нынешние браузеры одинаковые. Так что хромиум — говно!

With ★★☆ ()
Ответ на: комментарий от With

А вот это странно. На убунте 18.04.4 хромиум летает. Что вы там запускаете, что он падает? Да и GPU ускорение пашет идеально, это я как человек, смотрящий 720Р на ютубе в браузере AMD E1-2500 говорю) При установке браузера, когда оно не работало, даже 360р лагало.

OpenMind ★★★ ()
Последнее исправление: OpenMind (всего исправлений: 1)
Ответ на: комментарий от With

Пока не запустишь что-то ресурсоёмкое, например видеоредактор перегнать из одного формата в другой. И тут-то в линуксе всё дёргается и тормозит. А где же GPU ускорение? Ведь нагружен только процессор, странно. По потреблению памяти все нынешние браузеры одинаковые. Так что линукс — говно!

Я вот больше так замечал. Если запустить что на мощной машине, то с гуёвыми задачами можно вообще гулять… Главное меню секунд 10 с анимацией будет открываться…

fornlr ★★★★★ ()
Ответ на: комментарий от OpenMind

На ютубе крутится в нём всё норм при нагрузке, само видео в смысле HD или не HD, скролл страницы уже лагает и есть вероятность креша вкладки или вылета самого хромиума. Нагрузка любая: виртуалка, игра под Wine, видеоредактор.

With ★★☆ ()
Ответ на: комментарий от With

скролл страницы уже лагает и есть вероятность креша вкладки или вылета самого хромиума

Странно. У меня на встройке HD8240 что-то вообще не лагает, только когда комп загружается и проверка обновлений идёт, нагруженый в 100% проц даёт лаг, а так я даже кампиляюцию Godot из исходников держал фоном и смотрел видео, и норм было.

            .-/+oossssoo+/-.               madness@ThinkPad-X140e 
        `:+ssssssssssssssssss+:`           ---------------------- 
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 18.04.4 LTS x86_64 
    .ossssssssssssssssssdMMMNysssso.       Host: 20BLS00300 ThinkPad X140e 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Kernel: 5.0.0-37-generic 
  +ssssssssshmydMMMMMMMNddddyssssssss+     Uptime: 4 hours, 11 mins 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Packages: 2904 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Shell: bash 4.4.20 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Resolution: 1366x768 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   DE: KDE 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   WM: KWin 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Theme: Breeze Dark [KDE], Breeze-Dark [GTK2/3] 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Icons: Breeze-dark [KDE], Breeze [GTK2/3] 
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/    Terminal: konsole 
  +sssssssssdmydMMMMMMMMddddyssssssss+     CPU: AMD E1-2500 APU (2) @ 1.400GHz 
   /ssssssssssshdmNNNNmyNMMMMhssssss/      GPU: AMD Radeon HD 8240 
    .ossssssssssssssssssdMMMNysssso.       Memory: 3972MiB / 7242MiB 
      -+sssssssssssssssssyyyssss+- 
        `:+ssssssssssssssssss+:`                                   
            .-/+oossssoo+/-. 

OpenMind ★★★ ()
Ответ на: комментарий от With

Редакторы не запускаю (это тупо, любой редактор должен быть локальной апой) А вот 3д таки бывало, отлично работает в Хромиуме (2гис, гуглкарты, ютуб иногда аппаратный кодек использует на моей видюхе и иногда это лишь проблема видюхи (она старая и не имеет широкий набор кодеков) а не хромиума…)

bonta ★★★ ()
Ответ на: комментарий от EXL

Я тут две вещи могу сказать.

Первая это мне кажется что пока кучу вкладок не открыть - на малом количестве вкладок если сравнивать дефолтный ФФ и Хромиумы - то ФФ чуть меньше, если открыть 30+ каких-нить ресурсоёмких сайтов то ФФ начинает на 100тни мгб больше быть..

А вторая вещь - у Оперы (ну дамую почему то что у всех хромообразных так же) при старте она начинает то ли все вкладки загружать толи n-е число от текущей - что при старте сожрет память. А так может эти вкладки не потребовались бы в этот сеанс.

Так вот у меня стоит плагин что-то типа лайзи-лоад или как-то так зовется - он запрещает браузеру загружать вкладку пока на нее не тыкнет пользователь, тогда, имхо, хромообразные на малом количестве вкладок едят не больше ФФ.

bonta ★★★ ()
Ответ на: комментарий от eternal_sorrow

Этот патч переиспользует код, добавленный Мартином Странски (который для декодирования под wayland)?

Часть изменений специально сделал так же, как сейчас в репозитории mozilla-central: так будет проще портировать патч, когда дело дойдёт до мержа. То есть тот код, который вызывает функции ffmpeg, такой же. Он от платформы не зависит. Платформо-зависимый код конечно же другой, он же зависит от платформы, а платформа — не Wayland.

ты пошёл иным путём нежели предложенный Мартином (смена рендёринга в иксах с GLX на EGL)?

Да, я просто рисую декодированный кадр в Pixmap (Drawable), который потом используется композитором. По сравнению с экспортом кадров через dma-buf такой подход требует больше видеопамяти, до 20 дополнительных копий кадра, и ест больше ресурсов из-за копирования в промежуточный Drawable. Правда, копирование выполняет GPU, причём драйвер или даже иксы вполне могут реализовывать что-то типа copy-on-write, а потребление видеопамяти может оказаться схожим из-за задержки кадров буферами композитора. Примерно так же аппаратное декодирование и отрисовка работали в Flash + freshplayerplugin.

Идея Мартина с переводом всего на dma-buf красивая, но плохо реализуемая.

i-rinat ★★★★★ ()
Ответ на: комментарий от bonta

Почему вы делаете патчи к ФФ, а не к Хромиуму, или к нему тоже делаете?

В Chromium это уже давно есть. Но пока Google не даст отмашку, в готовых сборках Chrome этого не будет, даже под переключателем. Время показало, что сопровождающие дистрибутивов тоже не горят желанием патчить каждую версию Chromium, даже просто чтобы существующий код включить.

В Firefox если код хорошего качества, его смержат, и у пользователей будет возможность включить фичу без необходимости пересобирать браузер самому.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

А напугал же. Хорошо, что у тебя всё в порядке.

Вообще да, проблема не теряющая своей актуальности. Никак вот руки не дойдут обновить и причесать маленькие патчики, что пылятся где-то на диске…

gag ★★★★★ ()
Ответ на: комментарий от Elmer_

а в чем нерельность сборки хромиума?

Сырцы открыты, на официальном сайте подробные пошаговые инструкции какие дополнительные компоненнты нужно скачать и каким и командочками собрать начиная от windows кончая android и macos.

А кто хочет и без всяких инструкций соберет - вот есть же порт браузера на ФриБСД, и собирают его вероятно на домашнем компе а не в каком-нить научном бюро с суперэвм :)

bonta ★★★ ()

Какой ужас, мои седины, и это заметьте с++, не си даже. Потом они удивляются откуда все эти UB, дыры и повреждения данных.

anonymous ()

Ты перешёл дорогу могучим мегакорпорациям, которые спят и видят, чтобы Linux не стал популярен на десктопах. Когда эдоби выкатила VDPAU во флеш плеере, долбануло даже по glibc. Вот настолько сильно не хочет кто-то, чтобы в линуксе по-нормальному это работало. Ну жди ломания кода со стороны Mozilla, чтобы твои патчи/плагины не работали. А то и вообще со стороны ядра.

anonymous ()
Ответ на: комментарий от Elmer_

firefox хотя бы реально собрать на домашнем ПК, в отличие от хромиума

Да без проблем:

portmaster -gD www/chromium

Можно и патчи свои подсунуть, если делать сборку через стадии make.

iZEN ★★★★★ ()
Ответ на: комментарий от anonymous

должен же быть вывод сразу в opengl текстурку

Пример есть? Как это работает для случая, когда декодирование происходит в одном процессе, а рисование — в другом?

i-rinat ★★★★★ ()
Ответ на: комментарий от anonymous

Не торопи события. Вяленый — это, конечно, круто, но он еще сыроват. Из DE с ним нормально работает только гном. Пока лучше посидеть на иксах, если ты не хочешь разбиратся со sway.

anti_win ★★ ()
Ответ на: комментарий от i-rinat

на vaapi возможности попробовать нет, на vdpau декодированный кадр доступен как текстурка:

glVDPAURegisterVideoSurfaceWithPictureStructureNV(vds,GL_TEXTURE_2D,2,tx+2*i,1);
glVDPAUMapSurfacesNV(1,vdp+i);
glDrawArrays(GL_TRIANGLE_STRIP,0,4);
glVDPAUUnmapSurfacesNV(1,vdp+i);
anonymous ()
Ответ на: комментарий от anonymous

Не припомню, чтобы в описаниях VDPAU было указано, что идентификаторы можно перебрасывать между контекстами, так что это всё рассчитано на работу внутри одного процесса. В Firefox сейчас декодирование происходит в одном процессе, а рисование на экране уже в другом, поэтому нужно как-то перебрасывать данные.

Что интересно, в кодовой базе предусмотрена передача текстур между OpenGL-контекстами в разных процессах. Через Pixmap. Один процесс рисует в Pixmap, передаёт его идентификатор другому. Тот преобразует Pixmap в текстуру и пользуется дальше.

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от bonta

Ну как-то на рекламу пофиг, потому что лично мне она (в одном из Хромообразных клонов) не прилетает. На андроиде пользоваться хромом невозможно, так как дополнений там нет.

anonymous ()

Немного обновлений.

  • Перетащил патчи на клон Nightly (gecko-dev). В Nightly по умолчанию включают WebRender, так что для тестов под другими режимами нужно WebRender отключать. Но теперь не нужно возиться с накладыванием патчей на релизный Firefox, версия из репозитория компилируется.
  • Подружил WebRender с X11 Pixmap. Картинку теперь видать, если включить gfx.use-glx-texture-from-pixmap.
  • Добавил опцию media.ffmpeg.vaapi.enabled.

Для режима layers-basic стоит включать gfx.xrender.enabled, иначе декодированные кадры читаются обратно на CPU. Для layers-opengl и WebRender нужно включать gfx.use-glx-texture-from-pixmap, чтобы кадры было видно.

Текущие проблемы:

  • Content-процесс падает во время завершения, если используется WebRender.
  • WebRender не любит пул переиспользуемых текстур. Хочет, чтобы на каждый кадр создавали новые с передачей ему владения.
  • Скорее всего, повышенная нагрузка при уходе вкладки в фон в режиме layers-opengl всё ещё есть. До этого пункта ещё руки не дошли.
i-rinat ★★★★★ ()