Commit 5c6b2348 authored by Stephen McGruer's avatar Stephen McGruer Committed by Commit Bot

Web Animations: use WTF::Optional for StartAnimationOnCompositor's start_time

Previously nullable values in the animations code were tracked by
storing nulls as quiet_NaN() and using std::isnan as a null-detector.
It is much more explicit to store such values using WTF::Optional, which
forces code to consider whether or not the offset exists.

Bug: 791086
Change-Id: Ice80a1d3d686b0ff1f0bc2a1f3eac2eff51a8e38
Reviewed-on: https://chromium-review.googlesource.com/981076Reviewed-by: default avatarRobert Flack <flackr@chromium.org>
Commit-Queue: Stephen McGruer <smcgruer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#546145}
parent 3b9df678
...@@ -906,19 +906,19 @@ void Animation::StartAnimationOnCompositor( ...@@ -906,19 +906,19 @@ void Animation::StartAnimationOnCompositor(
bool reversed = playback_rate_ < 0; bool reversed = playback_rate_ < 0;
// TODO(crbug.com/791086): Make StartAnimationOnCompositor use WTF::Optional. WTF::Optional<double> start_time = WTF::nullopt;
double start_time = NullValue();
double time_offset = 0; double time_offset = 0;
if (start_time_) { if (start_time_) {
start_time = TimelineInternal()->ZeroTime() + start_time_.value(); start_time = TimelineInternal()->ZeroTime() + start_time_.value();
if (reversed) if (reversed)
start_time -= EffectEnd() / fabs(playback_rate_); start_time = start_time.value() - (EffectEnd() / fabs(playback_rate_));
} else { } else {
time_offset = time_offset =
reversed ? EffectEnd() - CurrentTimeInternal() : CurrentTimeInternal(); reversed ? EffectEnd() - CurrentTimeInternal() : CurrentTimeInternal();
time_offset = time_offset / fabs(playback_rate_); time_offset = time_offset / fabs(playback_rate_);
} }
DCHECK(!start_time || !IsNull(start_time.value()));
DCHECK_NE(compositor_group_, 0); DCHECK_NE(compositor_group_, 0);
ToKeyframeEffect(content_.Get()) ToKeyframeEffect(content_.Get())
->StartAnimationOnCompositor(compositor_group_, start_time, time_offset, ->StartAnimationOnCompositor(compositor_group_, start_time, time_offset,
......
...@@ -379,7 +379,7 @@ void CompositorAnimations::CancelIncompatibleAnimationsOnCompositor( ...@@ -379,7 +379,7 @@ void CompositorAnimations::CancelIncompatibleAnimationsOnCompositor(
void CompositorAnimations::StartAnimationOnCompositor( void CompositorAnimations::StartAnimationOnCompositor(
const Element& element, const Element& element,
int group, int group,
double start_time, WTF::Optional<double> start_time,
double time_offset, double time_offset,
const Timing& timing, const Timing& timing,
const Animation* animation, const Animation* animation,
...@@ -573,7 +573,7 @@ void AddKeyframesToCurve(PlatformAnimationCurveType& curve, ...@@ -573,7 +573,7 @@ void AddKeyframesToCurve(PlatformAnimationCurveType& curve,
void CompositorAnimations::GetAnimationOnCompositor( void CompositorAnimations::GetAnimationOnCompositor(
const Timing& timing, const Timing& timing,
int group, int group,
double start_time, WTF::Optional<double> start_time,
double time_offset, double time_offset,
const KeyframeEffectModelBase& effect, const KeyframeEffectModelBase& effect,
Vector<std::unique_ptr<CompositorKeyframeModel>>& keyframe_models, Vector<std::unique_ptr<CompositorKeyframeModel>>& keyframe_models,
...@@ -644,8 +644,8 @@ void CompositorAnimations::GetAnimationOnCompositor( ...@@ -644,8 +644,8 @@ void CompositorAnimations::GetAnimationOnCompositor(
std::unique_ptr<CompositorKeyframeModel> keyframe_model = std::unique_ptr<CompositorKeyframeModel> keyframe_model =
CompositorKeyframeModel::Create(*curve, target_property, group, 0); CompositorKeyframeModel::Create(*curve, target_property, group, 0);
if (!std::isnan(start_time)) if (start_time)
keyframe_model->SetStartTime(start_time); keyframe_model->SetStartTime(start_time.value());
keyframe_model->SetIterations(compositor_timing.adjusted_iteration_count); keyframe_model->SetIterations(compositor_timing.adjusted_iteration_count);
keyframe_model->SetIterationStart(compositor_timing.iteration_start); keyframe_model->SetIterationStart(compositor_timing.iteration_start);
......
...@@ -101,7 +101,7 @@ class CORE_EXPORT CompositorAnimations { ...@@ -101,7 +101,7 @@ class CORE_EXPORT CompositorAnimations {
const EffectModel&); const EffectModel&);
static void StartAnimationOnCompositor(const Element&, static void StartAnimationOnCompositor(const Element&,
int group, int group,
double start_time, WTF::Optional<double> start_time,
double time_offset, double time_offset,
const Timing&, const Timing&,
const Animation*, const Animation*,
...@@ -137,7 +137,7 @@ class CORE_EXPORT CompositorAnimations { ...@@ -137,7 +137,7 @@ class CORE_EXPORT CompositorAnimations {
static void GetAnimationOnCompositor( static void GetAnimationOnCompositor(
const Timing&, const Timing&,
int group, int group,
double start_time, WTF::Optional<double> start_time,
double time_offset, double time_offset,
const KeyframeEffectModelBase&, const KeyframeEffectModelBase&,
Vector<std::unique_ptr<CompositorKeyframeModel>>& animations, Vector<std::unique_ptr<CompositorKeyframeModel>>& animations,
......
...@@ -153,9 +153,9 @@ class AnimationCompositorAnimationsTest : public RenderingTest { ...@@ -153,9 +153,9 @@ class AnimationCompositorAnimationsTest : public RenderingTest {
StringKeyframeEffectModel& effect, StringKeyframeEffectModel& effect,
Vector<std::unique_ptr<CompositorKeyframeModel>>& keyframe_models, Vector<std::unique_ptr<CompositorKeyframeModel>>& keyframe_models,
double animation_playback_rate) { double animation_playback_rate) {
CompositorAnimations::GetAnimationOnCompositor( CompositorAnimations::GetAnimationOnCompositor(timing, 0, WTF::nullopt, 0,
timing, 0, std::numeric_limits<double>::quiet_NaN(), 0, effect, effect, keyframe_models,
keyframe_models, animation_playback_rate); animation_playback_rate);
} }
bool DuplicateSingleKeyframeAndTestIsCandidateOnResult( bool DuplicateSingleKeyframeAndTestIsCandidateOnResult(
......
...@@ -232,7 +232,7 @@ KeyframeEffect::CheckCanStartAnimationOnCompositor( ...@@ -232,7 +232,7 @@ KeyframeEffect::CheckCanStartAnimationOnCompositor(
void KeyframeEffect::StartAnimationOnCompositor( void KeyframeEffect::StartAnimationOnCompositor(
int group, int group,
double start_time, WTF::Optional<double> start_time,
double current_time, double current_time,
double animation_playback_rate, double animation_playback_rate,
CompositorAnimation* compositor_animation) { CompositorAnimation* compositor_animation) {
......
...@@ -101,7 +101,7 @@ class CORE_EXPORT KeyframeEffect final : public AnimationEffect { ...@@ -101,7 +101,7 @@ class CORE_EXPORT KeyframeEffect final : public AnimationEffect {
double animation_playback_rate) const; double animation_playback_rate) const;
// Must only be called once. // Must only be called once.
void StartAnimationOnCompositor(int group, void StartAnimationOnCompositor(int group,
double start_time, WTF::Optional<double> start_time,
double time_offset, double time_offset,
double animation_playback_rate, double animation_playback_rate,
CompositorAnimation* = nullptr); CompositorAnimation* = nullptr);
......
...@@ -289,7 +289,7 @@ bool WorkletAnimation::StartOnCompositor(String* failure_message) { ...@@ -289,7 +289,7 @@ bool WorkletAnimation::StartOnCompositor(String* failure_message) {
CompositorAnimations::AttachCompositedLayers(target, CompositorAnimations::AttachCompositedLayers(target,
compositor_animation_.get()); compositor_animation_.get());
double start_time = std::numeric_limits<double>::quiet_NaN(); WTF::Optional<double> start_time = WTF::nullopt;
double time_offset = 0; double time_offset = 0;
int group = 0; int group = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment