はじめに
クリアコードでは Gecko(Firefox)を組み込み機器向けに移植する取り組みを行っています。 ククログ記事を長らく書いていませんでしたが、68ESRに移植する取り組みを行っていましたので、紹介します。
この対応にあたっては OSSystems/meta-browser というYoctoレイヤをフォークして作業を行っていますが、対応が落ちついたバージョンについてはアップストリーム(OSSystems/meta-browser)に成果をフィードバックしています。68ESR対応では、Firefoxをビルドするためのコンパイラがgccからclangに変更となったため、meta-clangというclangを提供するレイヤーを新たに使う必要がありました。 また、68ESRではAArch64のJITの対応が進み、JavaScriptの実行速度が大幅に高速化しました。
meta-clangへの依存
60ESRから68ESRに更新するのにあたって、Firefoxをビルドするためのコンパイラがgccからclangに変更となりました。 clangをビルドのツールチェインとして使用するYoctoのレシピが公開されていたため、これを使うことになりました。 clangはLLVMをベースのインフラとして使用するコンパイラです。LLVMはモジュール化が進められており、再利用が可能なコンポーネントを目指して開発が進められています。
また、C++のランタイムについては、gcc由来のものを使うビルド設定でもビルドを確認しています。
RenesasのRZ/G2Eのリファレンスボード(ek874)では、以下の設定をlocal.confに入れることでgcc由来のC++のランタイムライブラリ(libstdc++)をリンクすることになります。1
TARGET_CXXFLAGS_remove_toolchain-clang = " --stdlib=libc++"
TUNE_CCARGS_remove_toolchain-clang = " --rtlib=compiler-rt --unwindlib=libunwind --stdlib=libc++"
TUNE_FEATURES_remove_toolchain-clang = "cortexa57-cortexa53"
これらの設定を入れない場合はclang由来のC++ランタイムライブラリ(libc++)がリンクされることになります。
68ESRへのバージョンアップ
Geckoのベースバージョンを60ESRから68ESRに上げるにあたって、障害となるのはmeta-clangへの依存の組み込みでした。 この問題に関してはmeta-clangを使うことによりクリアできました。
また、組み込みGeckoではWayland/EGLの問題に度々直面してきました。 これらの問題に対処するためクリアコードでは、問題を見つけたら開発元で直す開発プロセスを実行しており、 Gecko 60ESR時点で見つかった問題に対応するパッチを開発元に報告できるものは最大限報告をしました。 このため、60ESRから68ESRにGeckoのベースバージョンを上げる時に組み込みGeckoで当てているパッチの量を減らすことができました。
当プロジェクトが作成した以下のパッチは68ESR時点では取り込まれています。
組み込みGeckoが使用しているGeckoのYoctoレシピの開発元で当てているWayland、EGLのパッチは4個まで減っています。
現在のステータス
前回からの改善点は以下の通りです。
-
AArch64向けのJavaScriptのJITが強化され、JavaScriptの実行速度が高速化された
-
e10sが有効化され、APZによるタッチイベントが有効化された
-
e10s有効化時にEGLを有効化するとContentプロセスがSEGVする問題が解消された
-
Stylo(Quantum CSS)がデフォルト有効化された
現状では、以下の制限があります。
- 60ESRでは効いていたGLスクリーンバッファが効かず、Wayland/EGL環境ではWebGLの性能が落ちている。そのためフレームレートが30fps近辺をウロウロする。
また、68ESRでは以下の機能が廃止されました。
- 68ESRではCanvasのハードウェアアクセラレーション
この廃止に至った事情は以下が詳しいです。
メンテナンスコストを勘案し、ハードウェアアクセラレーションが必要なほど性能を要求するコンテンツについてはWebGLの使用を推奨するというMozillaの公式見解が出されています。
まとめ
GeckoEmbeddedプロジェクトのESR68の状況について紹介しました。 ESR68対応がひと段落しているものの、マイナーバージョンアップ対応をどのように対処するかなどまだまだ手が足りていない状況です。 ぜひ当プロジェクトに参加して頂ければ幸いです。