Bug-org 517549 TISGetInputSourceProperty is 12.3% of my startup path
初回投稿日時: 2009年09月23日02時05分22秒
最終更新日時: 2009年09月23日02時59分49秒
カテゴリ: Mozilla Core バグ修正
SNS:
Tweet (list)
TSテストと呼ばれる、スタートアップ時間の計測テストで、MacのTISGetInputSourcePropertyの呼び出しで一割以上もの時間がかかってるが、別スレッドに移すなりなんなりできないか、というバグです。
問題のコードはBug-org 513955の修正で追加されたスタートアップ時に全キーボードレイアウトの情報を取得するという部分なのですが、そもそもそんなところ、走るべきではありません。デバッグ用のコードなのですから。
で、nsChildView.mm
内をよく見渡すと、リリースビルドでもログを吐くようになっていて、ログを吐かない場合であっても無条件にキーボードレイアウトの各種情報を取得するコードは走ってしまいます。これはいかん、ということで問題の部分をデバッグビルドでしかビルドしないように修正してチェックインしたところ、以下のような結果になりました。
効果が予想以上に大きく、3割程度のパフォーマンス向上が見られます。ならば、これはおそらく1.9.2 branchでも効果でるだろう、ということで似たパッチを作って投入したのが以下の結果です。
グラフの上半分では顕著に改善が見られます(trunkに比べて荒れてますが……)。しかし、下半分の元々高速だったテスト機では改善が見られませんでした。この差は何だろうかと、各マシンを見てみると(スクリーンショットからでは分かりませんが)、今まで1400msかかっていたのが10.5、元々1000ms程度だったのが10.4でした。
Macは10.5からは従来のKeyboard Layout Servicesを捨て、新たにText Input Source Servicesに切り替えました。もちろん(互換性はともかく)好ましい修正ではあるのですが、パフォーマンスが劇的に低下していることが分かります(10.5や10.6でも、32bitアプリならKL APIは使えますが、背後ではTIS APIを呼んでいるだけか、それに近いことをやっているはずです)。TIS APIは主に、ユーザの入力時に利用することになるのであまり問題無いレベルかもしれませんが、気をつけておいた方が良さそうです。
結局、この問題は、10.4でパフォーマンスに問題なかったので元々のコードのチェックイン時には気付かなかったけれど、Bug-org 513955の修正の修正で若干、追加処理も入れたのでそれでパフォーマンスが低下し、これらのことが明るみにでた、ということです。