mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Allow passing down frameRateListenerCallback in cxx animated (#54142)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/54142 ## 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 fbshipit-source-id: d8835542e8e50c5018032c951a510fec27b5a4d5
This commit is contained in:
committed by
meta-codesync[bot]
parent
4c7351d9b1
commit
9f7a3bb2ff
+26
-5
@@ -18,22 +18,42 @@
|
||||
|
||||
namespace facebook::react {
|
||||
|
||||
UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl() {}
|
||||
UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl(
|
||||
NativeAnimatedNodesManagerProvider::FrameRateListenerCallback
|
||||
frameRateListenerCallback)
|
||||
: frameRateListenerCallback_(std::move(frameRateListenerCallback)) {}
|
||||
|
||||
void UIManagerNativeAnimatedDelegateImpl::runAnimationFrame() {
|
||||
if (auto nativeAnimatedNodesManagerStrong =
|
||||
nativeAnimatedNodesManager_.lock()) {
|
||||
if (frameRateListenerCallback_) {
|
||||
frameRateListenerCallback_(true);
|
||||
}
|
||||
nativeAnimatedNodesManagerStrong->onRender();
|
||||
}
|
||||
}
|
||||
|
||||
NativeAnimatedNodesManagerProvider::NativeAnimatedNodesManagerProvider(
|
||||
StartOnRenderCallback startOnRenderCallback,
|
||||
StopOnRenderCallback stopOnRenderCallback)
|
||||
StopOnRenderCallback stopOnRenderCallback,
|
||||
FrameRateListenerCallback frameRateListenerCallback)
|
||||
: eventEmitterListenerContainer_(
|
||||
std::make_shared<EventEmitterListenerContainer>()),
|
||||
startOnRenderCallback_(std::move(startOnRenderCallback)),
|
||||
stopOnRenderCallback_(std::move(stopOnRenderCallback)) {}
|
||||
frameRateListenerCallback_(std::move(frameRateListenerCallback)),
|
||||
startOnRenderCallback_(std::move(startOnRenderCallback)) {
|
||||
if (frameRateListenerCallback_) {
|
||||
stopOnRenderCallback_ = [this, stopOnRenderCallback]() {
|
||||
if (stopOnRenderCallback) {
|
||||
stopOnRenderCallback();
|
||||
}
|
||||
if (frameRateListenerCallback_) {
|
||||
frameRateListenerCallback_(false);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
stopOnRenderCallback_ = std::move(stopOnRenderCallback);
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<NativeAnimatedNodesManager>
|
||||
NativeAnimatedNodesManagerProvider::getOrCreate(
|
||||
@@ -66,7 +86,8 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
|
||||
};
|
||||
|
||||
nativeAnimatedDelegate_ =
|
||||
std::make_shared<UIManagerNativeAnimatedDelegateImpl>();
|
||||
std::make_shared<UIManagerNativeAnimatedDelegateImpl>(
|
||||
frameRateListenerCallback_);
|
||||
|
||||
if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) {
|
||||
#ifdef RN_USE_ANIMATION_BACKEND
|
||||
|
||||
+25
-17
@@ -15,30 +15,17 @@ namespace facebook::react {
|
||||
|
||||
class AnimatedMountingOverrideDelegate;
|
||||
|
||||
class UIManagerNativeAnimatedDelegateImpl
|
||||
: public UIManagerNativeAnimatedDelegate {
|
||||
public:
|
||||
explicit UIManagerNativeAnimatedDelegateImpl();
|
||||
|
||||
void runAnimationFrame() override;
|
||||
|
||||
void setNativeAnimatedNodesManager(
|
||||
std::weak_ptr<NativeAnimatedNodesManager> manager) {
|
||||
nativeAnimatedNodesManager_ = manager;
|
||||
}
|
||||
|
||||
private:
|
||||
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager_;
|
||||
};
|
||||
|
||||
class NativeAnimatedNodesManagerProvider {
|
||||
public:
|
||||
using FrameRateListenerCallback =
|
||||
std::function<void(bool /* shouldEnableListener */)>;
|
||||
using StartOnRenderCallback = std::function<void(std::function<void()>&&)>;
|
||||
using StopOnRenderCallback = NativeAnimatedNodesManager::StopOnRenderCallback;
|
||||
|
||||
NativeAnimatedNodesManagerProvider(
|
||||
StartOnRenderCallback startOnRenderCallback = nullptr,
|
||||
StopOnRenderCallback stopOnRenderCallback = nullptr);
|
||||
StopOnRenderCallback stopOnRenderCallback = nullptr,
|
||||
FrameRateListenerCallback frameRateListenerCallback = nullptr);
|
||||
|
||||
std::shared_ptr<NativeAnimatedNodesManager> getOrCreate(
|
||||
jsi::Runtime& runtime,
|
||||
@@ -61,10 +48,31 @@ class NativeAnimatedNodesManagerProvider {
|
||||
std::shared_ptr<AnimatedMountingOverrideDelegate>
|
||||
animatedMountingOverrideDelegate_;
|
||||
|
||||
FrameRateListenerCallback frameRateListenerCallback_;
|
||||
StartOnRenderCallback startOnRenderCallback_;
|
||||
StopOnRenderCallback stopOnRenderCallback_;
|
||||
|
||||
std::unique_ptr<MergedValueDispatcher> mergedValueDispatcher_;
|
||||
};
|
||||
|
||||
class UIManagerNativeAnimatedDelegateImpl
|
||||
: public UIManagerNativeAnimatedDelegate {
|
||||
public:
|
||||
explicit UIManagerNativeAnimatedDelegateImpl(
|
||||
NativeAnimatedNodesManagerProvider::FrameRateListenerCallback
|
||||
frameRateListenerCallback);
|
||||
|
||||
void runAnimationFrame() override;
|
||||
|
||||
void setNativeAnimatedNodesManager(
|
||||
std::weak_ptr<NativeAnimatedNodesManager> manager) {
|
||||
nativeAnimatedNodesManager_ = manager;
|
||||
}
|
||||
|
||||
private:
|
||||
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager_;
|
||||
NativeAnimatedNodesManagerProvider::FrameRateListenerCallback
|
||||
frameRateListenerCallback_;
|
||||
};
|
||||
|
||||
} // namespace facebook::react
|
||||
|
||||
Reference in New Issue
Block a user