Stop using time@0.1 in Servo (#33394)

This removes the last few uses of `time@0.1` in Servo. There are still
dependencies from `style` and `webrender`, but they will be removed soon
as well. The uses of this version of `time` are replaced with
`std::time` types and `time@0.3` when negative `Duration` is necessary.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2024-09-11 00:09:56 -07:00 committed by GitHub
parent 095590e224
commit bc8d8b62c3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 88 additions and 103 deletions

View file

@ -61,6 +61,16 @@ impl Add<Duration> for CrossProcessInstant {
}
}
impl Sub<Duration> for CrossProcessInstant {
type Output = Self;
fn sub(self, rhs: Duration) -> Self::Output {
Self {
value: self.value - rhs.whole_nanoseconds() as u64,
}
}
}
#[cfg(all(unix, not(any(target_os = "macos", target_os = "ios"))))]
mod platform {
use libc::timespec;

View file

@ -19,5 +19,4 @@ malloc_size_of = { workspace = true }
malloc_size_of_derive = { workspace = true }
serde = { workspace = true }
servo_url = { path = "../../url" }
time = { workspace = true }
uuid = { workspace = true, features = ["serde"] }

View file

@ -14,6 +14,7 @@ use std::collections::HashMap;
use std::net::TcpStream;
use std::time::{Duration, SystemTime};
use base::cross_process_instant::CrossProcessInstant;
use base::id::{BrowsingContextId, PipelineId};
use bitflags::bitflags;
use http::{HeaderMap, Method};
@ -134,16 +135,16 @@ pub struct NodeInfo {
pub struct StartedTimelineMarker {
name: String,
start_time: PreciseTime,
start_time: CrossProcessInstant,
start_stack: Option<Vec<()>>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct TimelineMarker {
pub name: String,
pub start_time: PreciseTime,
pub start_time: CrossProcessInstant,
pub start_stack: Option<Vec<()>>,
pub end_time: PreciseTime,
pub end_time: CrossProcessInstant,
pub end_stack: Option<Vec<()>>,
}
@ -364,7 +365,7 @@ impl TimelineMarker {
pub fn start(name: String) -> StartedTimelineMarker {
StartedTimelineMarker {
name,
start_time: PreciseTime::now(),
start_time: CrossProcessInstant::now(),
start_stack: None,
}
}
@ -376,31 +377,11 @@ impl StartedTimelineMarker {
name: self.name,
start_time: self.start_time,
start_stack: self.start_stack,
end_time: PreciseTime::now(),
end_time: CrossProcessInstant::now(),
end_stack: None,
}
}
}
/// A replacement for `time::PreciseTime` that isn't opaque, so we can serialize it.
///
/// The reason why this doesn't go upstream is that `time` is slated to be part of Rust's standard
/// library, which definitely can't have any dependencies on `serde`. But `serde` can't implement
/// `Deserialize` and `Serialize` itself, because `time::PreciseTime` is opaque! A Catch-22. So I'm
/// duplicating the definition here.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub struct PreciseTime(u64);
impl PreciseTime {
pub fn now() -> PreciseTime {
PreciseTime(time::precise_time_ns())
}
pub fn to(&self, later: PreciseTime) -> Duration {
Duration::from_nanos(later.0 - self.0)
}
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub struct WorkerId(pub Uuid);

View file

@ -5,6 +5,7 @@
use std::cmp::{max, min};
use std::ops::Range;
use std::path::PathBuf;
use std::time::SystemTime;
use embedder_traits::FilterPattern;
use ipc_channel::ipc::IpcSender;
@ -115,7 +116,7 @@ impl RelativePos {
pub struct SelectedFile {
pub id: Uuid,
pub filename: PathBuf,
pub modified: u64,
pub modified: SystemTime,
pub size: u64,
// https://w3c.github.io/FileAPI/#dfn-type
pub type_string: String,