webdino / gecko-embedded

Main (meta) repository for Project GEM (Gecko Embedded)
https://gecko-embedded.org
22 stars 2 forks source link

WebRender の検証とデフォルト有効化の検討 #89

Closed dynamis closed 4 years ago

dynamis commented 5 years ago

Gecko 68 ビルドで WebRender を有効化しても問題なく動作していそうだが、十分な検証が出来ていない。いろいろなコンテンツやベンチマークでのテストを行って問題なくパフォーマンス向上が得られるようであればデフォルト有効化 (gfx.webrender.enabled=true, gfx.webrender.all=true) を検討する。

一般的な組込向けのコンテンツでの影響についてはまだ把握できていないが、WebRender が有効に働く、レイアウト処理が重要な chalkboard bench では 8 倍程度速くなっている: https://github.com/webdino/gecko-embedded/wiki/Benchmark#chalkboard-html5-benchmark

dynamis commented 5 years ago

note: Platform Graphic Team 的には Q3 2020 に Wayland Support と位置づけてみていた様子 (いくらでも延期できる位置づけ): https://github.com/orgs/FirefoxGraphics/projects/1#card-19879690

dynamis commented 5 years ago

note: 負荷テスト的にベンチを動かしたりしている範囲でクラッシュが見られるのは OrangeMark だがこれは WebRender 無効でも同じくクラッシュする。今のところ WebRender オンの時だけの問題は見つかっていない。

dynamis commented 4 years ago

gfx.webrender.all=true にして試験していてそれに起因する問題は特に観測しておらず (問題があるなら観測するためにも)、パフォーマンス的には明らかに良いのでデフォルトオンに設定を入れる。

https://github.com/webdino/meta-browser/blob/gem-firefox-68.0.0esr/dynamic-layers/rust-layer/recipes-browser/firefox/firefox/prefs/webgl.js https://github.com/webdino/meta-browser/blob/gem-firefox-68.0.0esr/dynamic-layers/rust-layer/recipes-browser/firefox/firefox_68.0esr.bb#L95

等と同様に webrender.js を

pref("gfx.webrender.all", true);

として作成、追加してデフォルト有効化する。

cosmo0920 commented 4 years ago

今のところ WebRender オンの時だけの問題は見つかっていない。

gfx.webrender.all; trueまたは、gfx.webrender.enable; trueを指定し、WebRenderを有効化すると、MotionMark1.0と1.1のトランプのマークがぼやけるという問題を畑ケは把握していますが、そのようなコンテンツがぼやける問題は通常のコンテンツでは起きていないのでしょうか?

P_20200114_121058

dynamis commented 4 years ago

WebRenderを有効化すると、MotionMark1.0と1.1のトランプのマークがぼやけるという問題を畑ケは把握しています

それは気付きませんでした。なるほど、まだダメなケースがあるのですね (後ほど再現性確認してからまたコメント追記します)...

ちなみに、小さな領域ではなく大きな矩形領域がノイズのようになる現象はいつかのベンチマークコンテンツで発生していますがそちらは WebRender オフでも発生していたように思います。

ベンチ系ではないコンテンツで問題を見かけたことはないのですが、RefTest および目視でのテストを早め、多めにしていかないと不味いですね。

dynamis commented 4 years ago

調査途中ですがひとまず進捗共有します。

MotionMark のうち Suits suite で shape を使っているテストで再現することを確認 (後半のテストだから目視でずっと見て無くて気付かなかった...) developer ページで該当テストだけの実施が可能:

https://browserbench.org/MotionMark1.1/developer.html

SVG Shape のテストを探してみるとこちらのようなサンプルで全く描画されない (ぼやけるのでは無く描画されない) ケースを確認。詳細まだ確認できていないが Shape.star の引数で css: true とすると描画されず css:false であれば正常に描画されるので SVG x CSS となるケースに何か問題がありそう:

https://codepen.io/dynamis/pen/mdyYENv (元のサンプルは https://codepen.io/daybrush/full/ReYxLy via shape-svg)

dynamis commented 4 years ago

Next: WPT を WebRender 有効で実行、失敗するものは WebRender オフにして再試験とすることで、まずは WebRender 有効化に伴う副作用・制限事項の洗い出しを行う。

デフォルト有効にするかどうか (問題を解決または制限事項扱いするかどうか) はその結果や他の issue との優先順位を踏まえて判断する。

dynamis commented 4 years ago

そもそもの情報として Bugzilla のリンク貼ってなかったので:

先の MotionMark での bug がどの bug に該当するのか、あるいは未報告なのはぱっと見で分からなかった。未確認。とはいえ WPT 実行して実際問題が再現するケースは見つけておき、普通の Linux Desktop での再現性も確認の上で報告するなどしていきたい。

dynamis commented 4 years ago

memo: WebRender 有効化時に画面の描画が一部ブロックノイズになるページ:

何かデコードしてバッファに持つ領域のサイズが一定を超えるとノイズになってる印象。

dynamis commented 4 years ago

Geckoo 78 での改善に期待としてデフォルト無効のままとすることで確定