Mozilla Flux

Mozilla関係の情報に特化したブログです。

Firefox 46では一部の環境でAsync Pan/Zoom(APZ)が有効化(追記あり)

Firefox Nightly 45の開発サイクル初期には、まだまだ開発途上という感じだったAsync Pan/Zoom(APZ)だが、その後の修正を経て、一部の環境では早くもデスクトップ版Firefox 46のリリースチャンネルにおいて有効化される見通しとなった。

ここで、Smoother scrolling in Firefox 46 with APZ ★ Mozilla Hacks – the Web developer blogを基に、APZの仕組みについて概観しておこう。APZの目標は、ユーザー入力に対する応答を最小の遅延で行うことにある。APZの導入以前から、OMTC(Off Main Thread Compositing)の実装により、描画されたコンテンツを保存している複数のレイヤーを一つにまとめる処理は、メインスレッドから独立したcompositorスレッドで行われるようになっている(過去記事)。しかし、再描画などの処理は依然としてメインスレッドで行われるため、ユーザー入力に対する処理(これもメインスレッドで行われる)がブロックされてしまって応答できないという事態が発生することもあった。次の図は、長い時間がかかる可能性のある処理を赤色で表示している。

f:id:Rockridge:20160221195616p:plain

APZが導入されると、メインスレッドが親プロセス(chromeプロセス)と子プロセス(contentプロセス)に分かれるため、子プロセスにおいて再描画などの処理に時間がかかっていても、ユーザー入力に対する処理はブロックされない。また、スクロール位置のアップデートもcompositorスレッドで行われる。以上の流れを示すのが次の図だ。

f:id:Rockridge:20160221195631p:plain

プロセスが分かれている点から容易に推測できるように、APZはマルチプロセス機能(e10s)が有効化されていることが前提となる。加えて当面はマウスホイールまたはトラックパッド/タッチパッドによる入力のみが対象だ。*1

Firefox 46でe10sが有効化されるのは、アドオンがインストールされておらず、アクセシビリティ機能が無効化された非RTL言語の環境に限られることが決定済みである。なのでこの段階でAPZが有効化されるユーザーは少数にとどまるとみられる。

実際にFirefox Developer Edition 46で日々APZを使用してみると、随分こなれてきてはいるものの、Flashプラグインと併用した場合に若干不安が残る。*2 リリース版への投入はFirefox 47に回した方が無難というのが正直なところだ。Firefox 46でAPZが有効化される環境に該当するため、スクロール時に表示がおかしくなったときは、layers.async-pan-zoom.enabledの設定をfalseにしてこの機能を無効化するのがよいだろう。

(16/04/08追記)
その後、リリース版におけるe10sの有効化がFirefox 48以降に延期されたため、Firefox 46/47でAPZが有効化されることはなくなった。

*1:遠からずスクロールバーのドラッグも入力対象としてサポートされる見込み(Bug 1211610)。

*2:リリース前に修正予定ではあるが、ニコニコ動画の動画プレイヤーのコメント欄をマウスホイールでスクロールさせると、動画が表示されなくなるというバグもあった(Bug 1243413)。