Skip to content

Commit

Permalink
Add logic to use the dynamic cache to READ if the DYNAMIC CacheChoice…
Browse files Browse the repository at this point in the history
… is selected for the ImageRequest

Reviewed By: oprisnik

Differential Revision: D57387728

fbshipit-source-id: 911a0bc41986821a0b3fa26bbc432ed4345f6845
  • Loading branch information
Stephen Aigbomian authored and facebook-github-bot committed May 30, 2024
1 parent a4d57a4 commit 5d88f94
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import com.facebook.imagepipeline.cache.CacheKeyFactory;
import com.facebook.imagepipeline.image.EncodedImage;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequest.CacheChoice;
import com.facebook.infer.annotation.Nullsafe;
import java.util.Map;
import java.util.concurrent.CancellationException;
Expand Down Expand Up @@ -80,9 +79,25 @@ public void produceResults(

final CacheKey cacheKey =
mCacheKeyFactory.getEncodedCacheKey(imageRequest, producerContext.getCallerContext());
final boolean isSmallRequest = (imageRequest.getCacheChoice() == CacheChoice.SMALL);
final BufferedDiskCache preferredCache =
isSmallRequest ? mSmallImageBufferedDiskCache : mDefaultBufferedDiskCache;
DiskCacheDecision.chooseDiskCacheForRequest(
imageRequest,
mSmallImageBufferedDiskCache,
mDefaultBufferedDiskCache,
mDynamicBufferedDiskCaches);
if (preferredCache == null) {
producerContext
.getProducerListener()
.onProducerFinishWithFailure(
producerContext,
PRODUCER_NAME,
new DiskCacheDecision.DiskCacheDecisionNoDiskCacheChosenException(
"Got no disk cache for CacheChoice: "
+ Integer.valueOf(imageRequest.getCacheChoice().ordinal()).toString()),
null);
maybeStartInputProducer(consumer, producerContext);
return;
}
final AtomicBoolean isCancelled = new AtomicBoolean(false);
final Task<EncodedImage> diskLookupTask = preferredCache.get(cacheKey, isCancelled);
final Continuation<EncodedImage, Void> continuation =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,45 @@ public void testSmallImageDiskCacheGetSuccessful() {
Assert.assertFalse(EncodedImage.isValid(mFinalEncodedImage));
}

@Test
public void testDynamicImageDiskCacheGetSuccessful() {
setUpDiskCacheProducerEnabled(true);
when(mImageRequest.getCacheChoice()).thenReturn(ImageRequest.CacheChoice.DYNAMIC);
when(mImageRequest.getDiskCacheId()).thenReturn(mDiskCacheId2);
setupDiskCacheGetSuccess(mBufferedDiskCache2);
mDiskCacheReadProducer.produceResults(mConsumer, mProducerContext);
verify(mConsumer).onNewResult(mFinalEncodedImage, Consumer.IS_LAST);
verify(mProducerListener).onProducerStart(mProducerContext, PRODUCER_NAME);
ArgumentCaptor<HashMap> captor = ArgumentCaptor.forClass(HashMap.class);
verify(mProducerListener)
.onProducerFinishWithSuccess(eq(mProducerContext), eq(PRODUCER_NAME), captor.capture());
Map<String, String> resultMap = captor.getValue();
assertEquals("true", resultMap.get(DiskCacheReadProducer.EXTRA_CACHED_VALUE_FOUND));
assertEquals("0", resultMap.get(DiskCacheReadProducer.ENCODED_IMAGE_SIZE));
verify(mProducerListener).onUltimateProducerReached(mProducerContext, PRODUCER_NAME, true);
Assert.assertFalse(EncodedImage.isValid(mFinalEncodedImage));
}

@Test
public void testDynamicImageDiskCacheGetFailed_NoDiskCacheIdInImageRequest() {
setUpDiskCacheProducerEnabled(true);
when(mImageRequest.getCacheChoice()).thenReturn(ImageRequest.CacheChoice.DYNAMIC);
setupDiskCacheGetSuccess(mBufferedDiskCache2);

mDiskCacheReadProducer.produceResults(mConsumer, mProducerContext);
verify(mInputProducer).produceResults(mConsumer, mProducerContext);
verify(mProducerListener).onProducerStart(mProducerContext, PRODUCER_NAME);
ArgumentCaptor<HashMap> captor = ArgumentCaptor.forClass(HashMap.class);
verify(mProducerListener, times(0))
.onProducerFinishWithSuccess(eq(mProducerContext), eq(PRODUCER_NAME), captor.capture());
verify(mProducerListener, times(1))
.onProducerFinishWithFailure(
eq(mProducerContext),
eq(PRODUCER_NAME),
isA(DiskCacheDecision.DiskCacheDecisionNoDiskCacheChosenException.class),
eq(null));
}

@Test
public void testDiskCacheGetSuccessfulNoExtraMap() {
setUpDiskCacheProducerEnabled(true);
Expand Down

0 comments on commit 5d88f94

Please sign in to comment.