From bbc517c8c827a4b4e9191dc7aff3a33c07ee7104 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Mon, 16 Oct 2023 05:56:33 -0700 Subject: [PATCH] Remove Props copy constructor and assignment operators (#40936) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/40936 Found a couple of places where we were accidentally copying Props structs. These can be big, so we should avoid doing so. Changelog: [Internal] Reviewed By: sammy-SC Differential Revision: D50263678 fbshipit-source-id: f60a0370df9b7f3f146988148d5192d3cc32fb4e --- .../renderer/components/view/YogaLayoutableShadowNode.cpp | 2 +- .../ReactCommon/react/renderer/core/ConcreteShadowNode.h | 3 ++- packages/react-native/ReactCommon/react/renderer/core/Props.h | 3 +++ .../react/renderer/uimanager/PointerEventsProcessor.cpp | 4 +--- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp index cb94ab0bed1..1aa2de1d98e 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp @@ -368,7 +368,7 @@ void YogaLayoutableShadowNode::updateYogaChildren() { void YogaLayoutableShadowNode::updateYogaProps() { ensureUnsealed(); - auto props = static_cast(*props_); + auto& props = static_cast(*props_); auto styleResult = applyAliasedProps(props.yogaStyle, props); // Resetting `dirty` flag only if `yogaStyle` portion of `Props` was changed. diff --git a/packages/react-native/ReactCommon/react/renderer/core/ConcreteShadowNode.h b/packages/react-native/ReactCommon/react/renderer/core/ConcreteShadowNode.h index e91c757d8d7..14c3e9ac481 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ConcreteShadowNode.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ConcreteShadowNode.h @@ -76,7 +76,8 @@ class ConcreteShadowNode : public BaseShadowNodeT { const Props::Shared& baseProps = nullptr) { return std::make_shared( context, - baseProps ? static_cast(*baseProps) : PropsT(), + baseProps ? static_cast(*baseProps) + : *defaultSharedProps(), rawProps); } diff --git a/packages/react-native/ReactCommon/react/renderer/core/Props.h b/packages/react-native/ReactCommon/react/renderer/core/Props.h index 6b25617d2d3..b17a54541ee 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/Props.h +++ b/packages/react-native/ReactCommon/react/renderer/core/Props.h @@ -36,6 +36,9 @@ class Props : public virtual Sealable, public virtual DebugStringConvertible { const RawProps& rawProps); virtual ~Props() = default; + Props(const Props& other) = delete; + Props& operator=(const Props& other) = delete; + /** * Set a prop value via iteration (see enableIterator above). * If setProp is defined for a particular props struct, it /must/ diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.cpp index d1f48491f43..cdb83add952 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.cpp @@ -33,9 +33,7 @@ static bool isViewListeningToEvents( const ShadowNode& shadowNode, std::initializer_list eventTypes) { if (shadowNode.getTraits().check(ShadowNodeTraits::Trait::ViewKind)) { - auto props = shadowNode.getProps(); - auto viewProps = static_cast(*props); - + auto& viewProps = static_cast(*shadowNode.getProps()); for (const ViewEvents::Offset eventType : eventTypes) { if (viewProps.events[eventType]) { return true;