Skip to content

Commit 4ab2ec2

Browse files
zeyapfacebook-github-bot
authored andcommitted
Reduce call to folly::dynamic::object insert and remove unnecessary AnimatedNode::update calls (facebook#52270)
Summary: ## Changelog: [Internal] [Changed] - Reduce call to `folly::dynamic::object` insert and remove unnecessary AnimatedNode::update calls Reviewed By: christophpurrer Differential Revision: D77315659
1 parent bc7a9d9 commit 4ab2ec2

File tree

7 files changed

+19
-49
lines changed

7 files changed

+19
-49
lines changed

packages/react-native/ReactCxxPlatform/react/renderer/animated/nodes/ColorAnimatedNode.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,21 +48,17 @@ ColorAnimatedNode::ColorAnimatedNode(
4848
bNodeTag_(static_cast<Tag>(getConfig()["b"].asInt())),
4949
aNodeTag_(static_cast<Tag>(getConfig()["a"].asInt())) {}
5050

51-
void ColorAnimatedNode::update() {
52-
color_ = *colorFromRGBA(
53-
getColorValue(*manager_, rNodeTag_),
54-
getColorValue(*manager_, gNodeTag_),
55-
getColorValue(*manager_, bNodeTag_),
56-
getAlphaValue(*manager_, aNodeTag_));
57-
}
58-
5951
Color ColorAnimatedNode::getColor() {
6052
if (manager_->updatedNodeTags_.contains(tag_)) {
61-
update();
53+
color_ = *colorFromRGBA(
54+
getColorValue(*manager_, rNodeTag_),
55+
getColorValue(*manager_, gNodeTag_),
56+
getColorValue(*manager_, bNodeTag_),
57+
getAlphaValue(*manager_, aNodeTag_));
58+
6259
manager_->updatedNodeTags_.erase(tag_);
6360
}
6461
return color_;
65-
return 0;
6662
}
6763

6864
} // namespace facebook::react

packages/react-native/ReactCxxPlatform/react/renderer/animated/nodes/ColorAnimatedNode.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ class ColorAnimatedNode final : public AnimatedNode {
2323
const folly::dynamic& config,
2424
NativeAnimatedNodesManager& manager);
2525

26-
void update() override;
27-
2826
Color getColor();
2927

3028
private:

packages/react-native/ReactCxxPlatform/react/renderer/animated/nodes/PropsAnimatedNode.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,7 @@ void PropsAnimatedNode::update(bool forceFabricCommit) {
123123
case AnimatedNodeType::Style: {
124124
if (const auto& styleNode =
125125
manager_->getAnimatedNode<StyleAnimatedNode>(nodeTag)) {
126-
styleNode->update();
127-
auto& styleNodeProps = styleNode->getProps();
128-
for (const auto& styleNodeProp : styleNodeProps.items()) {
129-
props_.insert(styleNodeProp.first.c_str(), styleNodeProp.second);
130-
}
126+
styleNode->collectViewUpdates(props_);
131127
}
132128
} break;
133129
case AnimatedNodeType::Props:

packages/react-native/ReactCxxPlatform/react/renderer/animated/nodes/StyleAnimatedNode.cpp

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,9 @@ StyleAnimatedNode::StyleAnimatedNode(
3838
Tag tag,
3939
const folly::dynamic& config,
4040
NativeAnimatedNodesManager& manager)
41-
: AnimatedNode(tag, config, manager, AnimatedNodeType::Style),
42-
props_(folly::dynamic::object()) {}
41+
: AnimatedNode(tag, config, manager, AnimatedNodeType::Style) {}
4342

44-
void StyleAnimatedNode::update() {
43+
void StyleAnimatedNode::collectViewUpdates(folly::dynamic& props) {
4544
const auto& style = getConfig()["style"];
4645
for (const auto& styleProp : style.items()) {
4746
auto propName = styleProp.first.asString();
@@ -51,11 +50,7 @@ void StyleAnimatedNode::update() {
5150
case AnimatedNodeType::Transform: {
5251
if (const auto transformNode =
5352
manager_->getAnimatedNode<TransformAnimatedNode>(nodeTag)) {
54-
transformNode->update();
55-
auto& transformNodeProps = transformNode->getProps();
56-
for (const auto& styleNodeProp : transformNodeProps.items()) {
57-
props_.insert(styleNodeProp.first.c_str(), styleNodeProp.second);
58-
}
53+
transformNode->collectViewUpdates(props);
5954
}
6055
} break;
6156
case AnimatedNodeType::Value:
@@ -71,18 +66,18 @@ void StyleAnimatedNode::update() {
7166
if (const auto valueNode =
7267
manager_->getAnimatedNode<ValueAnimatedNode>(nodeTag)) {
7368
if (valueNode->getIsColorValue()) {
74-
props_.insert(
69+
props.insert(
7570
propName.c_str(),
7671
static_cast<int32_t>(valueNode->getValue()));
7772
} else {
78-
props_.insert(propName.c_str(), valueNode->getValue());
73+
props.insert(propName.c_str(), valueNode->getValue());
7974
}
8075
}
8176
} break;
8277
case AnimatedNodeType::Color: {
8378
if (const auto colorAnimNode =
8479
manager_->getAnimatedNode<ColorAnimatedNode>(nodeTag)) {
85-
props_.insert(
80+
props.insert(
8681
propName.c_str(),
8782
static_cast<int32_t>(colorAnimNode->getColor()));
8883
}
@@ -95,7 +90,7 @@ void StyleAnimatedNode::update() {
9590
}
9691
}
9792

98-
layoutStyleUpdated_ = isLayoutPropsUpdated(props_);
93+
layoutStyleUpdated_ = isLayoutPropsUpdated(props);
9994
}
10095

10196
} // namespace facebook::react

packages/react-native/ReactCxxPlatform/react/renderer/animated/nodes/StyleAnimatedNode.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,13 @@ class StyleAnimatedNode final : public AnimatedNode {
2222
Tag tag,
2323
const folly::dynamic& config,
2424
NativeAnimatedNodesManager& manager);
25-
void update() override;
26-
27-
const folly::dynamic& getProps() const noexcept {
28-
return props_;
29-
}
25+
void collectViewUpdates(folly::dynamic& props);
3026

3127
bool isLayoutStyleUpdated() const noexcept {
3228
return layoutStyleUpdated_;
3329
}
3430

3531
private:
36-
folly::dynamic props_;
3732
bool layoutStyleUpdated_;
3833
};
3934
} // namespace facebook::react

packages/react-native/ReactCxxPlatform/react/renderer/animated/nodes/TransformAnimatedNode.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,9 @@ TransformAnimatedNode::TransformAnimatedNode(
3030
Tag tag,
3131
const folly::dynamic& config,
3232
NativeAnimatedNodesManager& manager)
33-
: AnimatedNode(tag, config, manager, AnimatedNodeType::Transform),
34-
props_(folly::dynamic::object()) {}
33+
: AnimatedNode(tag, config, manager, AnimatedNodeType::Transform) {}
3534

36-
void TransformAnimatedNode::update() {
35+
void TransformAnimatedNode::collectViewUpdates(folly::dynamic& props) {
3736
folly::dynamic transforms = folly::dynamic::array();
3837
auto transformsArray = getConfig()[sTransformsName];
3938
react_native_assert(transformsArray.type() == folly::dynamic::ARRAY);
@@ -53,11 +52,7 @@ void TransformAnimatedNode::update() {
5352
transforms.push_back(folly::dynamic::object(property, value.value()));
5453
}
5554
}
56-
props_[sTransformPropName] = std::move(transforms);
57-
}
58-
59-
const folly::dynamic& TransformAnimatedNode::getProps() {
60-
return props_;
55+
props[sTransformPropName] = std::move(transforms);
6156
}
6257

6358
} // namespace facebook::react

packages/react-native/ReactCxxPlatform/react/renderer/animated/nodes/TransformAnimatedNode.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,6 @@ class TransformAnimatedNode final : public AnimatedNode {
2929
const folly::dynamic& config,
3030
NativeAnimatedNodesManager& manager);
3131

32-
void update() override;
33-
34-
const folly::dynamic& getProps();
35-
36-
private:
37-
folly::dynamic props_;
32+
void collectViewUpdates(folly::dynamic& props);
3833
};
3934
} // namespace facebook::react

0 commit comments

Comments
 (0)