この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2013年3月)

2013年3月27日

Bug-org 849647 It's better to remove message order optimization on Windows if it's possible
初回投稿日時: 2013年03月27日20時10分36秒
最終更新日時: 2013年03月27日20時10分57秒
カテゴリ: Flash Mozilla Core Mozilla23 Windows バグ修正
SNS: (list)

Windows版Geckoのメッセージループは、開発者には有名な話ですが、独自のメッセージ取得順序の最適化を行っています。本来は、SendMessage()で送信されたメッセージ、PostMessage()で送信されたメッセージ、SendInput()等で発生した入力に関するメッセージ、といった感じになっているのですが、Geckoは10年以上前から、入力処理を最優先で処理するようになっていました。

その理由は、古いFlash Playerが、描画の更新のために、WM_USER + 1というメッセージを大量にメッセージキューに投げてくるため、入力イベントの処理がスムーズにいかない、というものがあったようですが、現在のFlash Playerではこの問題は無くなっています。

また、このメッセージの最適化により、ATOKをオンにした直後の入力イベントが、ATOKが処理する前に、Geckoに取得され、最初の何文字かが半角英数のまま入力されてしまう、というバグが、TSFモードでは再発していました。

こういった理由から、もはやこのメッセージ順序の最適化を行い続ける理由はないだろう、ということで、私のハック史上、最も影響範囲の広大な、この修正を行うことになりました。

現在、Mozilla 22向けのmozilla-centralにパッチは投入されていますが、これほどリスキーな変更をNightlyで一週間しかテストしないのは危険なので、Mozilla 22がAuroraになった時点で、ひとまず、Auroraからバックアウトすることを予定しています。そのため、最初にこの修正が入るリリースビルドは23になると思われます。

この処理の副作用として、メッセージの取得順序最適化の際に大量に呼び出していたPeekMessageW()の呼び出しが大幅に削減されていますので、特にvirtual callでこのAPIを呼ばなくてはいけないTSFモードで、パフォーマンスが改善されています。

関連するかもしれないエントリ

bug-org 849647を含むエントリ