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(
bool reversed = playback_rate_ < 0;
// TODO(crbug.com/791086): Make StartAnimationOnCompositor use WTF::Optional.
double start_time = NullValue();
WTF::Optional<double> start_time = WTF::nullopt;
double time_offset = 0;
if (start_time_) {
start_time = TimelineInternal()->ZeroTime() + start_time_.value();
if (reversed)
start_time -= EffectEnd() / fabs(playback_rate_);
start_time = start_time.value() - (EffectEnd() / fabs(playback_rate_));
} else {
time_offset =
reversed ? EffectEnd() - CurrentTimeInternal() : CurrentTimeInternal();
time_offset = time_offset / fabs(playback_rate_);
}
DCHECK(!start_time || !IsNull(start_time.value()));
DCHECK_NE(compositor_group_, 0);
ToKeyframeEffect(content_.Get())
->StartAnimationOnCompositor(compositor_group_, start_time, time_offset,
......
......@@ -379,7 +379,7 @@ void CompositorAnimations::CancelIncompatibleAnimationsOnCompositor(
void CompositorAnimations::StartAnimationOnCompositor(
const Element& element,
int group,
double start_time,
WTF::Optional<double> start_time,
double time_offset,
const Timing& timing,
const Animation* animation,
......@@ -573,7 +573,7 @@ void AddKeyframesToCurve(PlatformAnimationCurveType& curve,
void CompositorAnimations::GetAnimationOnCompositor(
const Timing& timing,
int group,
double start_time,
WTF::Optional<double> start_time,
double time_offset,
const KeyframeEffectModelBase& effect,
Vector<std::unique_ptr<CompositorKeyframeModel>>& keyframe_models,
......@@ -644,8 +644,8 @@ void CompositorAnimations::GetAnimationOnCompositor(
std::unique_ptr<CompositorKeyframeModel> keyframe_model =
CompositorKeyframeModel::Create(*curve, target_property, group, 0);
if (!std::isnan(start_time))
keyframe_model->SetStartTime(start_time);
if (start_time)
keyframe_model->SetStartTime(start_time.value());
keyframe_model->SetIterations(compositor_timing.adjusted_iteration_count);
keyframe_model->SetIterationStart(compositor_timing.iteration_start);
......
......@@ -101,7 +101,7 @@ class CORE_EXPORT CompositorAnimations {
const EffectModel&);
static void StartAnimationOnCompositor(const Element&,
int group,
double start_time,
WTF::Optional<double> start_time,
double time_offset,
const Timing&,
const Animation*,
......@@ -137,7 +137,7 @@ class CORE_EXPORT CompositorAnimations {
static void GetAnimationOnCompositor(
const Timing&,
int group,
double start_time,
WTF::Optional<double> start_time,
double time_offset,
const KeyframeEffectModelBase&,
Vector<std::unique_ptr<CompositorKeyframeModel>>& animations,
......
......@@ -153,9 +153,9 @@ class AnimationCompositorAnimationsTest : public RenderingTest {
StringKeyframeEffectModel& effect,
Vector<std::unique_ptr<CompositorKeyframeModel>>& keyframe_models,
double animation_playback_rate) {
CompositorAnimations::GetAnimationOnCompositor(
timing, 0, std::numeric_limits<double>::quiet_NaN(), 0, effect,
keyframe_models, animation_playback_rate);
CompositorAnimations::GetAnimationOnCompositor(timing, 0, WTF::nullopt, 0,
effect, keyframe_models,
animation_playback_rate);
}
bool DuplicateSingleKeyframeAndTestIsCandidateOnResult(
......
......@@ -232,7 +232,7 @@ KeyframeEffect::CheckCanStartAnimationOnCompositor(
void KeyframeEffect::StartAnimationOnCompositor(
int group,
double start_time,
WTF::Optional<double> start_time,
double current_time,
double animation_playback_rate,
CompositorAnimation* compositor_animation) {
......
......@@ -101,7 +101,7 @@ class CORE_EXPORT KeyframeEffect final : public AnimationEffect {
double animation_playback_rate) const;
// Must only be called once.
void StartAnimationOnCompositor(int group,
double start_time,
WTF::Optional<double> start_time,
double time_offset,
double animation_playback_rate,
CompositorAnimation* = nullptr);
......
......@@ -289,7 +289,7 @@ bool WorkletAnimation::StartOnCompositor(String* failure_message) {
CompositorAnimations::AttachCompositedLayers(target,
compositor_animation_.get());
double start_time = std::numeric_limits<double>::quiet_NaN();
WTF::Optional<double> start_time = WTF::nullopt;
double time_offset = 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