Skip to content

Commit 748b72a

Browse files
zeyapfacebook-github-bot
authored andcommitted
Allow passing down frameRateListenerCallback in cxx animated (#54142)
Summary: ## Changelog: [Internal] [Added] - Allow passing down frameRateListenerCallback in cxx animated exposing `frameRateListenerCallback` to add instrumentation at animation frame and stop we're deferring the actual implementation of frame rate listening/logging to app/platform side Reviewed By: sammy-SC Differential Revision: D84510183
1 parent 91c49e8 commit 748b72a

File tree

2 files changed

+51
-22
lines changed

2 files changed

+51
-22
lines changed

packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,42 @@
1818

1919
namespace facebook::react {
2020

21-
UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl() {}
21+
UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl(
22+
NativeAnimatedNodesManagerProvider::FrameRateListenerCallback
23+
frameRateListenerCallback)
24+
: frameRateListenerCallback_(std::move(frameRateListenerCallback)) {}
2225

2326
void UIManagerNativeAnimatedDelegateImpl::runAnimationFrame() {
2427
if (auto nativeAnimatedNodesManagerStrong =
2528
nativeAnimatedNodesManager_.lock()) {
29+
if (frameRateListenerCallback_) {
30+
frameRateListenerCallback_(true);
31+
}
2632
nativeAnimatedNodesManagerStrong->onRender();
2733
}
2834
}
2935

3036
NativeAnimatedNodesManagerProvider::NativeAnimatedNodesManagerProvider(
3137
StartOnRenderCallback startOnRenderCallback,
32-
StopOnRenderCallback stopOnRenderCallback)
38+
StopOnRenderCallback stopOnRenderCallback,
39+
FrameRateListenerCallback frameRateListenerCallback)
3340
: eventEmitterListenerContainer_(
3441
std::make_shared<EventEmitterListenerContainer>()),
35-
startOnRenderCallback_(std::move(startOnRenderCallback)),
36-
stopOnRenderCallback_(std::move(stopOnRenderCallback)) {}
42+
frameRateListenerCallback_(std::move(frameRateListenerCallback)),
43+
startOnRenderCallback_(std::move(startOnRenderCallback)) {
44+
if (frameRateListenerCallback_) {
45+
stopOnRenderCallback_ = [this, stopOnRenderCallback]() {
46+
if (stopOnRenderCallback) {
47+
stopOnRenderCallback();
48+
}
49+
if (frameRateListenerCallback_) {
50+
frameRateListenerCallback_(false);
51+
}
52+
};
53+
} else {
54+
stopOnRenderCallback_ = std::move(stopOnRenderCallback);
55+
}
56+
}
3757

3858
std::shared_ptr<NativeAnimatedNodesManager>
3959
NativeAnimatedNodesManagerProvider::getOrCreate(
@@ -66,7 +86,8 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
6686
};
6787

6888
nativeAnimatedDelegate_ =
69-
std::make_shared<UIManagerNativeAnimatedDelegateImpl>();
89+
std::make_shared<UIManagerNativeAnimatedDelegateImpl>(
90+
frameRateListenerCallback_);
7091

7192
if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) {
7293
#ifdef RN_USE_ANIMATION_BACKEND

packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.h

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,17 @@ namespace facebook::react {
1515

1616
class AnimatedMountingOverrideDelegate;
1717

18-
class UIManagerNativeAnimatedDelegateImpl
19-
: public UIManagerNativeAnimatedDelegate {
20-
public:
21-
explicit UIManagerNativeAnimatedDelegateImpl();
22-
23-
void runAnimationFrame() override;
24-
25-
void setNativeAnimatedNodesManager(
26-
std::weak_ptr<NativeAnimatedNodesManager> manager) {
27-
nativeAnimatedNodesManager_ = manager;
28-
}
29-
30-
private:
31-
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager_;
32-
};
33-
3418
class NativeAnimatedNodesManagerProvider {
3519
public:
20+
using FrameRateListenerCallback =
21+
std::function<void(bool /* shouldEnableListener */)>;
3622
using StartOnRenderCallback = std::function<void(std::function<void()>&&)>;
3723
using StopOnRenderCallback = NativeAnimatedNodesManager::StopOnRenderCallback;
3824

3925
NativeAnimatedNodesManagerProvider(
4026
StartOnRenderCallback startOnRenderCallback = nullptr,
41-
StopOnRenderCallback stopOnRenderCallback = nullptr);
27+
StopOnRenderCallback stopOnRenderCallback = nullptr,
28+
FrameRateListenerCallback frameRateListenerCallback = nullptr);
4229

4330
std::shared_ptr<NativeAnimatedNodesManager> getOrCreate(
4431
jsi::Runtime& runtime,
@@ -61,10 +48,31 @@ class NativeAnimatedNodesManagerProvider {
6148
std::shared_ptr<AnimatedMountingOverrideDelegate>
6249
animatedMountingOverrideDelegate_;
6350

51+
FrameRateListenerCallback frameRateListenerCallback_;
6452
StartOnRenderCallback startOnRenderCallback_;
6553
StopOnRenderCallback stopOnRenderCallback_;
6654

6755
std::unique_ptr<MergedValueDispatcher> mergedValueDispatcher_;
6856
};
6957

58+
class UIManagerNativeAnimatedDelegateImpl
59+
: public UIManagerNativeAnimatedDelegate {
60+
public:
61+
explicit UIManagerNativeAnimatedDelegateImpl(
62+
NativeAnimatedNodesManagerProvider::FrameRateListenerCallback
63+
frameRateListenerCallback);
64+
65+
void runAnimationFrame() override;
66+
67+
void setNativeAnimatedNodesManager(
68+
std::weak_ptr<NativeAnimatedNodesManager> manager) {
69+
nativeAnimatedNodesManager_ = manager;
70+
}
71+
72+
private:
73+
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager_;
74+
NativeAnimatedNodesManagerProvider::FrameRateListenerCallback
75+
frameRateListenerCallback_;
76+
};
77+
7078
} // namespace facebook::react

0 commit comments

Comments
 (0)