Android用語集
DDMSはAndroidのデバッグツールです。
DDMSの実行
SDKのtoolsフォルダーのddms.batから呼び出します。
2009年3月現在、Eclipseのプラグインでは、Allocation trackerは使えません。
DDMS パースペクティブに切り替えます。 あるいは、見たいビューを開きます。
toolsのddms.batを開きます。 プロセスから、見てみたいアプリを選びます。
ループしているところで、Allocation Tracker タブを選んで、 Start Trackingを開始します。 数秒したらGet Allocationを押して、Stop Trackingします。 すると、一覧がでます。ここでOpenGLだと、Mainとは別スレッドでまわしている場合も多いですが、 Threadsタブからスレッドの番号を調べて、そのスレッド番号のところを見ます。 だいたい、ループですので、繰り返して発生していると思います。たとえば、単純に四角を描く下のコードですと、3箇所発生します。
public void display(GL10 gl) {
gl.glEnableClientState (GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mFVertexBuffer); //alloc 20
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTextureBuffer); //alloc 20
gl.glColor4f(1, 1, 1, 1);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glDrawElements(GL10.GL_TRIANGLES, 6,GL10.GL_UNSIGNED_SHORT, mIndexBuffer);//alloc 20
}
とくに、glVertexPointerとglTexCoordPointerはループで実行する必要がないので、初期化の部分に移動します。 gl.glDrawElementsも場合によっては、glDrawArraysとします。(コードの修正たくさんしないといけませんが)
そして、もう1度実行すると、今度はAllocation Trackeで見てみても該当箇所が出ないと思います。 こういうのを繰り返しながら、無駄な部分を減らしていきます。
Allocation trackerについて http://d.hatena.ne.jp/androidzaurus/comment?date=20090213
DDMSについて http://d.hatena.ne.jp/bs-android/20090203/1233675390