Skip to content

Commit

Permalink
Added options to reset various Vito listeners when the FrescoDrawable…
Browse files Browse the repository at this point in the history
… is reset

Differential Revision: D65943207

fbshipit-source-id: 13659f86816f249f50916f2cb2188eefa3e24baa
  • Loading branch information
oprisnik authored and facebook-github-bot committed Nov 14, 2024
1 parent 3bb80b8 commit bad03fa
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,27 @@ class CombinedImageListenerImpl : CombinedImageListener {
imagePerfLoggingListener?.onEmptyEvent(callerContext)
}

override fun onReset() {
override fun onReset(
resetVitoImageRequestListener: Boolean,
resetLocalVitoImageRequestListener: Boolean,
resetLocalImagePerfStateListener: Boolean,
resetControllerListener2: Boolean,
) {
try {
imageListener = null
(imagePerfLoggingListener as? Closeable)?.close()
if (resetVitoImageRequestListener) {
vitoImageRequestListener = null
}
if (resetLocalVitoImageRequestListener) {
localVitoImageRequestListener = null
}
if (resetLocalImagePerfStateListener) {
localImagePerfStateListener = null
}
if (resetControllerListener2) {
controllerListener2 = null
}
} catch (e: IOException) {}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,13 @@ class KFrescoController(
T : Drawable,
T : FrescoDrawableInterface {
traceSection("KFrescoController#createDrawable") {
val drawable = KFrescoVitoDrawable(imagePerfListener)
val drawable =
KFrescoVitoDrawable(
imagePerfListener,
config.experimentalResetVitoImageRequestListener(),
config.experimentalResetLocalVitoImageRequestListener(),
config.experimentalResetLocalImagePerfStateListener(),
config.experimentalResetControllerListener2())
drawable.uiFramework = uiFramework
imagePerfLoggingListenerSupplier
?.get()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ import java.io.Closeable
import java.io.IOException

class KFrescoVitoDrawable(
private val _imagePerfListener: VitoImagePerfListener = NopImagePerfListener()
private val _imagePerfListener: VitoImagePerfListener = NopImagePerfListener(),
private val resetVitoImageRequestListener: Boolean = false,
private val resetLocalVitoImageRequestListener: Boolean = false,
private val resetLocalImagePerfStateListener: Boolean = false,
private val resetControllerListener2: Boolean = false,
) : Drawable(), FrescoDrawableInterface, Drawable.Callback {

var _imageId: Long = 0
Expand Down Expand Up @@ -137,8 +141,11 @@ class KFrescoVitoDrawable(
debugOverlayImageLayer?.reset()
hasBoundsSet = false

listenerManager.onReset()
listenerManager.imageListener = null
listenerManager.onReset(
resetVitoImageRequestListener,
resetLocalVitoImageRequestListener,
resetLocalImagePerfStateListener,
resetControllerListener2)
}

private var drawableColorFilter: ColorFilter? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,11 @@ open class FrescoController2Impl(
config.useNewReleaseCallback(),
imagePerfListenerSupplier?.get(),
vitoImagePerfListener,
uiFramework)
uiFramework,
config.experimentalResetVitoImageRequestListener(),
config.experimentalResetLocalVitoImageRequestListener(),
config.experimentalResetLocalImagePerfStateListener(),
config.experimentalResetControllerListener2())
as T

override fun fetch(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ class FrescoDrawable2Impl(
imagePerfLoggingListener: ImagePerfLoggingListener?,
vitoImagePerfListener: VitoImagePerfListener,
override var uiFramework: String? = null,
private val resetVitoImageRequestListener: Boolean = false,
private val resetLocalVitoImageRequestListener: Boolean = false,
private val resetLocalImagePerfStateListener: Boolean = false,
private val resetControllerListener2: Boolean = false,
) : FrescoDrawable2(), DataSubscriber<CloseableReference<CloseableImage>> {

override var imageRequest: VitoImageRequest? = null
Expand Down Expand Up @@ -198,7 +202,11 @@ class FrescoDrawable2Impl(
imageOrigin = ImageOrigin.UNKNOWN
extras = null
setOnFadeListener(null)
internalListener.onReset()
internalListener.onReset(
resetVitoImageRequestListener,
resetLocalVitoImageRequestListener,
resetLocalImagePerfStateListener,
resetControllerListener2)
}

fun scheduleReleaseDelayed() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,10 @@ interface CombinedImageListener : VitoImageRequestListener {

fun setLocalImagePerfStateListener(imagePerfNotifier: ImagePerfNotifier?)

fun onReset()
fun onReset(
resetVitoImageRequestListener: Boolean,
resetLocalVitoImageRequestListener: Boolean,
resetLocalImagePerfStateListener: Boolean,
resetControllerListener2: Boolean
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ constructor(override val prefetchConfig: PrefetchConfig = DefaultPrefetchConfig(
contextChain: ContextChain?
): Boolean = true

override fun experimentalResetVitoImageRequestListener() = false

override fun experimentalResetLocalVitoImageRequestListener() = false

override fun experimentalResetLocalImagePerfStateListener() = false

override fun experimentalResetControllerListener2() = false

open class DefaultPrefetchConfig : PrefetchConfig {
override fun prefetchInOnPrepare(): Boolean = true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,12 @@ interface FrescoVitoConfig {
callerContext: Any?,
contextChain: ContextChain?
): Boolean

fun experimentalResetVitoImageRequestListener(): Boolean

fun experimentalResetLocalVitoImageRequestListener(): Boolean

fun experimentalResetLocalImagePerfStateListener(): Boolean

fun experimentalResetControllerListener2(): Boolean
}

0 comments on commit bad03fa

Please sign in to comment.