Skip to content

Commit 5f83c77

Browse files
NickGerlemanfacebook-github-bot
authored andcommitted
Remove Broken Caching Logic in AndroidProgressBarMeasurementsManagaer and AndroidSwitchMeasurementsManager (#51757)
Summary: Pull Request resolved: #51757 These both have a boolean flag `hasBeenMeasured_` which is never set to true, so the cached measurement is never used, but it would be wrong if it was used, since the cache doesn't respect the content, or measure constraints. Delete the broken code. Changelog: [Internal] Reviewed By: alanleedev Differential Revision: D75817999 fbshipit-source-id: eb062f523840bbac7099b28f7e9b25cf9ad302aa
1 parent 6389334 commit 5f83c77

4 files changed

Lines changed: 33 additions & 59 deletions

File tree

packages/react-native/ReactCommon/react/renderer/components/progressbar/android/react/renderer/components/progressbar/AndroidProgressBarMeasurementsManager.cpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,6 @@ Size AndroidProgressBarMeasurementsManager::measure(
2020
SurfaceId surfaceId,
2121
const AndroidProgressBarProps& props,
2222
LayoutConstraints layoutConstraints) const {
23-
{
24-
std::scoped_lock lock(mutex_);
25-
if (hasBeenMeasured_) {
26-
return cachedMeasurement_;
27-
}
28-
}
29-
3023
const jni::global_ref<jobject>& fabricUIManager =
3124
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
3225

@@ -54,7 +47,7 @@ Size AndroidProgressBarMeasurementsManager::measure(
5447
local_ref<ReadableMap::javaobject> propsRM =
5548
make_local(reinterpret_cast<ReadableMap::javaobject>(propsRNM.get()));
5649

57-
auto measurement = yogaMeassureToSize(measure(
50+
return yogaMeassureToSize(measure(
5851
fabricUIManager,
5952
surfaceId,
6053
componentName.get(),
@@ -65,10 +58,6 @@ Size AndroidProgressBarMeasurementsManager::measure(
6558
maximumSize.width,
6659
minimumSize.height,
6760
maximumSize.height));
68-
69-
std::scoped_lock lock(mutex_);
70-
cachedMeasurement_ = measurement;
71-
return measurement;
7261
}
7362

7463
} // namespace facebook::react

packages/react-native/ReactCommon/react/renderer/components/progressbar/android/react/renderer/components/progressbar/AndroidProgressBarMeasurementsManager.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ class AndroidProgressBarMeasurementsManager {
2727

2828
private:
2929
const ContextContainer::Shared contextContainer_;
30-
mutable std::mutex mutex_;
31-
mutable bool hasBeenMeasured_ = false;
32-
mutable Size cachedMeasurement_{};
3330
};
3431

3532
} // namespace facebook::react

packages/react-native/ReactCommon/react/renderer/components/switch/androidswitch/react/renderer/components/androidswitch/AndroidSwitchMeasurementsManager.cpp

Lines changed: 32 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,48 +19,39 @@ Size AndroidSwitchMeasurementsManager::measure(
1919
SurfaceId surfaceId,
2020
LayoutConstraints layoutConstraints) const {
2121
{
22-
std::scoped_lock lock(mutex_);
23-
if (hasBeenMeasured_) {
24-
return cachedMeasurement_;
25-
}
22+
const jni::global_ref<jobject>& fabricUIManager =
23+
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
24+
25+
static auto measure =
26+
jni::findClassStatic("com/facebook/react/fabric/FabricUIManager")
27+
->getMethod<jlong(
28+
jint,
29+
jstring,
30+
ReadableMap::javaobject,
31+
ReadableMap::javaobject,
32+
ReadableMap::javaobject,
33+
jfloat,
34+
jfloat,
35+
jfloat,
36+
jfloat)>("measure");
37+
38+
auto minimumSize = layoutConstraints.minimumSize;
39+
auto maximumSize = layoutConstraints.maximumSize;
40+
41+
local_ref<JString> componentName = make_jstring("AndroidSwitch");
42+
43+
return yogaMeassureToSize(measure(
44+
fabricUIManager,
45+
surfaceId,
46+
componentName.get(),
47+
nullptr,
48+
nullptr,
49+
nullptr,
50+
minimumSize.width,
51+
maximumSize.width,
52+
minimumSize.height,
53+
maximumSize.height));
2654
}
27-
28-
const jni::global_ref<jobject>& fabricUIManager =
29-
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
30-
31-
static auto measure =
32-
jni::findClassStatic("com/facebook/react/fabric/FabricUIManager")
33-
->getMethod<jlong(
34-
jint,
35-
jstring,
36-
ReadableMap::javaobject,
37-
ReadableMap::javaobject,
38-
ReadableMap::javaobject,
39-
jfloat,
40-
jfloat,
41-
jfloat,
42-
jfloat)>("measure");
43-
44-
auto minimumSize = layoutConstraints.minimumSize;
45-
auto maximumSize = layoutConstraints.maximumSize;
46-
47-
local_ref<JString> componentName = make_jstring("AndroidSwitch");
48-
49-
auto measurement = yogaMeassureToSize(measure(
50-
fabricUIManager,
51-
surfaceId,
52-
componentName.get(),
53-
nullptr,
54-
nullptr,
55-
nullptr,
56-
minimumSize.width,
57-
maximumSize.width,
58-
minimumSize.height,
59-
maximumSize.height));
60-
61-
std::scoped_lock lock(mutex_);
62-
cachedMeasurement_ = measurement;
63-
return measurement;
6455
}
6556

6657
} // namespace facebook::react

packages/react-native/ReactCommon/react/renderer/components/switch/androidswitch/react/renderer/components/androidswitch/AndroidSwitchMeasurementsManager.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@ class AndroidSwitchMeasurementsManager {
2323

2424
private:
2525
const ContextContainer::Shared contextContainer_;
26-
mutable std::mutex mutex_;
27-
mutable bool hasBeenMeasured_ = false;
28-
mutable Size cachedMeasurement_{};
2926
};
3027

3128
} // namespace facebook::react

0 commit comments

Comments
 (0)