Files
flipper/docs/setup/images-plugin.md
Pascal Hartig f279da4d90 Fix Fresco typos
Summary: Per title.

Reviewed By: jknoxville

Differential Revision: D16089146

fbshipit-source-id: 3bfa6494ecc99c191fbb57ef67723283b5ab0998
2019-07-02 06:23:54 -07:00

2.6 KiB

id, title, sidebar_label
id title sidebar_label
images-plugin Images Setup Images

Currently, the images plugin only supports Fresco for Android as backend, but just like the network plugin, support for other image loading libraries could easily be added. Send us a PR!

Fresco and Android

import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;

client.addPlugin(new FrescoFlipperPlugin());

The FrescoFlipperPlugin constructor offers a whole lot of configuration options which can be useful if you have an advanced setup of Fresco in your application:

FrescoFlipperPlugin(
      DebugImageTracker imageTracker,
      PlatformBitmapFactory bitmapFactory,
      @Nullable FlipperObjectHelper flipperObjectHelper,
      DebugMemoryManager memoryManager,
      FlipperPerfLogger perfLogger,
      @Nullable FrescoFlipperDebugPrefHelper debugPrefHelper,
      @Nullable CloseableReferenceLeakTracker closeableReferenceLeakTracker) { ... }

Leak Tracking

The Flipper plugin can help you track down CloseableReferences who have not had close() called on them. This can have a negative impact on the performance of your application.

To enable this functionality, you need to create a CloseableReferenceLeakTracker and set it in both your ImagePipelineConfig for Fresco and the FrescoPluginPlugin on creation.

import com.facebook.imagepipeline.debug.FlipperCloseableReferenceLeakTracker;

// ...

FlipperCloseableReferenceLeakTracker leakTracker = new FlipperCloseableReferenceLeakTracker();

new ImagePipelineConfig.Builder()
    // ...
    .setCloseableReferenceLeakTracker(leakTracker)
    .build();


client.addPlugin(new FrescoFlipperPlugin(
    new FlipperImageTracker(),
    Fresco.getImagePipelineFactory().getPlatformBitmapFactory(),
    null,
    new NoOpDebugMemoryManager(),
    new NoOpFlipperPerfLogger(),
    null,
    leakTracker));

Attribution

In order to annotate images with the context they are used in, you have to set a caller context when loading the image. This can be any object, so for the simplest case, a String will suffice.

String callerContext = "my_feature";

// For DraweeViews:
draweeView.setImageURI(uri, callerContext);

// For prefetching:
ImagePipeline imagePipeline = Fresco.getImagePipeline();
imagePipeline.prefetchToDiskCache(imageRequest, callerContext);

// For manually fetching an image:
DataSource<CloseableReference<CloseableImage>>
    dataSource = imagePipeline.fetchDecodedImage(imageRequest, callerContext);

If a caller context is supplied, the image will be properly attributed in the Flipper image plugin.