|
18 | 18 |
|
19 | 19 | namespace facebook::react { |
20 | 20 |
|
21 | | -UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl() {} |
| 21 | +UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl( |
| 22 | + NativeAnimatedNodesManagerProvider::FrameRateListenerCallback |
| 23 | + frameRateListenerCallback) |
| 24 | + : frameRateListenerCallback_(std::move(frameRateListenerCallback)) {} |
22 | 25 |
|
23 | 26 | void UIManagerNativeAnimatedDelegateImpl::runAnimationFrame() { |
24 | 27 | if (auto nativeAnimatedNodesManagerStrong = |
25 | 28 | nativeAnimatedNodesManager_.lock()) { |
| 29 | + if (frameRateListenerCallback_) { |
| 30 | + frameRateListenerCallback_(true); |
| 31 | + } |
26 | 32 | nativeAnimatedNodesManagerStrong->onRender(); |
27 | 33 | } |
28 | 34 | } |
29 | 35 |
|
30 | 36 | NativeAnimatedNodesManagerProvider::NativeAnimatedNodesManagerProvider( |
31 | 37 | NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback, |
32 | | - NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback) |
| 38 | + NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback, |
| 39 | + FrameRateListenerCallback frameRateListenerCallback) |
33 | 40 | : eventEmitterListenerContainer_( |
34 | 41 | 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 | +} |
37 | 57 |
|
38 | 58 | std::shared_ptr<NativeAnimatedNodesManager> |
39 | 59 | NativeAnimatedNodesManagerProvider::getOrCreate( |
@@ -66,7 +86,8 @@ NativeAnimatedNodesManagerProvider::getOrCreate( |
66 | 86 | }; |
67 | 87 |
|
68 | 88 | nativeAnimatedDelegate_ = |
69 | | - std::make_shared<UIManagerNativeAnimatedDelegateImpl>(); |
| 89 | + std::make_shared<UIManagerNativeAnimatedDelegateImpl>( |
| 90 | + frameRateListenerCallback_); |
70 | 91 |
|
71 | 92 | if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) { |
72 | 93 | #ifdef RN_USE_ANIMATION_BACKEND |
|
0 commit comments