parent
4a5fed3c42
commit
17c49e2879
|
@ -9,6 +9,8 @@
|
||||||
|
|
||||||
package com.facebook.react.modules.fresco;
|
package com.facebook.react.modules.fresco;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import com.facebook.cache.common.CacheKey;
|
import com.facebook.cache.common.CacheKey;
|
||||||
|
@ -18,6 +20,7 @@ import com.facebook.drawee.backends.pipeline.Fresco;
|
||||||
import com.facebook.imagepipeline.backends.okhttp.OkHttpImagePipelineConfigFactory;
|
import com.facebook.imagepipeline.backends.okhttp.OkHttpImagePipelineConfigFactory;
|
||||||
import com.facebook.imagepipeline.core.ImagePipelineConfig;
|
import com.facebook.imagepipeline.core.ImagePipelineConfig;
|
||||||
import com.facebook.imagepipeline.core.ImagePipelineFactory;
|
import com.facebook.imagepipeline.core.ImagePipelineFactory;
|
||||||
|
import com.facebook.imagepipeline.listener.RequestListener;
|
||||||
import com.facebook.react.bridge.ReactApplicationContext;
|
import com.facebook.react.bridge.ReactApplicationContext;
|
||||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||||
import com.facebook.react.modules.common.ModuleDataCleaner;
|
import com.facebook.react.modules.common.ModuleDataCleaner;
|
||||||
|
@ -38,6 +41,7 @@ public class FrescoModule extends ReactContextBaseJavaModule implements
|
||||||
super(reactContext);
|
super(reactContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
super.initialize();
|
super.initialize();
|
||||||
|
@ -50,11 +54,16 @@ public class FrescoModule extends ReactContextBaseJavaModule implements
|
||||||
SoLoader.loadLibrary(libraryName);
|
SoLoader.loadLibrary(libraryName);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
HashSet<RequestListener> requestListeners = new HashSet<>();
|
||||||
|
requestListeners.add(new SystraceRequestListener());
|
||||||
|
|
||||||
Context context = this.getReactApplicationContext().getApplicationContext();
|
Context context = this.getReactApplicationContext().getApplicationContext();
|
||||||
OkHttpClient okHttpClient = OkHttpClientProvider.getOkHttpClient();
|
OkHttpClient okHttpClient = OkHttpClientProvider.getOkHttpClient();
|
||||||
ImagePipelineConfig config = OkHttpImagePipelineConfigFactory
|
ImagePipelineConfig config = OkHttpImagePipelineConfigFactory
|
||||||
.newBuilder(context, okHttpClient)
|
.newBuilder(context, okHttpClient)
|
||||||
.setDownsampleEnabled(false)
|
.setDownsampleEnabled(false)
|
||||||
|
.setRequestListeners(requestListeners)
|
||||||
.build();
|
.build();
|
||||||
Fresco.initialize(context, config);
|
Fresco.initialize(context, config);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,196 @@
|
||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
package com.facebook.react.modules.fresco;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import com.facebook.imagepipeline.listener.RequestListener;
|
||||||
|
import com.facebook.imagepipeline.request.ImageRequest;
|
||||||
|
import com.facebook.systrace.Systrace;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs requests to Systrace
|
||||||
|
*/
|
||||||
|
public class SystraceRequestListener implements RequestListener {
|
||||||
|
|
||||||
|
int mCurrentID = 0;
|
||||||
|
Map<String, Pair<Integer,String>> mProducerID = new HashMap<>();
|
||||||
|
Map<String, Pair<Integer,String>> mRequestsID = new HashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProducerStart(String requestId, String producerName) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder entryName = new StringBuilder();
|
||||||
|
entryName.append("FRESCO_PRODUCER_");
|
||||||
|
entryName.append(producerName.replace(':', '_'));
|
||||||
|
|
||||||
|
Pair<Integer,String> requestPair = Pair.create(mCurrentID, entryName.toString());
|
||||||
|
Systrace.beginAsyncSection(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
requestPair.second,
|
||||||
|
mCurrentID);
|
||||||
|
mProducerID.put(requestId, requestPair);
|
||||||
|
mCurrentID++;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProducerFinishWithSuccess(
|
||||||
|
String requestId,
|
||||||
|
String producerName,
|
||||||
|
Map<String, String> extraMap) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mProducerID.containsKey(requestId)) {
|
||||||
|
Pair<Integer, String> entry = mProducerID.get(requestId);
|
||||||
|
Systrace.endAsyncSection(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
entry.second,
|
||||||
|
entry.first);
|
||||||
|
mProducerID.remove(requestId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProducerFinishWithFailure(
|
||||||
|
String requestId,
|
||||||
|
String producerName,
|
||||||
|
Throwable throwable,
|
||||||
|
Map<String, String> extraMap) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mProducerID.containsKey(requestId)) {
|
||||||
|
Pair<Integer, String> entry = mProducerID.get(requestId);
|
||||||
|
Systrace.endAsyncSection(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
entry.second,
|
||||||
|
entry.first);
|
||||||
|
mProducerID.remove(requestId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProducerFinishWithCancellation(
|
||||||
|
String requestId, String producerName, Map<String, String> extraMap) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mProducerID.containsKey(requestId)) {
|
||||||
|
Pair<Integer, String> entry = mProducerID.get(requestId);
|
||||||
|
Systrace.endAsyncSection(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
entry.second,
|
||||||
|
entry.first);
|
||||||
|
mProducerID.remove(requestId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProducerEvent(String requestId, String producerName, String producerEventName) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder entryName = new StringBuilder();
|
||||||
|
entryName.append("FRESCO_PRODUCER_EVENT_");
|
||||||
|
entryName.append(requestId.replace(':', '_'));
|
||||||
|
entryName.append("_");
|
||||||
|
entryName.append(producerName.replace(':', '_'));
|
||||||
|
entryName.append("_");
|
||||||
|
entryName.append(producerEventName.replace(':', '_'));
|
||||||
|
Systrace.traceInstant(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
entryName.toString(),
|
||||||
|
Systrace.EventScope.THREAD);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestStart(
|
||||||
|
ImageRequest request,
|
||||||
|
Object callerContext,
|
||||||
|
String requestId,
|
||||||
|
boolean isPrefetch) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder entryName = new StringBuilder();
|
||||||
|
entryName.append("FRESCO_REQUEST_");
|
||||||
|
entryName.append(request.getSourceUri().toString().replace(':', '_'));
|
||||||
|
|
||||||
|
Pair<Integer,String> requestPair = Pair.create(mCurrentID, entryName.toString());
|
||||||
|
Systrace.beginAsyncSection(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
requestPair.second,
|
||||||
|
mCurrentID);
|
||||||
|
mRequestsID.put(requestId, requestPair);
|
||||||
|
mCurrentID++;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestSuccess(ImageRequest request, String requestId, boolean isPrefetch) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mRequestsID.containsKey(requestId)) {
|
||||||
|
Pair<Integer, String> entry = mRequestsID.get(requestId);
|
||||||
|
Systrace.endAsyncSection(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
entry.second,
|
||||||
|
entry.first);
|
||||||
|
mRequestsID.remove(requestId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestFailure(
|
||||||
|
ImageRequest request,
|
||||||
|
String requestId,
|
||||||
|
Throwable throwable,
|
||||||
|
boolean isPrefetch) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mRequestsID.containsKey(requestId)) {
|
||||||
|
Pair<Integer, String> entry = mRequestsID.get(requestId);
|
||||||
|
Systrace.endAsyncSection(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
entry.second,
|
||||||
|
entry.first);
|
||||||
|
mRequestsID.remove(requestId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestCancellation(String requestId) {
|
||||||
|
if (!Systrace.isTracing(Systrace.TRACE_TAG_REACT_FRESCO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mRequestsID.containsKey(requestId)) {
|
||||||
|
Pair<Integer, String> entry = mRequestsID.get(requestId);
|
||||||
|
Systrace.endAsyncSection(
|
||||||
|
Systrace.TRACE_TAG_REACT_FRESCO,
|
||||||
|
entry.second,
|
||||||
|
entry.first);
|
||||||
|
mRequestsID.remove(requestId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requiresExtraMap(String id) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue