Skip to content

Commit

Permalink
Change CircularBitmapTransformation calls for reflection
Browse files Browse the repository at this point in the history
Reviewed By: oprisnik

Differential Revision: D17398150

fbshipit-source-id: 6cb7c231ad84c279396321644347511223dba6d6
  • Loading branch information
Jędrzej Kula authored and facebook-github-bot committed Oct 11, 2019
1 parent 03077e8 commit 6ec40ba
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,13 @@ public static void addRoundedCorners(
*
* @param bitmap the bitmap to modify
*/
@DoNotStrip
public static void toCircle(Bitmap bitmap, boolean antiAliased) {
Preconditions.checkNotNull(bitmap);
nativeToCircleFilter(bitmap, antiAliased);
}

@DoNotStrip
public static void toCircleFast(Bitmap bitmap, boolean antiAliased) {
Preconditions.checkNotNull(bitmap);
nativeToCircleFastFilter(bitmap, antiAliased);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.facebook.imagepipeline.common.RotationOptions;
import com.facebook.imagepipeline.core.ImagePipeline;
import com.facebook.imagepipeline.core.ImagePipelineFactory;
import com.facebook.imagepipeline.core.NativeCodeSetup;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.facebook.infer.annotation.ThreadSafe;
Expand Down Expand Up @@ -144,7 +145,7 @@ protected ImageRequestBuilder createDecodedImageRequestBuilder(
final ImageRequestBuilder imageRequestBuilder =
createEncodedImageRequestBuilder(uri, imageOptions);

if (mExperiments.useNativeRounding()) {
if (mExperiments.useNativeRounding() && NativeCodeSetup.getUseNativeCode()) {
setupNativeRounding(imageRequestBuilder, imageOptions.getRoundingOptions());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,32 @@
package com.facebook.fresco.vito.transformation;

import android.graphics.Bitmap;
import com.facebook.imagepipeline.nativecode.NativeRoundingFilter;
import com.facebook.imagepipeline.transformation.BitmapTransformation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class CircularBitmapTransformation implements BitmapTransformation {

private final boolean mAntiAliased;

private final boolean mUseFastNativeRounding;

private static Method sToCircle;

private static Method sToCircleFast;

static {
try {
Class<?> clazz = Class.forName("com.facebook.imagepipeline.nativecode.NativeRoundingFilter");
sToCircle = clazz.getMethod("toCircle", Bitmap.class, boolean.class);
sToCircleFast = clazz.getMethod("toCircleFast", Bitmap.class, boolean.class);
} catch (ClassNotFoundException e) {
throw new RuntimeException("Native code for rounding unsupported", e);
} catch (NoSuchMethodException e) {
throw new RuntimeException("Native code for rounding unsupported", e);
}
}

public CircularBitmapTransformation(boolean antiAliased) {
this(antiAliased, false);
}
Expand All @@ -28,10 +45,16 @@ public CircularBitmapTransformation(boolean antiAliased, boolean useFastNativeRo

@Override
public void transform(Bitmap bitmap) {
if (mUseFastNativeRounding) {
NativeRoundingFilter.toCircleFast(bitmap, mAntiAliased);
} else {
NativeRoundingFilter.toCircle(bitmap, mAntiAliased);
try {
if (mUseFastNativeRounding) {
sToCircleFast.invoke(null, bitmap, mAntiAliased);
} else {
sToCircle.invoke(null, bitmap, mAntiAliased);
}
} catch (IllegalAccessException e) {
throw new RuntimeException("Native code for rounding unsupported", e);
} catch (InvocationTargetException e) {
throw new RuntimeException("Native code for rounding unsupported", e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import com.facebook.imagepipeline.common.ResizeOptions;
import com.facebook.imagepipeline.common.RotationOptions;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.testing.TestNativeLoader;

import java.util.concurrent.Executor;
import org.junit.Before;
import org.junit.Test;
Expand All @@ -31,6 +33,10 @@
@RunWith(RobolectricTestRunner.class)
public class FrescoContextTest {

static {
TestNativeLoader.init();
}

private static final Uri URI = Uri.parse("test");

private Hierarcher mHierarcher;
Expand Down

0 comments on commit 6ec40ba

Please sign in to comment.