ホットスポット
昨日のエントリでデバッグシンボルが正しく割り当てられたので、iPod touch実機上で正しくプロファイリングが出来た。
結果その1 (invert Call tree on)
"invert Call tree"によってスタックトレースを反転しているので、原因のあった行が先に表示される。時間のかかっている処理が一目で分かる。
この場合、OpenCVのcvSmooth関数から呼ばれたC++のメソッドcv::medianBlurに全ての処理の25%が消費されていることが分かる。詳細は割愛するがシミュレータではここの処理は4ms(!)しかかかっておらず、iPod touchには荷が重い処理なのかもしれない。
結果その2 (invert Call tree off)
"invert Call tree"がoffの場合、処理順に表示されるので処理の階層が深くなると原因の部分に降りるのに時間がかかるが、他の処理との関係や処理順がよくわかる。
シンボル情報によりユーザコードの情報が分かると、実際にその処理が実行されているソースコードまで降りることが出来る。※
このツリーではcvSmoothとcvAdaptiveThresholdで殆ど全ての時間を消費していることが分かる。
しかしながら実機でシミュレータの100倍以上遅い、という状況はOpenCVのビルドし直しで雲散霧消してしまった。iOS6.0用にarmv7s用にビルドされたフレームワークを試していた時にリンクが失敗していたのかもしれない。
※プロファイリングが上手くできなかった時に書いた時間計測のためのログ出力処理が残っているのはご愛敬だ。