From 5703abd9535622912b4bf875faecc00d69fef0da Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Thu, 13 Feb 2020 21:05:36 -0800 Subject: [PATCH] Fabric: Getting rid of `static_pointer_cast` in `ConcreteShadowNode` Summary: `std::static_pointer_cast` has perf overhead where as `static_cast` does not. Changelog: [Internal] Fabric-specific internal change. Reviewed By: sammy-SC Differential Revision: D19837695 fbshipit-source-id: 4a257e66813a4a3c757c8ea15ea6ae5e192d1390 --- .../core/shadownode/ConcreteShadowNode.h | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/ReactCommon/fabric/core/shadownode/ConcreteShadowNode.h b/ReactCommon/fabric/core/shadownode/ConcreteShadowNode.h index 80ef750777f..92bad021c49 100644 --- a/ReactCommon/fabric/core/shadownode/ConcreteShadowNode.h +++ b/ReactCommon/fabric/core/shadownode/ConcreteShadowNode.h @@ -35,10 +35,10 @@ class ConcreteShadowNode : public ShadowNode { using ShadowNode::ShadowNode; using ConcreteProps = PropsT; - using SharedConcreteProps = std::shared_ptr; + using SharedConcreteProps = std::shared_ptr; using ConcreteEventEmitter = EventEmitterT; - using SharedConcreteEventEmitter = std::shared_ptr; - using SharedConcreteShadowNode = std::shared_ptr; + using SharedConcreteEventEmitter = std::shared_ptr; + using SharedConcreteShadowNode = std::shared_ptr; using ConcreteState = ConcreteState; using ConcreteStateData = StateDataT; @@ -59,11 +59,10 @@ class ConcreteShadowNode : public ShadowNode { } static SharedConcreteProps Props( - const RawProps &rawProps, - const SharedProps &baseProps = nullptr) { - return std::make_shared( - baseProps ? *std::static_pointer_cast(baseProps) - : PropsT(), + RawProps const &rawProps, + SharedProps const &baseProps = nullptr) { + return std::make_shared( + baseProps ? static_cast(*baseProps) : PropsT(), rawProps); } @@ -89,7 +88,7 @@ class ConcreteShadowNode : public ShadowNode { assert( std::dynamic_pointer_cast(props_) && "Props must be an instance of ConcreteProps class."); - return *static_cast(props_.get()); + return static_cast(*props_); } /* @@ -101,7 +100,7 @@ class ConcreteShadowNode : public ShadowNode { assert( std::dynamic_pointer_cast(state_) && "State must be an instance of ConcreteState class."); - return std::static_pointer_cast(state_)->getData(); + return static_cast(state_.get())->getData(); } /* @@ -124,9 +123,9 @@ class ConcreteShadowNode : public ShadowNode { better:: small_vector children; - for (const auto &childShadowNode : getChildren()) { + for (auto const &childShadowNode : getChildren()) { auto specificChildShadowNode = - dynamic_cast(childShadowNode.get()); + dynamic_cast(childShadowNode.get()); if (specificChildShadowNode) { children.push_back( const_cast(specificChildShadowNode));