Created attachment 10017 [details] Общесистемный профайл, полученный при воспроизведении видео firefox-esr-91.3.0-alt2.aarch64 При воспроизведении FullHD видео c Youtube на Raspberry Pi 4 в firefox-esr начиная с версии 91 происходят постоянные остановки воспроизведения - примерно 5 секунд показывает, 5 секунд стоит. При этом звук воспроизводится плавно. В chromium и в firefox-esr версии 78 из p9 то же видео воспроизводится нормально. Тестировал на https://www.youtube.com/watch?v=zyZAMR56mXY Было выяснено, что для декодирования видео firefox-esr начиная с версии 91 использует библиотеку libvpx6, а firefox-esr версии 78 для того же видео использует библиотеку libavcodec58. Результаты тестирования, полученные с использованим perf и FlameGraph в приложении.
Created attachment 10018 [details] FlameGraph firefox-esr-91.3.0-alt2.aarch64
Created attachment 10019 [details] Общесистемный профайл, полученный при воспроизведении видео firefox-esr-78.15.0-alt0.p9.1.aarch64
Created attachment 10020 [details] FlameGraph firefox-esr-78.15.0-alt0.p9.1.aarch64
Created attachment 10073 [details] Общесистемный профайл, полученный при воспроизведении видео chromium-96.0.4664.45-alt2.p10.1.aarch64
Created attachment 10074 [details] FlameGraph chromium-96.0.4664.45-alt2.p10.1.aarch64
firefox-esr78 использует функции с именами, говорящими об оптимизации под aarch64: ff_vp9_loop_filter_h_16_16_neon+0x1dc (/usr/lib64/libavcodec.so.58.91.100) ff_vp9_copy64_aarch64+0x0 (/usr/lib64/libavcodec.so.58.91.100) chromium-96 также использует функции с именами, говорящими об оптимизации под aarch64: vpx_lpf_vertical_16_dual_neon+0xf0 (/usr/lib64/chromium/chromium) vpx_convolve_copy_neon+0xe4 (/usr/lib64/chromium/chromium) firefox-esr91 использует функции с именами, которые не упоминают архитектуру aarch64: vpx_lpf_vertical_16_dual_c+0x16c (/usr/lib64/libvpx.so.7.0.0) vpx_convolve8_c+0x358 (/usr/lib64/libvpx.so.7.0.0) Правильно ли собран firefox-esr91 под архитектуру aarch64?
Оказывается в спеке libvpx6 зачем-то насильно отключено использование simd на aarch64: https://git.altlinux.org/gears/l/libvpx6.git?p=libvpx6.git;a=blob;f=libvpx.spec;h=1bfe31291141c349a1e46e0d80393ff3f3cc0e13;hb=c30210172fd70b40cd853e7487e2ae7b72fe9df9#l10 Убрал, пересобрал: #294379 POSTPONED #4 [test-only] sisyphus libvpx6.git=1.11.0-alt2 На байкалах сильно легче не стало. При попытке проиграть 1080p60 видео всё равно изображение застывает. Но при проигрывании 720p60 видео заметно снизилась нагрузка на процессор(ы)
Обнаружил ещё вот такое творчество: http://git.altlinux.org/gears/f/firefox-esr.git?p=firefox-esr.git;a=blob;f=patches/0003-FEDORA-build-arm.patch;h=4588ffa89b7707f65ef49404867ae6bcd708e488;hb=18c324c362c92b29ed5f483230e572efc1902210 http://git.altlinux.org/gears/f/firefox-esr.git?p=firefox-esr.git;a=blob;f=patches/0006-ALT-Fix-aarch64-build.patch;h=0fd3213ed70dc27461c3eee43e10b14476c602e5;hb=18c324c362c92b29ed5f483230e572efc1902210 по выпиливанию использования NEON на armv8. Повисает в воздухе вопрос "но ЗАЧЕМ?"
Включение SIMD в libvpx6 несколько помогает, но смотреть HD видео в firefox всё равно невозможно. Хотя ffplay (c -vcodec libvpx-vp9) нормально воспроизводит то же самое видео. Скорее всего есть ещё несколько проблем, связанных, например, с отображением уже декодированных кадров. Возможно firefox не догадывается, что для *отображения* можно использовать GL ES (текстуры), или video overlay, и пытается сам преобразовать yuv -> RGB. (Но это не точно!)
Created attachment 10274 [details] system-wide on-CPU profile: firefox plays video (libvpx+NEON decoding)
Судя по профайлу "firefox plays video (libvpx+NEON decoding)" firefox НЕ задействует GPU для преобразования YUV в ARGB. А именно, ~20% собранных стеков содержат функцию linear_row_yuv<false>, которая определена в файле gfx/wr/swgl/src/composite.h [1]. В файле gfx/wr/swgl/README.md зелёным по терминалу написано: This is a relatively simple single threaded software rasterizer designed for use by WebRender. Понятно, что это обречено тормозить. А вот почему firefox вместо GL ES (как это делают ffplay и chromium) делает какую-то неведомую фигню - совершенно не ясно. [1] http://git.altlinux.org/gears/f/firefox-esr.git?p=firefox-esr.git;a=blob;f=mozilla/gfx/wr/swgl/src/composite.h;h=1a74d6aef5441288487655b9fcfdc00ac2cea17a;hb=1587622310e4b957293342baeceb646d78f9a776#l847 [2] http://git.altlinux.org/gears/f/firefox-esr.git?p=firefox-esr.git;a=blob;f=mozilla/gfx/wr/swgl/README.md;h=2c43ed881957398548ce9658f018a9ea7eb8855f;hb=1587622310e4b957293342baeceb646d78f9a776#l6
Заметил, что при запуске firefox печатает такое: Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: DRM device has no render node (t=0.992646) [GFX1-]: glxtest: DRM device has no render node Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: DRM device has no render node (t=0.992646) |[1][GFX1-]: No GPUs detected via PCI (t=0.992828) [GFX1-]: No GPUs detected via PCI Возможно именно поэтому firefox не использует GL ES для отображения yuv (а пытается преобразовать в [a]rgb на CPU). P.S. Ну здравствуй, firefox, добро пожаловать в 21й век! - Кроме PCI есть over9000 шин - Бывают (и много) render-only GPU
Версия пакета: fifefox-esr-102.12.0-alt1.aarch64 Стенд: RPi4 с Alt Workstation 10.0 Ошибку воспроизвести не удалось