use pipeline in animator finish callback to get right task execute thread

Signed-off-by: zcdqs <junfeng.lijunfeng@huawei.com>
Change-Id: Ib2906bb73c6f67dbf6e4c29d84086647533b5304
This commit is contained in:
zcdqs
2022-03-23 17:17:48 +08:00
parent 9663d03c1e
commit 47c1e6cea2
@@ -3175,6 +3175,14 @@ void PipelineContext::OpenImplicitAnimation(
pendingImplicitLayout_.push(false);
FlushLayout();
auto wrapFinishCallback = [weak = AceType::WeakClaim(this), finishCallback]() {
auto context = weak.Upgrade();
if (!context) {
return;
}
context->GetTaskExecutor()->PostTask([finishCallback]() { finishCallback(); }, TaskExecutor::TaskType::UI);
};
Rosen::RSAnimationTimingProtocol timingProtocol;
timingProtocol.SetDuration(option.GetDuration());
timingProtocol.SetStartDelay(option.GetDelay());
@@ -3184,7 +3192,7 @@ void PipelineContext::OpenImplicitAnimation(
option.GetAnimationDirection() == AnimationDirection::ALTERNATE);
timingProtocol.SetAutoReverse(option.GetAnimationDirection() == AnimationDirection::ALTERNATE ||
option.GetAnimationDirection() == AnimationDirection::ALTERNATE_REVERSE);
RSNode::OpenImplicitAnimation(timingProtocol, NativeCurveHelper::ToNativeCurve(curve), finishCallback);
RSNode::OpenImplicitAnimation(timingProtocol, NativeCurveHelper::ToNativeCurve(curve), wrapFinishCallback);
#endif
}