From cfa105d3934c4dfa14f02b693bfa97c8d17d56a9 Mon Sep 17 00:00:00 2001 From: Chih-Chung Chang Date: Sat, 18 Feb 2012 06:17:18 +0800 Subject: [PATCH] Reduce memory allocation and make small improvements. Change-Id: Iac3f302454119de6363cd5cfb158619e739b0536 --- .../src/com/android/gallery3d/common/Utils.java | 14 +++++++----- src/com/android/gallery3d/app/AlbumPage.java | 5 +++-- .../gallery3d/ui/AlbumSetSlidingWindow.java | 15 +++++++------ .../android/gallery3d/ui/AlbumSlidingWindow.java | 13 ++++++----- .../android/gallery3d/ui/DialogDetailsView.java | 6 +++-- src/com/android/gallery3d/ui/GLCanvas.java | 4 ++-- src/com/android/gallery3d/ui/GLCanvasImpl.java | 26 +++++++++++----------- .../src/com/android/gallery3d/ui/GLCanvasStub.java | 4 ++-- 8 files changed, 47 insertions(+), 40 deletions(-) diff --git a/gallerycommon/src/com/android/gallery3d/common/Utils.java b/gallerycommon/src/com/android/gallery3d/common/Utils.java index ea289a628..6996015a3 100644 --- a/gallerycommon/src/com/android/gallery3d/common/Utils.java +++ b/gallerycommon/src/com/android/gallery3d/common/Utils.java @@ -54,12 +54,14 @@ public class Utils { } } - // Throws AssertionError if the input is false. - public static void assertTrue(boolean cond, String message, Object ... args) { - if (!cond) { - throw new AssertionError( - args.length == 0 ? message : String.format(message, args)); - } + // Throws AssertionError with the message. We had a method having the form + // assertTrue(boolean cond, String message, Object ... args); + // However a call to that method will cause memory allocation even if the + // condition is false (due to autoboxing generated by "Object ... args"), + // so we don't use that anymore. + public static void fail(String message, Object ... args) { + throw new AssertionError( + args.length == 0 ? message : String.format(message, args)); } // Throws NullPointerException if the input is null. diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java index 22b189999..99d86f525 100644 --- a/src/com/android/gallery3d/app/AlbumPage.java +++ b/src/com/android/gallery3d/app/AlbumPage.java @@ -406,8 +406,9 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster private void initializeData(Bundle data) { mMediaSetPath = Path.fromString(data.getString(KEY_MEDIA_PATH)); mMediaSet = mActivity.getDataManager().getMediaSet(mMediaSetPath); - Utils.assertTrue(mMediaSet != null, - "MediaSet is null. Path = %s", mMediaSetPath); + if (mMediaSet == null) { + Utils.fail("MediaSet is null. Path = %s", mMediaSetPath); + } mSelectionManager.setSourceMediaSet(mMediaSet); mAlbumDataAdapter = new AlbumDataAdapter(mActivity, mMediaSet); mAlbumDataAdapter.setLoadingListener(new MyLoadingListener()); diff --git a/src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java b/src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java index 3991a93fe..b02f19e90 100644 --- a/src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java +++ b/src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java @@ -110,9 +110,10 @@ public class AlbumSetSlidingWindow implements AlbumSetView.ModelListener { } public AlbumSetItem get(int slotIndex) { - Utils.assertTrue(isActiveSlot(slotIndex), - "invalid slot: %s outsides (%s, %s)", - slotIndex, mActiveStart, mActiveEnd); + if (!isActiveSlot(slotIndex)) { + Utils.fail("invalid slot: %s outsides (%s, %s)", + slotIndex, mActiveStart, mActiveEnd); + } return mData[slotIndex % mData.length]; } @@ -156,10 +157,10 @@ public class AlbumSetSlidingWindow implements AlbumSetView.ModelListener { } public void setActiveWindow(int start, int end) { - Utils.assertTrue( - start <= end && end - start <= mData.length && end <= mSize, - "start = %s, end = %s, length = %s, size = %s", - start, end, mData.length, mSize); + if (!(start <= end && end - start <= mData.length && end <= mSize)) { + Utils.fail("start = %s, end = %s, length = %s, size = %s", + start, end, mData.length, mSize); + } AlbumSetItem data[] = mData; diff --git a/src/com/android/gallery3d/ui/AlbumSlidingWindow.java b/src/com/android/gallery3d/ui/AlbumSlidingWindow.java index 6947d7fb9..d64c1f7ed 100644 --- a/src/com/android/gallery3d/ui/AlbumSlidingWindow.java +++ b/src/com/android/gallery3d/ui/AlbumSlidingWindow.java @@ -117,9 +117,10 @@ public class AlbumSlidingWindow implements AlbumView.ModelListener { } public DisplayItem get(int slotIndex) { - Utils.assertTrue(isActiveSlot(slotIndex), - "invalid slot: %s outsides (%s, %s)", - slotIndex, mActiveStart, mActiveEnd); + if (!isActiveSlot(slotIndex)) { + Utils.fail("invalid slot: %s outsides (%s, %s)", + slotIndex, mActiveStart, mActiveEnd); + } return mData[slotIndex % mData.length]; } @@ -170,9 +171,9 @@ public class AlbumSlidingWindow implements AlbumView.ModelListener { } public void setActiveWindow(int start, int end) { - Utils.assertTrue(start <= end - && end - start <= mData.length && end <= mSize, - "%s, %s, %s, %s", start, end, mData.length, mSize); + if (!(start <= end && end - start <= mData.length && end <= mSize)) { + Utils.fail("%s, %s, %s, %s", start, end, mData.length, mSize); + } DisplayItem data[] = mData; mActiveStart = start; diff --git a/src/com/android/gallery3d/ui/DialogDetailsView.java b/src/com/android/gallery3d/ui/DialogDetailsView.java index c037f2a26..580a40edb 100644 --- a/src/com/android/gallery3d/ui/DialogDetailsView.java +++ b/src/com/android/gallery3d/ui/DialogDetailsView.java @@ -173,8 +173,10 @@ public class DialogDetailsView implements DetailsViewContainer { default: { Object valueObj = detail.getValue(); // This shouldn't happen, log its key to help us diagnose the problem. - Utils.assertTrue(valueObj != null, "%s's value is Null", - DetailsHelper.getDetailsName(context, detail.getKey())); + if (valueObj == null) { + Utils.fail("%s's value is Null", + DetailsHelper.getDetailsName(context, detail.getKey())); + } value = valueObj.toString(); } } diff --git a/src/com/android/gallery3d/ui/GLCanvas.java b/src/com/android/gallery3d/ui/GLCanvas.java index eb78eddde..52ce615ae 100644 --- a/src/com/android/gallery3d/ui/GLCanvas.java +++ b/src/com/android/gallery3d/ui/GLCanvas.java @@ -60,10 +60,10 @@ public interface GLCanvas { // Pushes the configuration state (matrix, alpha, and clip) onto // a private stack. - public int save(); + public void save(); // Same as save(), but only save those specified in saveFlags. - public int save(int saveFlags); + public void save(int saveFlags); public static final int SAVE_FLAG_ALL = 0xFFFFFFFF; public static final int SAVE_FLAG_CLIP = 0x01; diff --git a/src/com/android/gallery3d/ui/GLCanvasImpl.java b/src/com/android/gallery3d/ui/GLCanvasImpl.java index 85bf7716d..8775f0837 100644 --- a/src/com/android/gallery3d/ui/GLCanvasImpl.java +++ b/src/com/android/gallery3d/ui/GLCanvasImpl.java @@ -27,7 +27,7 @@ import android.opengl.Matrix; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; -import java.util.Stack; +import java.util.ArrayList; import javax.microedition.khronos.opengles.GL10; import javax.microedition.khronos.opengles.GL11; import javax.microedition.khronos.opengles.GL11Ext; @@ -63,8 +63,8 @@ public class GLCanvasImpl implements GLCanvas { private float mAlpha; private final Rect mClipRect = new Rect(); - private final Stack mRestoreStack = - new Stack(); + private final ArrayList mRestoreStack = + new ArrayList(); private ConfigState mRecycledRestoreAction; private final RectF mDrawTextureSourceRect = new RectF(); @@ -229,6 +229,7 @@ public class GLCanvasImpl implements GLCanvas { } public void rotate(float angle, float x, float y, float z) { + if (angle == 0) return; float[] temp = mTempMatrix; Matrix.setRotateM(temp, 0, angle, x, y, z); Matrix.multiplyMM(temp, 16, mMatrixValues, 0, temp, 0); @@ -361,10 +362,10 @@ public class GLCanvasImpl implements GLCanvas { // draw the rect from bottom-left to top-right float points[] = mapPoints( mMatrixValues, x, y + height, x + width, y); - x = Math.round(points[0]); - y = Math.round(points[1]); - width = Math.round(points[2]) - x; - height = Math.round(points[3]) - y; + x = (int) (points[0] + 0.5f); + y = (int) (points[1] + 0.5f); + width = (int) (points[2] + 0.5f) - x; + height = (int) (points[3] + 0.5f) - y; if (width > 0 && height > 0) { ((GL11Ext) mGL).glDrawTexiOES(x, y, 0, width, height); mCountTextureOES++; @@ -827,11 +828,11 @@ public class GLCanvasImpl implements GLCanvas { } } - public int save() { - return save(SAVE_FLAG_ALL); + public void save() { + save(SAVE_FLAG_ALL); } - public int save(int saveFlags) { + public void save(int saveFlags) { ConfigState config = obtainRestoreConfig(); if ((saveFlags & SAVE_FLAG_ALPHA) != 0) { @@ -852,13 +853,12 @@ public class GLCanvasImpl implements GLCanvas { config.mMatrix[0] = Float.NEGATIVE_INFINITY; } - mRestoreStack.push(config); - return mRestoreStack.size() - 1; + mRestoreStack.add(config); } public void restore() { if (mRestoreStack.isEmpty()) throw new IllegalStateException(); - ConfigState config = mRestoreStack.pop(); + ConfigState config = mRestoreStack.remove(mRestoreStack.size() - 1); config.restore(this); freeRestoreConfig(config); } diff --git a/tests/src/com/android/gallery3d/ui/GLCanvasStub.java b/tests/src/com/android/gallery3d/ui/GLCanvasStub.java index 17d520daf..41de108ad 100644 --- a/tests/src/com/android/gallery3d/ui/GLCanvasStub.java +++ b/tests/src/com/android/gallery3d/ui/GLCanvasStub.java @@ -39,10 +39,10 @@ public class GLCanvasStub implements GLCanvas { public boolean clipRect(int left, int top, int right, int bottom) { throw new UnsupportedOperationException(); } - public int save() { + public void save() { throw new UnsupportedOperationException(); } - public int save(int saveFlags) { + public void save(int saveFlags) { throw new UnsupportedOperationException(); } public void setBlendEnabled(boolean enabled) {} -- 2.11.0