aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorGeorge Roman <george.roman.99@gmail.com>2019-03-26 09:38:22 +0200
committerGeorge Roman <george.roman.99@gmail.com>2019-03-26 09:39:07 +0200
commite63de4d52ce3f598b134f6ab258b4ad824d0e14e (patch)
tree1d9a17d142e87b640927e80c57692181a34b044e /components/script
parentc9b5b8fad342c73790ec8348b7b6ab5f2129d223 (diff)
downloadservo-e63de4d52ce3f598b134f6ab258b4ad824d0e14e.tar.gz
servo-e63de4d52ce3f598b134f6ab258b4ad824d0e14e.zip
Update Event's timestamp
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/event.rs15
-rw-r--r--components/script/dom/webidls/Event.webidl2
2 files changed, 12 insertions, 5 deletions
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs
index ad843d7a9b2..7c56e672e11 100644
--- a/components/script/dom/event.rs
+++ b/components/script/dom/event.rs
@@ -6,8 +6,11 @@ use crate::dom::bindings::callback::ExceptionHandling;
use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::EventBinding;
use crate::dom::bindings::codegen::Bindings::EventBinding::{EventConstants, EventMethods};
+use crate::dom::bindings::codegen::Bindings::PerformanceBinding::DOMHighResTimeStamp;
+use crate::dom::bindings::codegen::Bindings::PerformanceBinding::PerformanceBinding::PerformanceMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
+use crate::dom::bindings::num::Finite;
use crate::dom::bindings::refcounted::Trusted;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use crate::dom::bindings::root::{DomRoot, DomSlice, MutNullableDom};
@@ -21,6 +24,7 @@ use crate::dom::window::Window;
use crate::task::TaskOnce;
use devtools_traits::{TimelineMarker, TimelineMarkerType};
use dom_struct::dom_struct;
+use metrics::ToMs;
use servo_atoms::Atom;
use std::cell::Cell;
use std::default::Default;
@@ -40,7 +44,7 @@ pub struct Event {
trusted: Cell<bool>,
dispatching: Cell<bool>,
initialized: Cell<bool>,
- timestamp: u64,
+ precise_time_ns: u64,
}
impl Event {
@@ -59,7 +63,7 @@ impl Event {
trusted: Cell::new(false),
dispatching: Cell::new(false),
initialized: Cell::new(false),
- timestamp: time::get_time().sec as u64,
+ precise_time_ns: time::precise_time_ns(),
}
}
@@ -322,8 +326,11 @@ impl EventMethods for Event {
}
// https://dom.spec.whatwg.org/#dom-event-timestamp
- fn TimeStamp(&self) -> u64 {
- self.timestamp
+ fn TimeStamp(&self) -> DOMHighResTimeStamp {
+ Finite::wrap(
+ (self.precise_time_ns - (*self.global().performance().TimeOrigin()).round() as u64)
+ .to_ms(),
+ )
}
// https://dom.spec.whatwg.org/#dom-event-initevent
diff --git a/components/script/dom/webidls/Event.webidl b/components/script/dom/webidls/Event.webidl
index f6074bd68f3..2bf103149d9 100644
--- a/components/script/dom/webidls/Event.webidl
+++ b/components/script/dom/webidls/Event.webidl
@@ -35,7 +35,7 @@ interface Event {
[Unforgeable]
readonly attribute boolean isTrusted;
[Constant]
- readonly attribute DOMTimeStamp timeStamp;
+ readonly attribute DOMHighResTimeStamp timeStamp;
void initEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false);
};