Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ void NativeAnimatedNodesManager::startRenderCallbackIfNeeded() {
}

if (startOnRenderCallback_) {
startOnRenderCallback_([this]() { onRender(); });
startOnRenderCallback_();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class NativeAnimatedNodesManager {
std::function<void(Tag, const folly::dynamic&)>;
using FabricCommitCallback =
std::function<void(std::unordered_map<Tag, folly::dynamic>&)>;
using StartOnRenderCallback = std::function<void(std::function<void()>&&)>;
using StartOnRenderCallback = std::function<void()>;
using StopOnRenderCallback = std::function<void()>;

explicit NativeAnimatedNodesManager(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,41 @@
namespace facebook::react {

UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl(
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager)
: nativeAnimatedNodesManager_(std::move(nativeAnimatedNodesManager)) {}
NativeAnimatedNodesManagerProvider::FrameRateListenerCallback
frameRateListenerCallback)
: frameRateListenerCallback_(std::move(frameRateListenerCallback)) {}

void UIManagerNativeAnimatedDelegateImpl::runAnimationFrame() {
if (auto nativeAnimatedNodesManagerStrong =
nativeAnimatedNodesManager_.lock()) {
if (frameRateListenerCallback_) {
frameRateListenerCallback_(true);
}
nativeAnimatedNodesManagerStrong->onRender();
}
}

NativeAnimatedNodesManagerProvider::NativeAnimatedNodesManagerProvider(
NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback,
NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback)
StartOnRenderCallback startOnRenderCallback,
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(
Expand Down Expand Up @@ -67,6 +85,10 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
uiManager->synchronouslyUpdateViewOnUIThread(viewTag, props);
};

nativeAnimatedDelegate_ =
std::make_shared<UIManagerNativeAnimatedDelegateImpl>(
frameRateListenerCallback_);

if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) {
#ifdef RN_USE_ANIMATION_BACKEND
// TODO: this should be initialized outside of animated, but for now it
Expand All @@ -84,14 +106,29 @@ NativeAnimatedNodesManagerProvider::getOrCreate(

uiManager->unstable_setAnimationBackend(animationBackend_);
} else {
auto startOnRenderCallback = [this,
startOnRenderCallbackFn =
std::move(startOnRenderCallback_)]() {
if (startOnRenderCallbackFn) {
startOnRenderCallbackFn([this]() {
if (nativeAnimatedDelegate_) {
nativeAnimatedDelegate_->runAnimationFrame();
}
});
}
};
nativeAnimatedNodesManager_ =
std::make_shared<NativeAnimatedNodesManager>(
std::move(directManipulationCallback),
std::move(fabricCommitCallback),
std::move(startOnRenderCallback_),
std::move(startOnRenderCallback),
std::move(stopOnRenderCallback_));
}

std::static_pointer_cast<UIManagerNativeAnimatedDelegateImpl>(
nativeAnimatedDelegate_)
->setNativeAnimatedNodesManager(nativeAnimatedNodesManager_);

addEventEmitterListener(
nativeAnimatedNodesManager_->getEventEmitterListener());

Expand All @@ -112,10 +149,6 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
return false;
}));

nativeAnimatedDelegate_ =
std::make_shared<UIManagerNativeAnimatedDelegateImpl>(
nativeAnimatedNodesManager_);

uiManager->setNativeAnimatedDelegate(nativeAnimatedDelegate_);

// TODO: remove force casting.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,19 @@

namespace facebook::react {

class UIManagerNativeAnimatedDelegateImpl
: public UIManagerNativeAnimatedDelegate {
public:
explicit UIManagerNativeAnimatedDelegateImpl(
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager);

void runAnimationFrame() override;

private:
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager_;
};

class AnimatedMountingOverrideDelegate;

class NativeAnimatedNodesManagerProvider {
public:
using FrameRateListenerCallback =
std::function<void(bool /* shouldEnableListener */)>;
using StartOnRenderCallback = std::function<void(std::function<void()>&&)>;
using StopOnRenderCallback = NativeAnimatedNodesManager::StopOnRenderCallback;

NativeAnimatedNodesManagerProvider(
NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback =
nullptr,
NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback =
nullptr);
StartOnRenderCallback startOnRenderCallback = nullptr,
StopOnRenderCallback stopOnRenderCallback = nullptr,
FrameRateListenerCallback frameRateListenerCallback = nullptr);

std::shared_ptr<NativeAnimatedNodesManager> getOrCreate(
jsi::Runtime& runtime,
Expand All @@ -56,10 +48,31 @@ class NativeAnimatedNodesManagerProvider {
std::shared_ptr<AnimatedMountingOverrideDelegate>
animatedMountingOverrideDelegate_;

NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback_;
NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback_;
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
Loading