NVIDIA PerfHUD ESが必要以上に強力


nVidiaは自社のTegraプラットフォーム向けに幾つかのツールを配布している。特にOpenGL ESプロファイラのPerfHUD ESが強力で、デスクトップ版同様他人のアプリもトレースできる。(↑キャプチャしているのはシリコンスタジオのMobile GPUMARK http://www.siliconstudio.co.jp/contents/benchmark/ )
PerfHUD(ESが無い方)は、デバッグ表示を上書きするシステムでこれはこれで便利だった。Android版のPerfHUD ESは実際にはHUDではなく、ネットワーク/ADB経由でOpenGL ESの描画呼び出しをキャプチャし、表示するツールとなっている。
(また、CPU負荷やキャッシュミスなどのパフォーマンスカウンタのリアルタイム表示も含まれている)
この機能はTegra2/3上で動作するAndroid4.xなら通常配布に含まれている(!)ので、特にroot権限等は必要ない。
実際のアプリケーションで使用するには、adb shell等から

  • setprop debug.perfhudes 1

とし、File → IP Address、ADB Launchでプロセスを起動したうえでADB Forwarding → プロセスを選択 とすることでアタッチできる。この設定は再起動の度に行う必要がある。
PC向けのグラフィックスでは、この手のツールは基本的にどのようなプログラムでもattachできたが、世間的にはdebuggable属性くらいは見て弾いたほうが良いような気がする。
PerfHUD ESは、まだシェーダのステップ実行のようなデバッグ機能を備えていない。また、Tegra専用品なのに逆アセンブル等も無い。そろそろオフラインシェーダコンパイラくらいは提供してくれても良いと思うんだけど。。
ちなみに、NVIDIAデベロッパプログラムは他にドキュメンテーションやVisualStudio統合( https://developer.nvidia.com/nvidia-nsight-tegra )も提供している。VisualStudio統合はvs-android( http://code.google.com/p/vs-android/ )ベースのMentor Graphicsによるカスタマイズ版で、GDB経由のデバッグもVisualStudioのUIで行える。