diff options
| author | John Hoford <hoford@google.com> | 2013-04-23 15:55:51 -0700 |
|---|---|---|
| committer | John Hoford <hoford@google.com> | 2013-04-23 16:03:27 -0700 |
| commit | 17218987cfa32cff5dc719cfb88d0e3ce3677f00 (patch) | |
| tree | 0b2d8ce58dd4763cf4eb9d04ea0153347f1f954b /src/com | |
| parent | 8600c562b8ed0f636bc966a8aac83dc90326f0fb (diff) | |
| download | android_packages_apps_Gallery2-17218987cfa32cff5dc719cfb88d0e3ce3677f00.tar.gz android_packages_apps_Gallery2-17218987cfa32cff5dc719cfb88d0e3ce3677f00.tar.bz2 android_packages_apps_Gallery2-17218987cfa32cff5dc719cfb88d0e3ce3677f00.zip | |
interruptible renderer
bug:8632908
Change-Id: I4df59fb0c82370491d953292fd1cd17443054ab3
Diffstat (limited to 'src/com')
4 files changed, 27 insertions, 4 deletions
diff --git a/src/com/android/gallery3d/filtershow/cache/CachingPipeline.java b/src/com/android/gallery3d/filtershow/cache/CachingPipeline.java index 566d161b5..e3c77000b 100644 --- a/src/com/android/gallery3d/filtershow/cache/CachingPipeline.java +++ b/src/com/android/gallery3d/filtershow/cache/CachingPipeline.java @@ -96,6 +96,10 @@ public class CachingPipeline { sResources = null; } + public void stop() { + mEnvironment.setStop(true); + } + public synchronized void reset() { synchronized (CachingPipeline.class) { if (getRenderScriptContext() == null) { @@ -170,6 +174,7 @@ public class CachingPipeline { } mEnvironment.setQuality(ImagePreset.QUALITY_PREVIEW); mEnvironment.setImagePreset(preset); + mEnvironment.setStop(false); } public void setOriginal(Bitmap bitmap) { @@ -294,7 +299,9 @@ public class CachingPipeline { } Bitmap bmp = preset.apply(bitmap, mEnvironment); - request.setBitmap(bmp); + if (!mEnvironment.needsStop()) { + request.setBitmap(bmp); + } mFiltersManager.freeFilterResources(preset); } } diff --git a/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java b/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java index 8202d71bb..a0b289733 100644 --- a/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java +++ b/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java @@ -117,9 +117,11 @@ public class FilteringPipeline implements Handler.Callback { } else { mAccessoryPipeline.render(request); } - Message uimsg = mUIHandler.obtainMessage(NEW_RENDERING_REQUEST); - uimsg.obj = request; - mUIHandler.sendMessage(uimsg); + if (request.getBitmap() != null) { + Message uimsg = mUIHandler.obtainMessage(NEW_RENDERING_REQUEST); + uimsg.obj = request; + mUIHandler.sendMessage(uimsg); + } break; } } @@ -185,6 +187,7 @@ public class FilteringPipeline implements Handler.Callback { return; } mHasUnhandledPreviewRequest = true; + mHighresPreviewPipeline.stop(); if (mProcessingHandler.hasMessages(COMPUTE_PRESET)) { return; } diff --git a/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java b/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java index 3c53227fc..c454c1ab6 100644 --- a/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java +++ b/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java @@ -35,6 +35,16 @@ public class FilterEnvironment { private int mQuality; private FiltersManager mFiltersManager; private CachingPipeline mCachingPipeline; + private volatile boolean mStop = false; + + public synchronized boolean needsStop() { + return mStop; + } + + public synchronized void setStop(boolean stop) { + this.mStop = stop; + } + private HashMap<Long, WeakReference<Bitmap>> bitmapCach = new HashMap<Long, WeakReference<Bitmap>>(); diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java index bd2f494cd..ca97761ed 100644 --- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java +++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java @@ -472,6 +472,9 @@ public class ImagePreset { representation.synchronizeRepresentation(); } bitmap = environment.applyRepresentation(representation, bitmap); + if (environment.needsStop()) { + return bitmap; + } } } |
