in imagepipeline/src/main/java/com/facebook/imagepipeline/producers/EncodedMemoryCacheProducer.java [45:121]
public void produceResults(
final Consumer<EncodedImage> consumer, final ProducerContext producerContext) {
try {
if (FrescoSystrace.isTracing()) {
FrescoSystrace.beginSection("EncodedMemoryCacheProducer#produceResults");
}
final ProducerListener2 listener = producerContext.getProducerListener();
listener.onProducerStart(producerContext, PRODUCER_NAME);
final ImageRequest imageRequest = producerContext.getImageRequest();
final CacheKey cacheKey =
mCacheKeyFactory.getEncodedCacheKey(imageRequest, producerContext.getCallerContext());
final boolean isEncodedCacheEnabledForRead =
producerContext
.getImageRequest()
.isCacheEnabled(ImageRequest.CachesLocationsMasks.ENCODED_READ);
CloseableReference<PooledByteBuffer> cachedReference =
isEncodedCacheEnabledForRead ? mMemoryCache.get(cacheKey) : null;
try {
if (cachedReference != null) {
EncodedImage cachedEncodedImage = new EncodedImage(cachedReference);
try {
listener.onProducerFinishWithSuccess(
producerContext,
PRODUCER_NAME,
listener.requiresExtraMap(producerContext, PRODUCER_NAME)
? ImmutableMap.of(EXTRA_CACHED_VALUE_FOUND, "true")
: null);
listener.onUltimateProducerReached(producerContext, PRODUCER_NAME, true);
producerContext.putOriginExtra("memory_encoded");
consumer.onProgressUpdate(1f);
consumer.onNewResult(cachedEncodedImage, Consumer.IS_LAST);
return;
} finally {
EncodedImage.closeSafely(cachedEncodedImage);
}
}
if (producerContext.getLowestPermittedRequestLevel().getValue()
>= ImageRequest.RequestLevel.ENCODED_MEMORY_CACHE.getValue()) {
listener.onProducerFinishWithSuccess(
producerContext,
PRODUCER_NAME,
listener.requiresExtraMap(producerContext, PRODUCER_NAME)
? ImmutableMap.of(EXTRA_CACHED_VALUE_FOUND, "false")
: null);
listener.onUltimateProducerReached(producerContext, PRODUCER_NAME, false);
producerContext.putOriginExtra("memory_encoded", "nil-result");
consumer.onNewResult(null, Consumer.IS_LAST);
return;
}
Consumer consumerOfInputProducer =
new EncodedMemoryCacheConsumer(
consumer,
mMemoryCache,
cacheKey,
producerContext
.getImageRequest()
.isCacheEnabled(ImageRequest.CachesLocationsMasks.ENCODED_WRITE),
producerContext.getImagePipelineConfig().getExperiments().isEncodedCacheEnabled());
listener.onProducerFinishWithSuccess(
producerContext,
PRODUCER_NAME,
listener.requiresExtraMap(producerContext, PRODUCER_NAME)
? ImmutableMap.of(EXTRA_CACHED_VALUE_FOUND, "false")
: null);
mInputProducer.produceResults(consumerOfInputProducer, producerContext);
} finally {
CloseableReference.closeSafely(cachedReference);
}
} finally {
if (FrescoSystrace.isTracing()) {
FrescoSystrace.endSection();
}
}
}