diff --git a/android/src/main/java/com/facebook/flipper/plugins/fresco/FrescoFlipperPlugin.java b/android/src/main/java/com/facebook/flipper/plugins/fresco/FrescoFlipperPlugin.java index 27a78a03c..a8f6b8533 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/fresco/FrescoFlipperPlugin.java +++ b/android/src/main/java/com/facebook/flipper/plugins/fresco/FrescoFlipperPlugin.java @@ -13,6 +13,7 @@ import com.facebook.common.internal.Predicate; import com.facebook.common.memory.manager.DebugMemoryManager; import com.facebook.common.memory.manager.NoOpDebugMemoryManager; import com.facebook.common.references.CloseableReference; +import com.facebook.common.references.SharedReference; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.backends.pipeline.info.ImageLoadStatus; import com.facebook.drawee.backends.pipeline.info.ImageOriginUtils; @@ -47,7 +48,8 @@ import javax.annotation.Nullable; * Allows Sonar to display the contents of Fresco's caches. This is useful for developers to debug * what images are being held in cache as they navigate through their app. */ -public class FrescoFlipperPlugin extends BufferingFlipperPlugin implements ImagePerfDataListener { +public class FrescoFlipperPlugin extends BufferingFlipperPlugin + implements ImagePerfDataListener, CloseableReferenceLeakTracker.Listener { private static final String FRESCO_EVENT = "events"; private static final String FRESCO_DEBUGOVERLAY_EVENT = "debug_overlay_event"; @@ -93,6 +95,10 @@ public class FrescoFlipperPlugin extends BufferingFlipperPlugin implements Image mMemoryManager = memoryManager; mPerfLogger = perfLogger; mDebugPrefHelper = debugPrefHelper; + + if (closeableReferenceLeakTracker != null) { + closeableReferenceLeakTracker.setListener(this); + } } public FrescoFlipperPlugin() { @@ -507,4 +513,14 @@ public class FrescoFlipperPlugin extends BufferingFlipperPlugin implements Image private static void respondError(FlipperResponder responder, String errorReason) { responder.error(new FlipperObject.Builder().put("reason", errorReason).build()); } + + @Override + public void onCloseableReferenceLeak( + SharedReference reference, @Nullable Throwable stacktrace) { + final FlipperObject.Builder builder = + new FlipperObject.Builder() + .put("identityHashCode", System.identityHashCode(reference)) + .put("className", reference.get().getClass().getName()); + send(FRESCO_CLOSEABLE_REFERENCE_LEAK_EVENT, builder.build()); + } } diff --git a/build.gradle b/build.gradle index dccbf6091..c18c9538e 100644 --- a/build.gradle +++ b/build.gradle @@ -89,7 +89,7 @@ ext.deps = [ testCore : 'androidx.test:core:1.1.0', testRules : 'androidx.test:rules:1.1.0', // Plugin dependencies - frescoFlipper : 'com.facebook.fresco:flipper:1.14.2', - frescoStetho : 'com.facebook.fresco:stetho:1.14.2', - fresco : 'com.facebook.fresco:fresco:1.14.2' + frescoFlipper : 'com.facebook.fresco:flipper:2.0.0', + frescoStetho : 'com.facebook.fresco:stetho:2.0.0', + fresco : 'com.facebook.fresco:fresco:2.0.0' ]