OSDN Git Service

Recycle textures when we don't need them.
authorOwen Lin <owenlin@google.com>
Tue, 22 May 2012 20:28:04 +0000 (13:28 -0700)
committerOwen Lin <owenlin@google.com>
Wed, 23 May 2012 00:49:50 +0000 (17:49 -0700)
bug: 6307447
Change-Id: Id0c1abab54e1fbb75364dffda9f1f72d6b39310b

src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java
src/com/android/gallery3d/ui/AlbumSetSlotRenderer.java
src/com/android/gallery3d/ui/AlbumSlidingWindow.java
src/com/android/gallery3d/ui/AlbumSlotRenderer.java
src/com/android/gallery3d/ui/FadeOutTexture.java
src/com/android/gallery3d/ui/FadeTexture.java

index cefb9cd..6561a23 100644 (file)
@@ -70,7 +70,8 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
         public MediaSet album;
         public MediaItem coverItem;
         public Texture content;
-        public Texture label;
+        public BitmapTexture labelTexture;
+        public BitmapTexture bitmapTexture;
         public Path setPath;
         public String title;
         public int totalCount;
@@ -226,6 +227,8 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
         AlbumSetEntry entry = mData[slotIndex % mData.length];
         if (entry.coverLoader != null) entry.coverLoader.recycle();
         if (entry.labelLoader != null) entry.labelLoader.recycle();
+        if (entry.labelTexture != null) entry.labelTexture.recycle();
+        if (entry.bitmapTexture != null) entry.bitmapTexture.recycle();
         mData[slotIndex % mData.length] = null;
     }
 
@@ -256,7 +259,7 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
             if (entry.labelLoader != null) {
                 entry.labelLoader.recycle();
                 entry.labelLoader = null;
-                entry.label = null;
+                entry.labelTexture = null;
             }
             if (album != null) {
                 entry.labelLoader = new AlbumLabelLoader(
@@ -273,6 +276,7 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
             if (entry.coverLoader != null) {
                 entry.coverLoader.recycle();
                 entry.coverLoader = null;
+                entry.bitmapTexture = null;
                 entry.content = null;
             }
             if (cover != null) {
@@ -296,11 +300,11 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
     private void uploadBackgroundTextureInSlot(int index) {
         if (index < mContentStart || index >= mContentEnd) return;
         AlbumSetEntry entry = mData[index % mData.length];
-        if (entry.content instanceof BitmapTexture) {
-            mTextureUploader.addBgTexture((BitmapTexture) entry.content);
+        if (entry.bitmapTexture != null) {
+            mTextureUploader.addBgTexture(entry.bitmapTexture);
         }
-        if (entry.label instanceof BitmapTexture) {
-            mTextureUploader.addBgTexture((BitmapTexture) entry.label);
+        if (entry.labelTexture != null) {
+            mTextureUploader.addBgTexture(entry.labelTexture);
         }
     }
 
@@ -311,11 +315,11 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
         // Upload foreground texture
         for (int i = mActiveStart, n = mActiveEnd; i < n; ++i) {
             AlbumSetEntry entry = mData[i % mData.length];
-            if (entry.content instanceof BitmapTexture) {
-                mTextureUploader.addFgTexture((BitmapTexture) entry.content);
+            if (entry.bitmapTexture != null) {
+                mTextureUploader.addFgTexture(entry.bitmapTexture);
             }
-            if (entry.label instanceof BitmapTexture) {
-                mTextureUploader.addFgTexture((BitmapTexture) entry.label);
+            if (entry.labelTexture != null) {
+                mTextureUploader.addFgTexture(entry.labelTexture);
             }
         }
 
@@ -440,6 +444,7 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
 
             AlbumSetEntry entry = mData[mSlotIndex % mData.length];
             BitmapTexture texture = new BitmapTexture(bitmap);
+            entry.bitmapTexture = texture;
             entry.content = texture;
 
             if (isActiveSlot(mSlotIndex)) {
@@ -509,7 +514,7 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
             AlbumSetEntry entry = mData[mSlotIndex % mData.length];
             BitmapTexture texture = new BitmapTexture(bitmap);
             texture.setOpaque(false);
-            entry.label = texture;
+            entry.labelTexture = texture;
 
             if (isActiveSlot(mSlotIndex)) {
                 mTextureUploader.addFgTexture(texture);
@@ -536,7 +541,7 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
             if (entry.labelLoader != null) {
                 entry.labelLoader.recycle();
                 entry.labelLoader = null;
-                entry.label = null;
+                entry.labelTexture = null;
             }
             if (entry.album != null) {
                 entry.labelLoader = new AlbumLabelLoader(i,
index ac81033..7b4a866 100644 (file)
@@ -148,9 +148,8 @@ public class AlbumSetSlotRenderer extends AbstractSlotRenderer {
             entry.isWaitLoadingDisplayed = true;
         } else if (entry.isWaitLoadingDisplayed) {
             entry.isWaitLoadingDisplayed = false;
-            entry.content = new FadeInTexture(
-                    PLACEHOLDER_COLOR, (BitmapTexture) entry.content);
-            content = entry.content;
+            content = new FadeInTexture(PLACEHOLDER_COLOR, entry.bitmapTexture);
+            entry.content = content;
         }
         drawContent(canvas, content, width, height, entry.rotation);
         if ((content instanceof FadeInTexture) &&
@@ -173,7 +172,7 @@ public class AlbumSetSlotRenderer extends AbstractSlotRenderer {
             GLCanvas canvas, AlbumSetEntry entry, int width, int height) {
         // We show the loading message only when the album is still loading
         // (Not when we are still preparing the label)
-        Texture content = checkTexture(entry.label);
+        Texture content = checkTexture(entry.labelTexture);
         if (entry.album == null) {
             content = mDataWindow.getLoadingTexture();
         }
index 240cf34..deec171 100644 (file)
@@ -48,6 +48,7 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
         public int rotation;
         public int mediaType;
         public boolean isWaitDisplayed;
+        public BitmapTexture bitmapTexture;
         public Texture content;
         private BitmapLoader contentLoader;
     }
@@ -164,8 +165,8 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
     private void uploadBgTextureInSlot(int index) {
         if (index < mContentEnd && index >= mContentStart) {
             AlbumEntry entry = mData[index % mData.length];
-            if (entry.content instanceof BitmapTexture) {
-                mTextureUploader.addBgTexture((BitmapTexture) entry.content);
+            if (entry.bitmapTexture != null) {
+                mTextureUploader.addBgTexture(entry.bitmapTexture);
             }
         }
     }
@@ -177,8 +178,8 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
         // add foreground textures
         for (int i = mActiveStart, n = mActiveEnd; i < n; ++i) {
             AlbumEntry entry = mData[i % mData.length];
-            if (entry.content instanceof BitmapTexture) {
-                mTextureUploader.addFgTexture((BitmapTexture) entry.content);
+            if (entry.bitmapTexture != null) {
+                mTextureUploader.addFgTexture(entry.bitmapTexture);
             }
         }
 
@@ -234,9 +235,8 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
         AlbumEntry data[] = mData;
         int index = slotIndex % data.length;
         AlbumEntry entry = data[index];
-        if (entry.contentLoader != null) {
-            entry.contentLoader.recycle();
-        }
+        if (entry.contentLoader != null) entry.contentLoader.recycle();
+        if (entry.bitmapTexture != null) entry.bitmapTexture.recycle();
         data[index] = null;
     }
 
@@ -296,15 +296,16 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
             if (bitmap == null) return; // error or recycled
 
             AlbumEntry entry = mData[mSlotIndex % mData.length];
-            entry.content = new BitmapTexture(bitmap);
+            entry.bitmapTexture = new BitmapTexture(bitmap);
+            entry.content = entry.bitmapTexture;
 
             if (isActiveSlot(mSlotIndex)) {
-                mTextureUploader.addFgTexture((BitmapTexture) entry.content);
+                mTextureUploader.addFgTexture(entry.bitmapTexture);
                 --mActiveRequestCount;
                 if (mActiveRequestCount == 0) requestNonactiveImages();
                 if (mListener != null) mListener.onContentChanged();
             } else {
-                mTextureUploader.addBgTexture((BitmapTexture) entry.content);
+                mTextureUploader.addBgTexture(entry.bitmapTexture);
             }
         }
     }
index 9723f4c..ab99766 100644 (file)
@@ -110,9 +110,8 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
             entry.isWaitDisplayed = true;
         } else if (entry.isWaitDisplayed) {
             entry.isWaitDisplayed = false;
-            entry.content = new FadeInTexture(
-                    PLACEHOLDER_COLOR, (BitmapTexture) entry.content);
-            content = entry.content;
+            content = new FadeInTexture(PLACEHOLDER_COLOR, entry.bitmapTexture);
+            entry.content = content;
         }
         drawContent(canvas, content, width, height, entry.rotation);
         if ((content instanceof FadeInTexture) &&
index c438977..47e6acb 100644 (file)
@@ -18,7 +18,7 @@ package com.android.gallery3d.ui;
 
 // FadeOutTexture is a texture which begins with a given texture, then gradually animates
 // into fading out totally.
-public class FadeOutTexture extends FadeTexture implements Texture {
+public class FadeOutTexture extends FadeTexture {
     @SuppressWarnings("unused")
     private static final String TAG = "FadeOutTexture";
 
index ad0d358..cbf5073 100644 (file)
@@ -42,23 +42,22 @@ public abstract class FadeTexture implements Texture {
         mIsAnimating = true;
     }
 
+    @Override
     public void draw(GLCanvas canvas, int x, int y) {
         draw(canvas, x, y, mWidth, mHeight);
     }
 
-    /**
-     * Subclasses should implement how to fade the texture.
-     */
-    public abstract void draw(GLCanvas canvas, int x, int y, int w, int h);
-
+    @Override
     public boolean isOpaque() {
         return mIsOpaque;
     }
 
+    @Override
     public int getWidth() {
         return mWidth;
     }
 
+    @Override
     public int getHeight() {
         return mHeight;
     }