Skip to content

Commit e30f34e

Browse files
Android: Image Prefetching send ImageResizeMode as enum value (#53516)
Summary: Pull Request resolved: #53516 Changelog: [General][Breaking] Android: Image Prefetching send ImageResizeMode as enum value Idea: Reduce JNI payload by sending int values instead of strings Reviewed By: lenaic Differential Revision: D81252246 fbshipit-source-id: 7ba128725900422f8654b3019014fd49ec8152b6
1 parent d1c5dae commit e30f34e

File tree

6 files changed

+53
-39
lines changed

6 files changed

+53
-39
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5353,18 +5353,25 @@ public final class com/facebook/react/views/image/ImageLoadEvent$Companion {
53535353

53545354
public final class com/facebook/react/views/image/ImageResizeMethod : java/lang/Enum {
53555355
public static final field AUTO Lcom/facebook/react/views/image/ImageResizeMethod;
5356+
public static final field Companion Lcom/facebook/react/views/image/ImageResizeMethod$Companion;
53565357
public static final field NONE Lcom/facebook/react/views/image/ImageResizeMethod;
53575358
public static final field RESIZE Lcom/facebook/react/views/image/ImageResizeMethod;
53585359
public static final field SCALE Lcom/facebook/react/views/image/ImageResizeMethod;
53595360
public static fun getEntries ()Lkotlin/enums/EnumEntries;
5361+
public static final fun parse (Ljava/lang/String;)Lcom/facebook/react/views/image/ImageResizeMethod;
53605362
public static fun valueOf (Ljava/lang/String;)Lcom/facebook/react/views/image/ImageResizeMethod;
53615363
public static fun values ()[Lcom/facebook/react/views/image/ImageResizeMethod;
53625364
}
53635365

5366+
public final class com/facebook/react/views/image/ImageResizeMethod$Companion {
5367+
public final fun parse (Ljava/lang/String;)Lcom/facebook/react/views/image/ImageResizeMethod;
5368+
}
5369+
53645370
public final class com/facebook/react/views/image/ImageResizeMode {
53655371
public static final field INSTANCE Lcom/facebook/react/views/image/ImageResizeMode;
53665372
public static final fun defaultTileMode ()Landroid/graphics/Shader$TileMode;
53675373
public static final fun defaultValue ()Lcom/facebook/drawee/drawable/ScalingUtils$ScaleType;
5374+
public final synthetic fun fromInt (I)Ljava/lang/String;
53685375
public static final fun toScaleType (Ljava/lang/String;)Lcom/facebook/drawee/drawable/ScalingUtils$ScaleType;
53695376
public static final fun toTileMode (Ljava/lang/String;)Landroid/graphics/Shader$TileMode;
53705377
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMethod.kt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,30 @@
77

88
package com.facebook.react.views.image
99

10+
import com.facebook.common.logging.FLog
11+
import com.facebook.react.common.ReactConstants
12+
1013
public enum class ImageResizeMethod {
1114
AUTO,
1215
RESIZE,
1316
SCALE,
14-
NONE,
17+
NONE;
18+
19+
public companion object {
20+
@JvmStatic
21+
public fun parse(resizeMethod: String?): ImageResizeMethod {
22+
return when (resizeMethod) {
23+
null,
24+
"",
25+
"auto" -> ImageResizeMethod.AUTO
26+
"resize" -> ImageResizeMethod.RESIZE
27+
"scale" -> ImageResizeMethod.SCALE
28+
"none" -> ImageResizeMethod.NONE
29+
else -> {
30+
FLog.w(ReactConstants.TAG, "Invalid resize method: '$resizeMethod'")
31+
ImageResizeMethod.AUTO
32+
}
33+
}
34+
}
35+
}
1536
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMode.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,19 @@ public object ImageResizeMode {
2121
private const val RESIZE_MODE_REPEAT = "repeat"
2222
private const val RESIZE_MODE_NONE = "none"
2323

24+
@JvmSynthetic
25+
public fun fromInt(resizeMode: Int): String {
26+
return when (resizeMode) {
27+
0 -> RESIZE_MODE_COVER
28+
1 -> RESIZE_MODE_CONTAIN
29+
2 -> RESIZE_MODE_STRETCH
30+
3 -> RESIZE_MODE_CENTER
31+
4 -> RESIZE_MODE_REPEAT
32+
5 -> RESIZE_MODE_NONE
33+
else -> RESIZE_MODE_NONE
34+
}
35+
}
36+
2437
/** Converts JS resize modes into `ScalingUtils.ScaleType`. See `ImageResizeMode.js`. */
2538
@JvmStatic
2639
public fun toScaleType(resizeModeValue: String?): ScalingUtils.ScaleType {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.kt

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -188,17 +188,7 @@ public constructor(
188188

189189
@ReactProp(name = ViewProps.RESIZE_METHOD)
190190
public fun setResizeMethod(view: ReactImageView, resizeMethod: String?) {
191-
when (resizeMethod) {
192-
null,
193-
"auto" -> view.setResizeMethod(ImageResizeMethod.AUTO)
194-
"resize" -> view.setResizeMethod(ImageResizeMethod.RESIZE)
195-
"scale" -> view.setResizeMethod(ImageResizeMethod.SCALE)
196-
"none" -> view.setResizeMethod(ImageResizeMethod.NONE)
197-
else -> {
198-
view.setResizeMethod(ImageResizeMethod.AUTO)
199-
FLog.w(ReactConstants.TAG, "Invalid resize method: '$resizeMethod'")
200-
}
201-
}
191+
view.setResizeMethod(ImageResizeMethod.parse(resizeMethod))
202192
}
203193

204194
@ReactProp(name = "resizeMultiplier")

packages/react-native/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/conversions.h

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,13 @@
1212
#include <react/renderer/imagemanager/primitives.h>
1313
#include <react/renderer/mapbuffer/MapBuffer.h>
1414
#include <react/renderer/mapbuffer/MapBufferBuilder.h>
15-
#include <string>
15+
#include <react/utils/to_underlying.h>
1616
#include <vector>
1717

1818
namespace facebook::react {
1919

2020
namespace {
2121

22-
inline std::string toString(const ImageResizeMode& value) {
23-
switch (value) {
24-
case ImageResizeMode::Cover:
25-
return "cover";
26-
case ImageResizeMode::Contain:
27-
return "contain";
28-
case ImageResizeMode::Stretch:
29-
return "stretch";
30-
case ImageResizeMode::Center:
31-
return "center";
32-
case ImageResizeMode::Repeat:
33-
return "repeat";
34-
case ImageResizeMode::None:
35-
return "none";
36-
}
37-
}
38-
3922
constexpr MapBuffer::Key IS_KEY_URI = 0;
4023
constexpr MapBuffer::Key IS_KEY_DEFAULT_SRC = 1;
4124
constexpr MapBuffer::Key IS_KEY_RESIZE_MODE = 2;
@@ -68,8 +51,8 @@ inline void serializeImageRequestParams(
6851
MapBufferBuilder& builder,
6952
const ImageRequestParams& imageRequestParams) {
7053
builder.putString(IS_KEY_DEFAULT_SRC, imageRequestParams.defaultSource.uri);
71-
builder.putString(
72-
IS_KEY_RESIZE_MODE, toString(imageRequestParams.resizeMode));
54+
builder.putInt(
55+
IS_KEY_RESIZE_MODE, to_underlying(imageRequestParams.resizeMode));
7356
builder.putString(IS_KEY_RESIZE_METHOD, imageRequestParams.resizeMethod);
7457
builder.putInt(
7558
IS_KEY_BLUR_RADIUS, static_cast<int32_t>(imageRequestParams.blurRadius));

packages/react-native/ReactCommon/react/renderer/imagemanager/primitives.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,13 @@ inline folly::dynamic toDynamic(const ImageSource& imageSource) {
162162

163163
using ImageSources = std::vector<ImageSource>;
164164

165-
enum class ImageResizeMode {
166-
Cover,
167-
Contain,
168-
Stretch,
169-
Center,
170-
Repeat,
171-
None,
165+
enum class ImageResizeMode : int8_t {
166+
Cover = 0,
167+
Contain = 1,
168+
Stretch = 2,
169+
Center = 3,
170+
Repeat = 4,
171+
None = 5,
172172
};
173173

174174
class ImageErrorInfo {

0 commit comments

Comments
 (0)