Bug-org 1153156 [e10s] Mousewheel scroll distance does not match non-e10s (with apz disabled)
初回投稿日時: 2016-01-30 23:04:24
最終更新日時: 2016-10-15 19:48:33
カテゴリ: e10s Mozilla Core Mozilla46 WheelEvent Windows バグ修正
SNS:
Tweet (list)
Windowsでは、マウスホイールのスクロール量のシステム設定が変更されていない場合、ルートのドキュメントのページ全体のスクロール時にのみ、スクロール量を倍にするシステムスクロールオーバーライドという機能があります。e10sモードが無効の時と、e10sモードが有効でも、APZが有効な場合には問題無く動いてるのですが、e10sモードが有効でAPZが無効の場合、スクロール量が本来の速度に戻ってしまい、遅く感じるというバグです。
e10sモードが有効で、APZが無効な場合のみ、オーバライドは子プロセスからnsIWidget::OverrideSystemMouseScrollSpeed()が呼び出されているのがその違いなのですが、親プロセスではnsWindow::OverrideSystemMouseScrollSpeed()が呼び出されるのに対し、子プロセスではPuppetWidget::OverrideSystemMouseScrollSpeed()が実装されていないのでnsBaseWidget::OverrideSystemMouseScrollSpeed()が呼び出され、Windows固有のこの機能がうまく動いていなかったわけです。
このメソッドはwheelイベントが発生する度に呼び出されますので、単純にPuppetWidget::OverrideSystemMouseScrollSpeed()からプロセス間通信を行って、親プロセスのnsWindow::OverrideSystemMouseScrollSpeed()を呼び出していては負荷が大きくなりすぎます。
そこで、今回の修正では、WidgetWheelEventに設定の確認とオーバーライド済みのデルタ値を返すメソッドを実装し、親プロセスでなくては問い合わせることができない、システム設定がデフォルト設定かどうかをWidgetWheelEventの発火時に先に確認し、デフォルト設定でなければWidgetWheelEvent::mAllowToOverrideSystemScrollSpeedをfalseに、デフォルト設定ならtrueにするようにし、全ての判断材料をWidgetWheelEventに持たせておくようにしました。
APZはこのこのコードをコピペで重複して持っているので、APZ対応に関しては独立したパッチにまとめていますので、参考にしてみてください。