Files
Schnappix/node_modules/react-native-reanimated/Common/cpp/reanimated/Fabric/ReanimatedMountHook.cpp
T

58 lines
1.9 KiB
C++

#include <reanimated/Fabric/ReanimatedCommitShadowNode.h>
#include <reanimated/Fabric/ReanimatedMountHook.h>
#include <reanimated/Tools/ReanimatedSystraceSection.h>
namespace reanimated {
ReanimatedMountHook::ReanimatedMountHook(
const std::shared_ptr<UIManager> &uiManager,
const std::shared_ptr<UpdatesRegistryManager> &updatesRegistryManager,
const std::function<void()> &requestFlush)
: uiManager_(uiManager),
updatesRegistryManager_(updatesRegistryManager),
requestFlush_(requestFlush) {
uiManager_->registerMountHook(*this);
}
ReanimatedMountHook::~ReanimatedMountHook() noexcept {
uiManager_->unregisterMountHook(*this);
}
void ReanimatedMountHook::shadowTreeDidMount(
const RootShadowNode::Shared &rootShadowNode,
#if REACT_NATIVE_MINOR_VERSION >= 81
HighResTimeStamp
#else
double
#endif // REACT_NATIVE_MINOR_VERSION >= 81
) noexcept {
ReanimatedSystraceSection s("ReanimatedMountHook::shadowTreeDidMount");
auto reaShadowNode =
std::reinterpret_pointer_cast<ReanimatedCommitShadowNode>(
std::const_pointer_cast<RootShadowNode>(rootShadowNode));
if (reaShadowNode->hasReanimatedMountTrait()) {
// We mark reanimated commits with ReanimatedMountTrait. We don't want other
// shadow nodes to use this trait, but since this rootShadowNode is Shared,
// we don't have that guarantee. That's why we also unset this trait in the
// commit hook. We remove it here mainly for the sake of cleanliness.
reaShadowNode->unsetReanimatedMountTrait();
return;
}
{
auto lock = updatesRegistryManager_->lock();
updatesRegistryManager_->handleNodeRemovals(*rootShadowNode);
// When commit from React Native has finished, we reset the skip commit flag
// in order to allow Reanimated to commit its tree
updatesRegistryManager_->unpauseReanimatedCommits();
if (updatesRegistryManager_->shouldCommitAfterPause()) {
requestFlush_();
}
}
}
} // namespace reanimated