aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/animation_timeline.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/animation_timeline.rs')
-rw-r--r--components/script/animation_timeline.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/components/script/animation_timeline.rs b/components/script/animation_timeline.rs
new file mode 100644
index 00000000000..e0ad520db61
--- /dev/null
+++ b/components/script/animation_timeline.rs
@@ -0,0 +1,49 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#![deny(missing_docs)]
+
+//! A timeline module, used to specify an `AnimationTimeline` which determines
+//! the time used for synchronizing animations in the script thread.
+
+use time;
+
+/// A `AnimationTimeline` which is used to synchronize animations during the script
+/// event loop.
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf)]
+pub struct AnimationTimeline {
+ current_value: f64,
+}
+
+impl AnimationTimeline {
+ /// Creates a new "normal" timeline, i.e., a "Current" mode timer.
+ #[inline]
+ pub fn new() -> Self {
+ Self {
+ current_value: time::precise_time_s(),
+ }
+ }
+
+ /// Creates a new "test mode" timeline, with initial time 0.
+ #[inline]
+ pub fn new_for_testing() -> Self {
+ Self { current_value: 0. }
+ }
+
+ /// Returns the current value of the timeline in seconds.
+ pub fn current_value(&self) -> f64 {
+ self.current_value
+ }
+
+ /// Updates the value of the `AnimationTimeline` to the current clock time.
+ pub fn update(&mut self) {
+ self.current_value = time::precise_time_s();
+ }
+
+ /// Increments the current value of the timeline by a specific number of seconds.
+ /// This is used for testing.
+ pub fn advance_specific(&mut self, by: f64) {
+ self.current_value += by;
+ }
+}