From eb6001998be697f6e956eec6eb2385ce7572aa39 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Fri, 1 May 2020 17:17:06 -0700 Subject: [PATCH] Extend logging of image prefetching to include react_native contextChain Summary: This diff extends the logging of image prefetching to include react_native ID in the ContextChain of the Fresco logger. This is necesary to properly assign pre-fetching of RN Android images to the react_native ID changelog: [Internal][Android] Reviewed By: fkgozali Differential Revision: D21362266 fbshipit-source-id: ff64f0ebd12f61b713996558eb2d962f96ad8d94 --- .../com/facebook/react/modules/image/BUCK | 1 + .../modules/image/ImageLoaderModule.java | 37 +++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/image/BUCK b/ReactAndroid/src/main/java/com/facebook/react/modules/image/BUCK index 519a07adcba..1116925eee2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/image/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/image/BUCK @@ -20,6 +20,7 @@ rn_android_library( react_native_target("java/com/facebook/react/modules/fresco:fresco"), react_native_target("java/com/facebook/react/module/annotations:annotations"), react_native_target("java/com/facebook/react/views/imagehelper:imagehelper"), + react_native_target("java/com/facebook/react/views/image:image"), ], exported_deps = [ react_native_target("java/com/facebook/fbreact/specs:FBReactNativeSpec"), diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java index e3aa67d8070..6ee149cb895 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java @@ -33,6 +33,7 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableMap; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.modules.fresco.ReactNetworkImageRequest; +import com.facebook.react.views.image.ReactCallerContextFactory; import com.facebook.react.views.imagehelper.ImageSource; @ReactModule(name = ImageLoaderModule.NAME) @@ -43,20 +44,16 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec private static final String ERROR_PREFETCH_FAILURE = "E_PREFETCH_FAILURE"; private static final String ERROR_GET_SIZE_FAILURE = "E_GET_SIZE_FAILURE"; public static final String NAME = "ImageLoader"; + private static final Object DEFAULT_CALLER_CONTEXT = new Object(); private @Nullable final Object mCallerContext; private final Object mEnqueuedRequestMonitor = new Object(); private final SparseArray> mEnqueuedRequests = new SparseArray<>(); - private ImagePipeline mImagePipeline; + private final ImagePipeline mImagePipeline; + private @Nullable ReactCallerContextFactory mCallerContextFactory; public ImageLoaderModule(ReactApplicationContext reactContext) { - this(reactContext, null); - } - - public ImageLoaderModule(ReactApplicationContext reactContext, ImagePipeline imagePipeline) { - super(reactContext); - mCallerContext = Fresco.getImagePipeline(); - mImagePipeline = imagePipeline; + this(reactContext, DEFAULT_CALLER_CONTEXT); } public ImageLoaderModule(ReactApplicationContext reactContext, Object callerContext) { @@ -65,6 +62,22 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec mImagePipeline = Fresco.getImagePipeline(); } + public ImageLoaderModule( + ReactApplicationContext reactContext, + ImagePipeline imagePipeline, + ReactCallerContextFactory callerContextFactory) { + super(reactContext); + mCallerContextFactory = callerContextFactory; + mImagePipeline = imagePipeline; + mCallerContext = null; + } + + private @Nullable Object getCallerContext() { + return mCallerContextFactory != null + ? mCallerContextFactory.getOrCreateCallerContext("", "") + : mCallerContext; + } + @Override @NonNull public String getName() { @@ -89,7 +102,7 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec ImageRequest request = ImageRequestBuilder.newBuilderWithSource(source.getUri()).build(); DataSource> dataSource = - Fresco.getImagePipeline().fetchDecodedImage(request, mCallerContext); + mImagePipeline.fetchDecodedImage(request, getCallerContext()); DataSubscriber> dataSubscriber = new BaseDataSubscriber>() { @@ -150,7 +163,7 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec ReactNetworkImageRequest.fromBuilderWithHeaders(imageRequestBuilder, headers); DataSource> dataSource = - Fresco.getImagePipeline().fetchDecodedImage(request, mCallerContext); + mImagePipeline.fetchDecodedImage(request, getCallerContext()); DataSubscriber> dataSubscriber = new BaseDataSubscriber>() { @@ -210,7 +223,7 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri).build(); DataSource prefetchSource = - Fresco.getImagePipeline().prefetchToDiskCache(request, mCallerContext); + mImagePipeline.prefetchToDiskCache(request, getCallerContext()); DataSubscriber prefetchSubscriber = new BaseDataSubscriber() { @Override @@ -257,7 +270,7 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec @Override protected void doInBackgroundGuarded(Void... params) { WritableMap result = Arguments.createMap(); - ImagePipeline imagePipeline = Fresco.getImagePipeline(); + ImagePipeline imagePipeline = mImagePipeline; for (int i = 0; i < uris.size(); i++) { String uriString = uris.getString(i); final Uri uri = Uri.parse(uriString);