Bug 41486 - Воспроизведение FullHD видео c Youtube на RPi4 постоянно останавливается
Summary: Воспроизведение FullHD видео c Youtube на RPi4 постоянно останавливается
Status: CLOSED WORKSFORME
Alias: None
Product: Branch p10
Classification: Unclassified
Component: firefox-esr (show other bugs)
Version: не указана
Hardware: aarch64 Linux
: P5 normal
Assignee: qa-team@altlinux.org
QA Contact: qa-p10@altlinux.org
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-12-02 14:38 MSK by jqt4
Modified: 2023-06-22 11:45 MSK (History)
2 users (show)

See Also:


Attachments
Общесистемный профайл, полученный при воспроизведении видео firefox-esr-91.3.0-alt2.aarch64 (277.88 KB, text/x-xz)
2021-12-02 14:38 MSK, jqt4
no flags Details
FlameGraph firefox-esr-91.3.0-alt2.aarch64 (222.09 KB, image/svg)
2021-12-02 14:42 MSK, jqt4
no flags Details
Общесистемный профайл, полученный при воспроизведении видео firefox-esr-78.15.0-alt0.p9.1.aarch64 (280.88 KB, text/x-xz)
2021-12-02 14:46 MSK, jqt4
no flags Details
FlameGraph firefox-esr-78.15.0-alt0.p9.1.aarch64 (190.88 KB, image/svg)
2021-12-02 14:47 MSK, jqt4
no flags Details
Общесистемный профайл, полученный при воспроизведении видео chromium-96.0.4664.45-alt2.p10.1.aarch64 (405.86 KB, text/x-xz)
2021-12-22 18:22 MSK, jqt4
no flags Details
FlameGraph chromium-96.0.4664.45-alt2.p10.1.aarch64 (275.69 KB, image/svg)
2021-12-22 18:24 MSK, jqt4
no flags Details
system-wide on-CPU profile: firefox plays video (libvpx+NEON decoding) (2.05 MB, image/svg+xml)
2022-02-10 15:51 MSK, Alexey Sheplyakov
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description jqt4 2021-12-02 14:38:21 MSK
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 в приложении.
Comment 1 jqt4 2021-12-02 14:42:16 MSK
Created attachment 10018 [details]
FlameGraph firefox-esr-91.3.0-alt2.aarch64
Comment 2 jqt4 2021-12-02 14:46:10 MSK
Created attachment 10019 [details]
Общесистемный профайл, полученный при воспроизведении видео firefox-esr-78.15.0-alt0.p9.1.aarch64
Comment 3 jqt4 2021-12-02 14:47:17 MSK
Created attachment 10020 [details]
FlameGraph firefox-esr-78.15.0-alt0.p9.1.aarch64
Comment 4 jqt4 2021-12-22 18:22:47 MSK
Created attachment 10073 [details]
Общесистемный профайл, полученный при воспроизведении видео chromium-96.0.4664.45-alt2.p10.1.aarch64
Comment 5 jqt4 2021-12-22 18:24:56 MSK
Created attachment 10074 [details]
FlameGraph chromium-96.0.4664.45-alt2.p10.1.aarch64
Comment 6 jqt4 2021-12-22 18:27:04 MSK
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?
Comment 7 Alexey Sheplyakov 2022-01-30 19:04:59 MSK
Оказывается в спеке 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 видео заметно снизилась нагрузка на процессор(ы)
Comment 9 Alexey Sheplyakov 2022-02-10 14:08:39 MSK
Включение SIMD в libvpx6 несколько помогает, но смотреть HD видео в firefox всё равно невозможно.
Хотя ffplay (c -vcodec libvpx-vp9) нормально воспроизводит то же самое видео.
Скорее всего есть ещё несколько проблем, связанных, например, с отображением уже декодированных кадров. Возможно firefox не догадывается, что для *отображения* можно использовать GL ES (текстуры), или video overlay, и пытается сам преобразовать yuv -> RGB.
(Но это не точно!)
Comment 10 Alexey Sheplyakov 2022-02-10 15:51:03 MSK
Created attachment 10274 [details]
system-wide on-CPU profile: firefox plays video (libvpx+NEON decoding)
Comment 11 Alexey Sheplyakov 2022-02-10 16:04:13 MSK
Судя по профайлу "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
Comment 12 Alexey Sheplyakov 2022-02-10 17:15:22 MSK
Заметил, что при запуске 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
Comment 13 Монастырский Илья 2023-06-22 11:45:28 MSK
Версия пакета: 
fifefox-esr-102.12.0-alt1.aarch64

Стенд: 
RPi4 с Alt Workstation 10.0


Ошибку воспроизвести не удалось