Skip to content

Commit a18f7a7

Browse files
sammy-SCmeta-codesync[bot]
authored andcommitted
Back out "Remove UIManagerCommitHookManager 2/2" (facebook#54302)
Summary: Pull Request resolved: facebook#54302 Changelog: [Internal] Original commit changeset: 1c7705187346 Original Phabricator Diff: D85261208 Reviewed By: javache, rubennorte Differential Revision: D85660275 fbshipit-source-id: 19e6c44871660a53399276445bc2d3ee97cd2ac0
1 parent afb504c commit a18f7a7

File tree

8 files changed

+68
-32
lines changed

8 files changed

+68
-32
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -964,15 +964,15 @@ public void runGuarded() {
964964
* by an ImageView.
965965
*/
966966
@UnstableReactNativeAPI
967-
public void experimental_prefetchResource(
968-
int surfaceId, String componentName, ReadableMapBuffer params, int tag) {
967+
public void experimental_prefetchResources(
968+
int surfaceId, String componentName, ReadableMapBuffer params) {
969969
if (ReactNativeFeatureFlags.enableImagePrefetchingOnUiThreadAndroid()) {
970970
mMountItemDispatcher.addMountItem(
971-
new PrefetchResourcesMountItem(surfaceId, componentName, params, tag));
971+
new PrefetchResourcesMountItem(surfaceId, componentName, params));
972972
} else {
973973
SurfaceMountingManager surfaceMountingManager = mMountingManager.getSurfaceManager(surfaceId);
974974
if (surfaceMountingManager != null) {
975-
surfaceMountingManager.experimental_prefetchResource(surfaceId, componentName, params, tag);
975+
surfaceMountingManager.experimental_prefetchResources(surfaceId, componentName, params);
976976
}
977977
}
978978
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -815,20 +815,19 @@ private void updateProps(
815815
* @param surfaceId surface ID
816816
* @param componentName
817817
* @param params prefetch request params defined in C++
818-
* @param tag react tag of the component
819818
*/
820819
@SuppressLint("FunctionName")
821820
@AnyThread
822821
@UnstableReactNativeAPI
823-
public void experimental_prefetchResource(
824-
int surfaceId, String componentName, MapBuffer params, int tag) {
822+
public void experimental_prefetchResources(
823+
int surfaceId, String componentName, MapBuffer params) {
825824
if (isStopped()) {
826825
return;
827826
}
828827
mViewManagerRegistry
829828
.get(componentName)
830-
.experimental_prefetchResource(
831-
surfaceId, Assertions.assertNotNull(mThemedReactContext), params, tag);
829+
.experimental_prefetchResources(
830+
surfaceId, Assertions.assertNotNull(mThemedReactContext), params);
832831
}
833832

834833
@Deprecated

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PrefetchResourcesMountItem.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,16 @@ internal class PrefetchResourcesMountItem(
1616
private val surfaceId: Int,
1717
private val componentName: String,
1818
private val params: ReadableMapBuffer,
19-
private val tag: Int,
2019
) : MountItem {
2120

2221
@OptIn(UnstableReactNativeAPI::class, FrameworkAPI::class)
2322
override fun execute(mountingManager: MountingManager) {
2423
mountingManager
2524
.getSurfaceManager(surfaceId)
26-
?.experimental_prefetchResource(
25+
?.experimental_prefetchResources(
2726
surfaceId,
2827
componentName,
2928
params,
30-
tag,
3129
)
3230
}
3331

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -489,11 +489,10 @@ public void onSurfaceStopped(int surfaceId) {
489489
* @param surfaceId surface ID
490490
* @param reactContext {@link com.facebook.react.bridge.ReactContext} used for the view.
491491
* @param params {@link MapBuffer} prefetch request params defined in C++
492-
* @param tag react tag of the component
493492
*/
494493
@UnstableReactNativeAPI
495-
public void experimental_prefetchResource(
496-
int surfaceId, ThemedReactContext reactContext, MapBuffer params, int tag) {
494+
public void experimental_prefetchResources(
495+
int surfaceId, ThemedReactContext reactContext, MapBuffer params) {
497496
return;
498497
}
499498

packages/react-native/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageFetcher.cpp

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,40 @@ ImageRequest ImageFetcher::requestImage(
2121
SurfaceId surfaceId,
2222
const ImageRequestParams& imageRequestParams,
2323
Tag tag) {
24+
items_[surfaceId].emplace_back(
25+
ImageRequestItem{
26+
.imageSource = imageSource,
27+
.imageRequestParams = imageRequestParams,
28+
.tag = tag});
29+
2430
auto telemetry = std::make_shared<ImageTelemetry>(surfaceId);
2531

32+
flushImageRequests();
33+
34+
return {imageSource, telemetry};
35+
}
36+
37+
void ImageFetcher::flushImageRequests() {
38+
if (items_.empty()) {
39+
return;
40+
}
41+
2642
auto fabricUIManager_ =
2743
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
28-
static auto prefetchResource =
44+
static auto prefetchResources =
2945
fabricUIManager_->getClass()
3046
->getMethod<void(
31-
SurfaceId, std::string, JReadableMapBuffer::javaobject, Tag)>(
32-
"experimental_prefetchResource");
33-
34-
auto readableMapBuffer = JReadableMapBuffer::createWithContents(
35-
serializeImageRequest(imageSource, imageRequestParams));
36-
prefetchResource(
37-
fabricUIManager_,
38-
surfaceId,
39-
"RCTImageView",
40-
readableMapBuffer.get(),
41-
tag);
47+
SurfaceId, std::string, JReadableMapBuffer::javaobject)>(
48+
"experimental_prefetchResources");
4249

43-
return {imageSource, telemetry};
50+
for (auto& [surfaceId, surfaceImageRequests] : items_) {
51+
auto readableMapBuffer = JReadableMapBuffer::createWithContents(
52+
serializeImageRequests(surfaceImageRequests));
53+
prefetchResources(
54+
fabricUIManager_, surfaceId, "RCTImageView", readableMapBuffer.get());
55+
}
56+
57+
items_.clear();
4458
}
4559

4660
} // namespace facebook::react

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#include <react/renderer/imagemanager/ImageRequestParams.h>
1212
#include <react/utils/ContextContainer.h>
1313
#include <memory>
14+
#include <unordered_map>
15+
#include <vector>
1416

1517
namespace facebook::react {
1618

@@ -30,6 +32,9 @@ class ImageFetcher {
3032
Tag tag);
3133

3234
private:
35+
void flushImageRequests();
36+
37+
std::unordered_map<SurfaceId, std::vector<ImageRequestItem>> items_;
3338
std::shared_ptr<const ContextContainer> contextContainer_;
3439
};
3540
} // namespace facebook::react

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,10 @@ class ImageRequestParams {
9595
}
9696
};
9797

98+
struct ImageRequestItem {
99+
ImageSource imageSource;
100+
ImageRequestParams imageRequestParams;
101+
Tag tag{};
102+
};
103+
98104
} // namespace facebook::react

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

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <react/renderer/mapbuffer/MapBuffer.h>
1414
#include <react/renderer/mapbuffer/MapBufferBuilder.h>
1515
#include <react/utils/to_underlying.h>
16+
#include <vector>
1617

1718
namespace facebook::react {
1819

@@ -33,6 +34,7 @@ constexpr MapBuffer::Key IS_KEY_FADE_DURATION = 11;
3334
constexpr MapBuffer::Key IS_KEY_PROGRESSIVE_RENDERING_ENABLED = 12;
3435
constexpr MapBuffer::Key IS_KEY_LOADING_INDICATOR_SRC = 13;
3536
constexpr MapBuffer::Key IS_KEY_ANALYTIC_TAG = 14;
37+
constexpr MapBuffer::Key IS_KEY_TAG = 15;
3638

3739
inline void serializeImageSource(MapBufferBuilder &builder, const ImageSource &imageSource)
3840
{
@@ -61,13 +63,26 @@ inline void serializeImageRequestParams(MapBufferBuilder &builder, const ImageRe
6163
builder.putString(IS_KEY_ANALYTIC_TAG, imageRequestParams.analyticTag);
6264
}
6365

66+
inline MapBuffer serializeImageRequest(const ImageRequestItem &item)
67+
{
68+
auto builder = MapBufferBuilder();
69+
serializeImageSource(builder, item.imageSource);
70+
serializeImageRequestParams(builder, item.imageRequestParams);
71+
builder.putInt(IS_KEY_TAG, item.tag);
72+
return builder.build();
73+
}
74+
6475
} // namespace
6576

66-
inline MapBuffer serializeImageRequest(const ImageSource &imageSource, const ImageRequestParams &imageRequestParams)
77+
inline MapBuffer serializeImageRequests(const std::vector<ImageRequestItem> &items)
6778
{
68-
auto builder = MapBufferBuilder();
69-
serializeImageSource(builder, imageSource);
70-
serializeImageRequestParams(builder, imageRequestParams);
79+
std::vector<MapBuffer> mapBufferList;
80+
mapBufferList.reserve(items.size());
81+
for (const auto &item : items) {
82+
mapBufferList.emplace_back(serializeImageRequest(item));
83+
}
84+
MapBufferBuilder builder;
85+
builder.putMapBufferList(0, mapBufferList);
7186
return builder.build();
7287
}
7388

0 commit comments

Comments
 (0)