OSDN Git Service

Fixed more of filtershows large bitmap reference leaks.
authorRuben Brunk <rubenbrunk@google.com>
Tue, 26 Feb 2013 01:18:51 +0000 (17:18 -0800)
committerRuben Brunk <rubenbrunk@google.com>
Tue, 26 Feb 2013 02:49:49 +0000 (18:49 -0800)
Bug: 8253109
Change-Id: Iaff381e759d02baae701a01d6c081c49f4b3c772

src/com/android/gallery3d/filtershow/FilterShowActivity.java
src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
src/com/android/gallery3d/filtershow/presets/ImagePreset.java
src/com/android/gallery3d/filtershow/ui/ImageCurves.java
src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java

index fd30ac0..92aed84 100644 (file)
@@ -521,9 +521,12 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
         if (mLoadBitmapTask != null) {
             mLoadBitmapTask.cancel(false);
         }
+        // TODO:  Using singletons is a bad design choice for many of these
+        // due static reference leaks and in general.  Please refactor.
         MasterImage.reset();
         FilteringPipeline.reset();
         ImageFilter.resetStatics();
+        FiltersManager.reset();
         super.onDestroy();
     }
 
index 0af4063..ec08e48 100644 (file)
@@ -22,7 +22,6 @@ import android.os.Process;
 import android.support.v8.renderscript.*;
 import android.util.Log;
 
-import com.android.gallery3d.filtershow.filters.BaseFiltersManager;
 import com.android.gallery3d.filtershow.filters.FiltersManager;
 import com.android.gallery3d.filtershow.filters.ImageFilterRS;
 import com.android.gallery3d.filtershow.imageshow.GeometryMetadata;
index 377bd2b..4dbf91a 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.android.gallery3d.filtershow.filters;
 
-import com.android.gallery3d.filtershow.cache.ImageLoader;
-
 import java.util.HashMap;
+import java.util.Map;
 import java.util.Vector;
 
-public class BaseFiltersManager {
-
-    private static final String LOGTAG = "BaseFiltersManager";
-    private static HashMap<Class, ImageFilter> mFilters = new HashMap<Class, ImageFilter>();
-
-    protected BaseFiltersManager() {
-        Vector<ImageFilter> filters = new Vector<ImageFilter>();
-        addFilters(filters);
-        for (ImageFilter filter : filters) {
-            mFilters.put(filter.getClass(), filter);
-        }
-    }
+public abstract class BaseFiltersManager {
+    protected HashMap<Class, ImageFilter> mFilters = null;
 
-    protected void addFilters(Vector<ImageFilter> filters) {
-        filters.add(new ImageFilterTinyPlanet());
-        filters.add(new ImageFilterRedEye());
-        filters.add(new ImageFilterWBalance());
-        filters.add(new ImageFilterExposure());
-        filters.add(new ImageFilterVignette());
-        filters.add(new ImageFilterContrast());
-        filters.add(new ImageFilterShadows());
-        filters.add(new ImageFilterHighlights());
-        filters.add(new ImageFilterVibrance());
-        filters.add(new ImageFilterSharpen());
-        filters.add(new ImageFilterCurves());
-        filters.add(new ImageFilterDraw());
-        filters.add(new ImageFilterHue());
-        filters.add(new ImageFilterSaturated());
-        filters.add(new ImageFilterBwFilter());
-        filters.add(new ImageFilterNegative());
-        filters.add(new ImageFilterEdge());
-        filters.add(new ImageFilterKMeans());
-        filters.add(new ImageFilterFx());
-        filters.add(new ImageFilterBorder());
-        filters.add(new ImageFilterParametricBorder());
+    protected void addFilters(Map<Class, ImageFilter> filters) {
+        filters.put(ImageFilterTinyPlanet.class, new ImageFilterTinyPlanet());
+        filters.put(ImageFilterRedEye.class, new ImageFilterRedEye());
+        filters.put(ImageFilterWBalance.class, new ImageFilterWBalance());
+        filters.put(ImageFilterExposure.class, new ImageFilterExposure());
+        filters.put(ImageFilterVignette.class, new ImageFilterVignette());
+        filters.put(ImageFilterContrast.class, new ImageFilterContrast());
+        filters.put(ImageFilterShadows.class, new ImageFilterShadows());
+        filters.put(ImageFilterHighlights.class, new ImageFilterHighlights());
+        filters.put(ImageFilterVibrance.class, new ImageFilterVibrance());
+        filters.put(ImageFilterSharpen.class, new ImageFilterSharpen());
+        filters.put(ImageFilterCurves.class, new ImageFilterCurves());
+        filters.put(ImageFilterDraw.class, new ImageFilterDraw());
+        filters.put(ImageFilterHue.class, new ImageFilterHue());
+        filters.put(ImageFilterSaturated.class, new ImageFilterSaturated());
+        filters.put(ImageFilterBwFilter.class, new ImageFilterBwFilter());
+        filters.put(ImageFilterNegative.class, new ImageFilterNegative());
+        filters.put(ImageFilterEdge.class, new ImageFilterEdge());
+        filters.put(ImageFilterKMeans.class, new ImageFilterKMeans());
+        filters.put(ImageFilterFx.class, new ImageFilterFx());
+        filters.put(ImageFilterBorder.class, new ImageFilterBorder());
+        filters.put(ImageFilterParametricBorder.class, new ImageFilterParametricBorder());
     }
 
     public ImageFilter getFilter(Class c) {
@@ -79,7 +67,7 @@ public class BaseFiltersManager {
     }
 
     public void addLooks(Vector<FilterRepresentation> representations) {
-        // subclass can add representations
+        // Override
     }
 
     public void addEffects(Vector<FilterRepresentation> representations) {
index ae5a034..fd5cd0d 100644 (file)
@@ -22,7 +22,6 @@ import android.util.Log;
 
 import com.android.gallery3d.filtershow.ImageStateAdapter;
 import com.android.gallery3d.filtershow.cache.ImageLoader;
-import com.android.gallery3d.filtershow.filters.BaseFiltersManager;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
 import com.android.gallery3d.filtershow.filters.FiltersManager;
 import com.android.gallery3d.filtershow.filters.ImageFilter;
index e54c83e..3e52f5e 100644 (file)
@@ -35,7 +35,6 @@ import android.widget.PopupMenu;
 
 import com.android.gallery3d.R;
 import com.android.gallery3d.filtershow.editors.EditorCurves;
-import com.android.gallery3d.filtershow.filters.BaseFiltersManager;
 import com.android.gallery3d.filtershow.filters.FilterCurvesRepresentation;
 import com.android.gallery3d.filtershow.filters.FiltersManager;
 import com.android.gallery3d.filtershow.filters.ImageFilterCurves;
index 988cf2d..b05b546 100644 (file)
 
 package com.android.gallery3d.filtershow.filters;
 
+import java.util.HashMap;
+
 public class FiltersManager extends BaseFiltersManager {
-    private static FiltersManager gInstance = null;
+    private static FiltersManager sInstance = null;
+
+    protected FiltersManager() {
+        mFilters = new HashMap<Class, ImageFilter>();
+        addFilters(mFilters);
+    }
 
     public static FiltersManager getManager() {
-        if (gInstance == null) {
-            gInstance = new FiltersManager();
+        if (sInstance == null) {
+            sInstance = new FiltersManager();
         }
-        return gInstance;
+        return sInstance;
+    }
+
+    public static void reset() {
+        sInstance = null;
     }
 }