Skip to content

Commit

Permalink
Simplify KFrescoController fetch logic for cached images / direct bit…
Browse files Browse the repository at this point in the history
…maps

Differential Revision: D45115774

fbshipit-source-id: 01196b43a3d3597bba8d6edcd1b284706d2941b0
  • Loading branch information
oprisnik authored and facebook-github-bot committed May 30, 2023
1 parent 97cf409 commit ff30e12
Showing 1 changed file with 41 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,6 @@ class KFrescoController(
}

val options: ImageOptions = imageRequest.imageOptions
val resources: Resources = imageRequest.resources

drawable.listenerManager.onSubmit(imageId, imageRequest, callerContext, drawable.obtainExtras())
drawable.imagePerfListener.onImageFetch(drawable)
Expand All @@ -138,53 +137,13 @@ class KFrescoController(
val closeableBitmap: CloseableBitmap =
CloseableStaticBitmap.of(bitmap, {}, ImmutableQualityInfo.FULL_QUALITY, 0)
val bitmapRef = CloseableReference.of<CloseableImage>(closeableBitmap)
return try {
// Immediately display the actual image.
drawable.setFetchSubmitted(true)
drawable.actualImageLayer.setActualImage(
resources, options, closeableBitmap, imageToDataModelMapper)
drawable.invalidateSelf()
drawable.listenerManager.onFinalImageSet(
imageId,
imageRequest,
ImageOrigin.MEMORY_BITMAP_SHORTCUT,
closeableBitmap.imageInfo,
drawable.obtainExtras(null, bitmapRef),
drawable.actualImageDrawable)
debugOverlayHandler?.update(drawable)
true
} finally {
CloseableReference.closeSafely(bitmapRef)
}
return drawable.setActualImage(imageRequest, bitmapRef)
}

// Check if the image is in cache
val cachedImage = vitoImagePipeline.getCachedImage(imageRequest)
try {
if (CloseableReference.isValid(cachedImage)) {
// Immediately display the actual image.
val image = cachedImage?.get()
if (image != null) {
drawable.setFetchSubmitted(true)
drawable.closeable = cachedImage.clone()
drawable.actualImageLayer.setActualImage(
resources, options, image, imageToDataModelMapper)
// TODO(T105148151): trigger listeners
drawable.invalidateSelf()
val imageInfo = image.imageInfo
drawable.listenerManager.onFinalImageSet(
imageId,
imageRequest,
ImageOrigin.MEMORY_BITMAP_SHORTCUT,
imageInfo,
drawable.obtainExtras(null, cachedImage),
drawable.actualImageDrawable)
debugOverlayHandler?.update(drawable)
return true
}
}
} finally {
CloseableReference.closeSafely(cachedImage)
if (drawable.setActualImage(imageRequest, cachedImage)) {
return true
}

// The image is not in cache -> Set up layers visible until the image is available
Expand Down Expand Up @@ -237,6 +196,44 @@ class KFrescoController(
ImageReleaseScheduler.releaseImmediately(drawable)
}

/**
* Set the actual image to be the given image reference.
*
* @return true if the image has been set, false if it failed (e.g. invalid/null image reference)
*/
private fun KFrescoVitoDrawable.setActualImage(
imageRequest: VitoImageRequest,
imageReference: CloseableReference<CloseableImage>?
): Boolean {
try {
if (CloseableReference.isValid(imageReference)) {
// Immediately display the actual image.
val image = imageReference?.get()
if (image != null) {
setFetchSubmitted(true)
closeable = imageReference.clone()
actualImageLayer.setActualImage(
imageRequest.resources, imageRequest.imageOptions, image, imageToDataModelMapper)
// TODO(T105148151): trigger listeners
invalidateSelf()
val imageInfo = image.imageInfo
listenerManager.onFinalImageSet(
imageId,
imageRequest,
ImageOrigin.MEMORY_BITMAP_SHORTCUT,
imageInfo,
obtainExtras(null, imageReference),
actualImageDrawable)
debugOverlayHandler?.update(this)
return true
}
}
} finally {
CloseableReference.closeSafely(imageReference)
}
return false
}

private fun isAlreadyLoadingImage(
imageRequest: VitoImageRequest,
drawable: KFrescoVitoDrawable
Expand Down

0 comments on commit ff30e12

Please sign in to comment.