Skip to content

Commit 33e1a9a

Browse files
Bartlomiej Bloniarzfacebook-github-bot
authored andcommitted
Introduce Scheduler briding logic for native Choreographer implementations
Summary: This diff adds a scaffolding allowing for the Animation Backend to access platform-specific animation frame scheduling. # Changelog [General] [Added] - `schedulerShouldResumeAnimationFrameCallbacks` and `schedulerShouldPauseAnimationFrameCallbacks` methods to `SchedulerDelegate` Differential Revision: D89663244
1 parent f34b870 commit 33e1a9a

File tree

6 files changed

+44
-0
lines changed

6 files changed

+44
-0
lines changed

packages/react-native/React/Fabric/RCTScheduler.mm

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,18 @@ void schedulerDidUpdateShadowTree(const std::unordered_map<Tag, folly::dynamic>
7878
// This delegate method is not currently used on iOS.
7979
}
8080

81+
void schedulerShouldResumeAnimationFrameCallbacks() override
82+
{
83+
// Does nothing.
84+
// This delegate method is not currently used on iOS.
85+
}
86+
87+
void schedulerShouldPauseAnimationFrameCallbacks() override
88+
{
89+
// Does nothing.
90+
// This delegate method is not currently used on iOS.
91+
}
92+
8193
private:
8294
void *scheduler_;
8395
};

packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,10 @@ void FabricUIManagerBinding::schedulerDidUpdateShadowTree(
764764
// no-op
765765
}
766766

767+
void FabricUIManagerBinding::schedulerShouldResumeAnimationFrameCallbacks() {}
768+
769+
void FabricUIManagerBinding::schedulerShouldPauseAnimationFrameCallbacks() {}
770+
767771
void FabricUIManagerBinding::onAnimationStarted() {
768772
auto mountingManager = getMountingManager("onAnimationStarted");
769773
if (!mountingManager) {

packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ class FabricUIManagerBinding : public jni::HybridClass<FabricUIManagerBinding>,
112112

113113
void schedulerDidUpdateShadowTree(const std::unordered_map<Tag, folly::dynamic> &tagToProps) override;
114114

115+
void schedulerShouldResumeAnimationFrameCallbacks() override;
116+
117+
void schedulerShouldPauseAnimationFrameCallbacks() override;
118+
115119
void setPixelDensity(float pointScaleFactor);
116120

117121
void driveCxxAnimations();

packages/react-native/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@ class SchedulerDelegate {
6060

6161
virtual void schedulerDidUpdateShadowTree(const std::unordered_map<Tag, folly::dynamic> &tagToProps) = 0;
6262

63+
/*
64+
* Called when the animation backend should start receiving frame callbacks.
65+
* This is used to control the platform-specific animation frame scheduling.
66+
*/
67+
virtual void schedulerShouldResumeAnimationFrameCallbacks() = 0;
68+
69+
/*
70+
* Called when the animation backend should stop receiving frame callbacks.
71+
* This is used to pause the platform-specific animation frame scheduling.
72+
*/
73+
virtual void schedulerShouldPauseAnimationFrameCallbacks() = 0;
74+
6375
virtual ~SchedulerDelegate() noexcept = default;
6476
};
6577

packages/react-native/ReactCxxPlatform/react/renderer/scheduler/SchedulerDelegateImpl.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,12 @@ void SchedulerDelegateImpl::schedulerDidUpdateShadowTree(
6363
mountingManager_->onUpdateShadowTree(tagToProps);
6464
}
6565

66+
void SchedulerDelegateImpl::schedulerShouldResumeAnimationFrameCallbacks() {
67+
// no-op for ReactCxxPlatform
68+
}
69+
70+
void SchedulerDelegateImpl::schedulerShouldPauseAnimationFrameCallbacks() {
71+
// no-op for ReactCxxPlatform
72+
}
73+
6674
} // namespace facebook::react

packages/react-native/ReactCxxPlatform/react/renderer/scheduler/SchedulerDelegateImpl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ class SchedulerDelegateImpl : public SchedulerDelegate {
4747

4848
void schedulerDidUpdateShadowTree(const std::unordered_map<Tag, folly::dynamic> &tagToProps) override;
4949

50+
void schedulerShouldResumeAnimationFrameCallbacks() override;
51+
52+
void schedulerShouldPauseAnimationFrameCallbacks() override;
53+
5054
std::shared_ptr<IMountingManager> mountingManager_;
5155
};
5256

0 commit comments

Comments
 (0)