diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/animation/document_timeline.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/animation/document_timeline.cc | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/chromium/third_party/blink/renderer/core/animation/document_timeline.cc b/chromium/third_party/blink/renderer/core/animation/document_timeline.cc index 5fa2510929b..f907702ba1d 100644 --- a/chromium/third_party/blink/renderer/core/animation/document_timeline.cc +++ b/chromium/third_party/blink/renderer/core/animation/document_timeline.cc @@ -43,6 +43,7 @@ #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/platform/animation/compositor_animation_timeline.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" +#include "third_party/blink/renderer/platform/wtf/time.h" namespace blink { @@ -59,24 +60,25 @@ bool CompareAnimations(const Member<Animation>& left, const double DocumentTimeline::kMinimumDelay = 0.04; DocumentTimeline* DocumentTimeline::Create(Document* document, - double origin_time_in_milliseconds, + TimeDelta origin_time, PlatformTiming* timing) { - return new DocumentTimeline(document, origin_time_in_milliseconds, timing); + return new DocumentTimeline(document, origin_time, timing); } DocumentTimeline* DocumentTimeline::Create( ExecutionContext* execution_context, const DocumentTimelineOptions& options) { Document* document = ToDocument(execution_context); - return new DocumentTimeline(document, options.originTime(), nullptr); + return new DocumentTimeline( + document, TimeDelta::FromMillisecondsD(options.originTime()), nullptr); } DocumentTimeline::DocumentTimeline(Document* document, - double origin_time_in_milliseconds, + TimeDelta origin_time, PlatformTiming* timing) : document_(document), - origin_time_(origin_time_in_milliseconds / 1000), - zero_time_(origin_time_), + origin_time_(origin_time), + zero_time_(TimeTicks() + origin_time_), zero_time_initialized_(false), outdated_animation_count_(0), playback_rate_(1), @@ -188,9 +190,10 @@ void DocumentTimeline::ScheduleNextService() { } void DocumentTimeline::DocumentTimelineTiming::WakeAfter(double duration) { - if (timer_.IsActive() && timer_.NextFireInterval() < duration) + TimeDelta duration_delta = TimeDelta::FromSecondsD(duration); + if (timer_.IsActive() && timer_.NextFireInterval() < duration_delta) return; - timer_.StartOneShot(duration, FROM_HERE); + timer_.StartOneShot(duration_delta, FROM_HERE); } void DocumentTimeline::DocumentTimelineTiming::ServiceOnNextFrame() { @@ -203,19 +206,17 @@ void DocumentTimeline::DocumentTimelineTiming::Trace(blink::Visitor* visitor) { DocumentTimeline::PlatformTiming::Trace(visitor); } -double DocumentTimeline::ZeroTime() { +TimeTicks DocumentTimeline::ZeroTime() { if (!zero_time_initialized_ && document_ && document_->Loader()) { - zero_time_ = - TimeTicksInSeconds( - document_->Loader()->GetTiming().ReferenceMonotonicTime()) + - origin_time_; + zero_time_ = document_->Loader()->GetTiming().ReferenceMonotonicTime() + + origin_time_; zero_time_initialized_ = true; } return zero_time_; } void DocumentTimeline::ResetForTesting() { - zero_time_ = origin_time_; + zero_time_ = TimeTicks() + origin_time_; zero_time_initialized_ = true; playback_rate_ = 1; last_current_time_internal_ = 0; @@ -225,17 +226,20 @@ double DocumentTimeline::currentTime(bool& is_null) { return CurrentTimeInternal(is_null) * 1000; } +// TODO(npm): change the return type to base::Optional<TimeTicks>. double DocumentTimeline::CurrentTimeInternal(bool& is_null) { if (!IsActive()) { is_null = true; return std::numeric_limits<double>::quiet_NaN(); } - double result = - playback_rate_ == 0 - ? ZeroTime() - : (GetDocument()->GetAnimationClock().CurrentTime() - ZeroTime()) * - playback_rate_; + double result = playback_rate_ == 0 + ? TimeTicksInSeconds(ZeroTime()) + : (GetDocument()->GetAnimationClock().CurrentTime() - + TimeTicksInSeconds(ZeroTime())) * + playback_rate_; is_null = std::isnan(result); + // This looks like it could never be NaN here. + DCHECK(!is_null); return result; } @@ -294,10 +298,10 @@ void DocumentTimeline::SetPlaybackRate(double playback_rate) { return; double current_time = CurrentTimeInternal(); playback_rate_ = playback_rate; - zero_time_ = playback_rate == 0 - ? current_time - : GetDocument()->GetAnimationClock().CurrentTime() - - current_time / playback_rate; + zero_time_ = TimeTicksFromSeconds( + playback_rate == 0 ? current_time + : GetDocument()->GetAnimationClock().CurrentTime() - + current_time / playback_rate); zero_time_initialized_ = true; // Corresponding compositor animation may need to be restarted to pick up |