diff options
author | Sam Judd <judds@google.com> | 2014-07-09 21:36:12 -0700 |
---|---|---|
committer | Sam Judd <judds@google.com> | 2014-07-09 21:36:12 -0700 |
commit | ce5bd7fa20a673612e8ba3cb5257c1ce533bd758 (patch) | |
tree | 47e70ac594d824a635504d1472f5eb1e7b417e6b /library | |
parent | a23b64f5872138b0a5fa4c95be5dcf3f6f0942d8 (diff) | |
download | glide-ce5bd7fa20a673612e8ba3cb5257c1ce533bd758.tar.gz |
Avoid unnecessary get() calls.
Diffstat (limited to 'library')
5 files changed, 50 insertions, 12 deletions
diff --git a/library/src/main/java/com/bumptech/glide/load/engine/Engine.java b/library/src/main/java/com/bumptech/glide/load/engine/Engine.java index 117883ab..ce6d2b83 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/Engine.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/Engine.java @@ -222,13 +222,11 @@ public class Engine implements EngineJobListener, MemoryCache.ResourceRemovedLis } private static class ResourceWeakReference extends WeakReference<Resource> { - private final Object resource; private final Key key; public ResourceWeakReference(Key key, Resource r, ReferenceQueue<? super Resource> q) { super(r, q); this.key = key; - resource = r.get(); } } @@ -247,9 +245,6 @@ public class Engine implements EngineJobListener, MemoryCache.ResourceRemovedLis ResourceWeakReference ref = (ResourceWeakReference) queue.poll(); if (ref != null) { activeResources.remove(ref.key); - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Maybe leaked a resource: " + ref.resource); - } } return true; diff --git a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java index 51018fad..fb6a6595 100644 --- a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java +++ b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java @@ -67,13 +67,15 @@ class GifFrameManager { frameResourceDecoder = new GifFrameResourceDecoder(bitmapPool); sourceEncoder = NullEncoder.get(); + if (transformation == null) { + throw new NullPointerException("Transformation must not be null"); + } + if (!decoder.isTransparent()) { // For non transparent gifs, we can beat the performance of our gif decoder for each frame by decoding jpegs // from disk. - - //TODO: cacheDecoder = new FileToStreamDecoder<Bitmap>(new StreamBitmapDecoder(context)); - encoder = new BitmapEncoder(Bitmap.CompressFormat.JPEG, 70); + encoder = new BitmapEncoder(); } else { // For transparent gifs, we would have to encode as pngs which is actually slower than our gif decoder so we // avoid writing frames to the disk cache entirely. diff --git a/library/src/main/java/com/bumptech/glide/request/GenericRequest.java b/library/src/main/java/com/bumptech/glide/request/GenericRequest.java index 6a05c48b..ec97e5a5 100644 --- a/library/src/main/java/com/bumptech/glide/request/GenericRequest.java +++ b/library/src/main/java/com/bumptech/glide/request/GenericRequest.java @@ -205,6 +205,10 @@ public final class GenericRequest<A, T, Z, R> implements Request, Target.SizeRea if (loadProvider.getSourceEncoder() == null) { throw new NullPointerException("SourceEncoder must not be null, try .sourceEncoder(Encoder)"); } + if (transformation == null) { + throw new NullPointerException("Transformation must not be null, try .transform(UnitTransformation" + + ".get())"); + } } } @@ -391,15 +395,16 @@ public final class GenericRequest<A, T, Z, R> implements Request, Target.SizeRea resource.release(); return; } - if (resource == null || !transcodeClass.isAssignableFrom(resource.get().getClass())) { + Object received = resource != null ? resource.get() : null; + if (resource == null || !transcodeClass.isAssignableFrom(received.getClass())) { if (resource != null) { resource.release(); } onException(new Exception("Expected to receive an object of " + transcodeClass + " but instead got " - + (resource != null ? resource.get() : null))); + + received)); return; } - R result = (R) resource.get(); + R result = (R) received; if (requestListener == null || !requestListener.onResourceReady(result, model, target, loadedFromMemoryCache, isFirstImage())) { diff --git a/library/src/test/java/com/bumptech/glide/load/resource/gif/GifFrameManagerTest.java b/library/src/test/java/com/bumptech/glide/load/resource/gif/GifFrameManagerTest.java new file mode 100644 index 00000000..fecf2160 --- /dev/null +++ b/library/src/test/java/com/bumptech/glide/load/resource/gif/GifFrameManagerTest.java @@ -0,0 +1,19 @@ +package com.bumptech.glide.load.resource.gif; + +import com.bumptech.glide.gifdecoder.GifDecoder; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; + +import static org.mockito.Mockito.mock; + +@RunWith(RobolectricTestRunner.class) +public class GifFrameManagerTest { + + @Test(expected = NullPointerException.class) + public void testThrowsIfTransformationIsNull() { + new GifFrameManager(Robolectric.application, mock(GifDecoder.class), null, 100, 100); + } +}
\ No newline at end of file diff --git a/library/src/test/java/com/bumptech/glide/request/GenericRequestTest.java b/library/src/test/java/com/bumptech/glide/request/GenericRequestTest.java index ae1afe3d..ca5cadfb 100644 --- a/library/src/test/java/com/bumptech/glide/request/GenericRequestTest.java +++ b/library/src/test/java/com/bumptech/glide/request/GenericRequestTest.java @@ -64,6 +64,7 @@ public class GenericRequestTest { int placeholderResourceId = 0; Drawable placeholderDrawable = null; int errorResourceId = 0; + Transformation transformation = mock(Transformation.class); Drawable errorDrawable = null; LoadProvider<Object, Object, Object, Object> loadProvider = mock(LoadProvider.class); ResourceDecoder<File, Object> cacheDecoder = mock(ResourceDecoder.class); @@ -107,7 +108,7 @@ public class GenericRequestTest { requestListener, requestCoordinator, engine, - mock(Transformation.class), + transformation, Object.class, skipMemoryCache, factory, @@ -164,6 +165,13 @@ public class GenericRequestTest { harness.getRequest(); } + @Test(expected = NullPointerException.class) + public void testThrowsWhenTransformationIsNull() { + harness.transformation = null; + + harness.getRequest(); + } + @Test public void testIsNotCompleteBeforeReceivingResource() { GenericRequest request = harness.getRequest(); @@ -631,6 +639,15 @@ public class GenericRequestTest { any(GlideAnimation.class)); } + @Test + public void testResourceOnlyReceivesOneGetOnResourceReady() { + GenericRequest<Object, Object, Object, Object> request = harness.getRequest(); + request.onResourceReady(harness.resource); + + verify(harness.resource, times(1)).get(); + } + + private static class CallResourceCallback implements Answer { private Resource resource; |