summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/animation/document_timeline.cc
diff options
context:
space:
mode:
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.cc50
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