Skip to content

Commit 8089146

Browse files
huntiefacebook-github-bot
authored andcommitted
Update InspectorFlags to lazily pull upstream values (#43390)
Summary: Pull Request resolved: #43390 Refactor after D54639775. This avoids the unfortunate side effect where `InspectorFlags::dangerouslyResetFlags()` would immediately reread `ReactNativeFeatureFlags `. This call is now relocated in our test util. Changelog: [Internal] Reviewed By: motiz88 Differential Revision: D54684692 fbshipit-source-id: 962c7d78bbf71b1d81af412081d3ef5cfe443fa1
1 parent 3dee6d3 commit 8089146

3 files changed

Lines changed: 40 additions & 39 deletions

File tree

packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.cpp

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,55 +17,51 @@ InspectorFlags& InspectorFlags::getInstance() {
1717
return instance;
1818
}
1919

20-
InspectorFlags::InspectorFlags()
21-
: enableModernCDPRegistry_(
22-
ReactNativeFeatureFlags::inspectorEnableModernCDPRegistry()),
23-
enableCxxInspectorPackagerConnection_(
24-
ReactNativeFeatureFlags::
25-
inspectorEnableCxxInspectorPackagerConnection()),
26-
enableHermesCDPAgent_(
27-
ReactNativeFeatureFlags::inspectorEnableHermesCDPAgent()) {}
28-
2920
bool InspectorFlags::getEnableModernCDPRegistry() const {
30-
assertFlagsMatchUpstream();
31-
return enableModernCDPRegistry_;
21+
return loadFlagsAndAssertUnchanged().enableModernCDPRegistry;
3222
}
3323

3424
bool InspectorFlags::getEnableCxxInspectorPackagerConnection() const {
35-
assertFlagsMatchUpstream();
36-
return enableCxxInspectorPackagerConnection_ ||
25+
auto& values = loadFlagsAndAssertUnchanged();
26+
27+
return values.enableCxxInspectorPackagerConnection ||
3728
// If we are using the modern CDP registry, then we must also use the C++
3829
// InspectorPackagerConnection implementation.
39-
enableModernCDPRegistry_;
30+
values.enableModernCDPRegistry;
4031
}
4132

4233
bool InspectorFlags::getEnableHermesCDPAgent() const {
43-
assertFlagsMatchUpstream();
44-
return enableHermesCDPAgent_;
34+
return loadFlagsAndAssertUnchanged().enableHermesCDPAgent;
4535
}
4636

4737
void InspectorFlags::dangerouslyResetFlags() {
4838
*this = InspectorFlags{};
4939
}
5040

51-
void InspectorFlags::assertFlagsMatchUpstream() const {
52-
if (inconsistentFlagsStateLogged_) {
53-
return;
54-
}
41+
const InspectorFlags::Values& InspectorFlags::loadFlagsAndAssertUnchanged()
42+
const {
43+
InspectorFlags::Values newValues = {
44+
.enableCxxInspectorPackagerConnection = ReactNativeFeatureFlags::
45+
inspectorEnableCxxInspectorPackagerConnection(),
46+
.enableHermesCDPAgent =
47+
ReactNativeFeatureFlags::inspectorEnableHermesCDPAgent(),
48+
.enableModernCDPRegistry =
49+
ReactNativeFeatureFlags::inspectorEnableModernCDPRegistry(),
50+
};
5551

56-
if (enableModernCDPRegistry_ !=
57-
ReactNativeFeatureFlags::inspectorEnableModernCDPRegistry() ||
58-
enableCxxInspectorPackagerConnection_ !=
59-
ReactNativeFeatureFlags::
60-
inspectorEnableCxxInspectorPackagerConnection() ||
61-
ReactNativeFeatureFlags::inspectorEnableHermesCDPAgent() !=
62-
enableHermesCDPAgent_) {
63-
LOG(ERROR)
64-
<< "[InspectorFlags] Error: One or more ReactNativeFeatureFlags values "
65-
<< "have changed during the global app lifetime. This may lead to "
66-
<< "inconsistent inspector behaviour. Please quit and restart the app.";
67-
inconsistentFlagsStateLogged_ = true;
52+
if (cachedValues_.has_value() && !inconsistentFlagsStateLogged_) {
53+
if (cachedValues_ != newValues) {
54+
LOG(ERROR)
55+
<< "[InspectorFlags] Error: One or more ReactNativeFeatureFlags values "
56+
<< "have changed during the global app lifetime. This may lead to "
57+
<< "inconsistent inspector behaviour. Please quit and restart the app.";
58+
inconsistentFlagsStateLogged_ = true;
59+
}
6860
}
61+
62+
cachedValues_ = newValues;
63+
64+
return cachedValues_.value();
6965
}
7066

7167
} // namespace facebook::react::jsinspector_modern

packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.h

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,22 @@ class InspectorFlags {
4242
void dangerouslyResetFlags();
4343

4444
private:
45-
InspectorFlags();
45+
struct Values {
46+
bool enableCxxInspectorPackagerConnection;
47+
bool enableHermesCDPAgent;
48+
bool enableModernCDPRegistry;
49+
bool operator==(const Values&) const = default;
50+
};
51+
52+
InspectorFlags() = default;
4653
InspectorFlags(const InspectorFlags&) = delete;
4754
InspectorFlags& operator=(const InspectorFlags&) = default;
4855
~InspectorFlags() = default;
4956

50-
bool enableModernCDPRegistry_;
51-
bool enableCxxInspectorPackagerConnection_;
52-
bool enableHermesCDPAgent_;
53-
57+
mutable std::optional<Values> cachedValues_;
5458
mutable bool inconsistentFlagsStateLogged_{false};
55-
void assertFlagsMatchUpstream() const;
59+
60+
const Values& loadFlagsAndAssertUnchanged() const;
5661
};
5762

5863
} // namespace facebook::react::jsinspector_modern

packages/react-native/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ class ReactNativeFeatureFlagsOverrides
4040

4141
InspectorFlagOverridesGuard::InspectorFlagOverridesGuard(
4242
const InspectorFlagOverrides& overrides) {
43+
InspectorFlags::getInstance().dangerouslyResetFlags();
4344
ReactNativeFeatureFlags::override(
4445
std::make_unique<ReactNativeFeatureFlagsOverrides>(overrides));
4546
}
4647

4748
InspectorFlagOverridesGuard::~InspectorFlagOverridesGuard() {
48-
InspectorFlags::getInstance().dangerouslyResetFlags();
4949
ReactNativeFeatureFlags::dangerouslyReset();
5050
}
5151

0 commit comments

Comments
 (0)