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:
Tweet (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モードで、パフォーマンスが改善されています。