diff --git a/core/io/clock.rs b/core/io/clock.rs index d522ac278..06edc65e3 100644 --- a/core/io/clock.rs +++ b/core/io/clock.rs @@ -87,3 +87,15 @@ impl std::ops::Sub for Instant { pub trait Clock { fn now(&self) -> Instant; } + +pub struct DefaultClock; + +impl Clock for DefaultClock { + fn now(&self) -> Instant { + let now = chrono::Local::now(); + Instant { + secs: now.timestamp(), + micros: now.timestamp_subsec_micros(), + } + } +} diff --git a/core/io/generic.rs b/core/io/generic.rs index c75702ae7..b465a24cb 100644 --- a/core/io/generic.rs +++ b/core/io/generic.rs @@ -1,4 +1,6 @@ -use crate::{Clock, Completion, File, Instant, LimboError, OpenFlags, Result, IO}; +use crate::{ + io::clock::DefaultClock, Clock, Completion, File, Instant, LimboError, OpenFlags, Result, IO, +}; use parking_lot::RwLock; use std::io::{Read, Seek, Write}; use std::sync::Arc; @@ -44,11 +46,7 @@ impl IO for GenericIO { impl Clock for GenericIO { fn now(&self) -> Instant { - let now = chrono::Local::now(); - Instant { - secs: now.timestamp(), - micros: now.timestamp_subsec_micros(), - } + DefaultClock.now() } } diff --git a/core/io/io_uring.rs b/core/io/io_uring.rs index d9f79b874..c681649eb 100644 --- a/core/io/io_uring.rs +++ b/core/io/io_uring.rs @@ -1,7 +1,7 @@ #![allow(clippy::arc_with_non_send_sync)] use super::{common, Completion, CompletionInner, File, OpenFlags, IO}; -use crate::io::clock::{Clock, Instant}; +use crate::io::clock::{Clock, DefaultClock, Instant}; use crate::storage::wal::CKPT_BATCH_PAGES; use crate::{turso_assert, CompletionError, LimboError, Result}; use parking_lot::Mutex; @@ -697,11 +697,7 @@ impl IO for UringIO { impl Clock for UringIO { fn now(&self) -> Instant { - let now = chrono::Local::now(); - Instant { - secs: now.timestamp(), - micros: now.timestamp_subsec_micros(), - } + DefaultClock.now() } } diff --git a/core/io/memory.rs b/core/io/memory.rs index fc0549ca7..31c78a4b1 100644 --- a/core/io/memory.rs +++ b/core/io/memory.rs @@ -1,5 +1,5 @@ use super::{Buffer, Clock, Completion, File, OpenFlags, IO}; -use crate::Result; +use crate::{io::clock::DefaultClock, Result}; use crate::io::clock::Instant; use std::{ @@ -35,11 +35,7 @@ impl Default for MemoryIO { impl Clock for MemoryIO { fn now(&self) -> Instant { - let now = chrono::Local::now(); - Instant { - secs: now.timestamp(), - micros: now.timestamp_subsec_micros(), - } + DefaultClock.now() } } diff --git a/core/io/unix.rs b/core/io/unix.rs index bb17765f2..f95c9b95d 100644 --- a/core/io/unix.rs +++ b/core/io/unix.rs @@ -1,6 +1,6 @@ use super::{Completion, File, OpenFlags, IO}; use crate::error::LimboError; -use crate::io::clock::{Clock, Instant}; +use crate::io::clock::{Clock, DefaultClock, Instant}; use crate::io::common; use crate::Result; use parking_lot::Mutex; @@ -27,11 +27,7 @@ impl UnixIO { impl Clock for UnixIO { fn now(&self) -> Instant { - let now = chrono::Local::now(); - Instant { - secs: now.timestamp(), - micros: now.timestamp_subsec_micros(), - } + DefaultClock.now() } } diff --git a/core/io/vfs.rs b/core/io/vfs.rs index 52722a82e..b2ce62424 100644 --- a/core/io/vfs.rs +++ b/core/io/vfs.rs @@ -1,6 +1,6 @@ use super::{Buffer, Completion, File, OpenFlags, IO}; use crate::ext::VfsMod; -use crate::io::clock::{Clock, Instant}; +use crate::io::clock::{Clock, DefaultClock, Instant}; use crate::io::CompletionInner; use crate::{LimboError, Result}; use std::ffi::{c_void, CString}; @@ -10,11 +10,7 @@ use turso_ext::{BufferRef, IOCallback, SendPtr, VfsFileImpl, VfsImpl}; impl Clock for VfsMod { fn now(&self) -> Instant { - let now = chrono::Local::now(); - Instant { - secs: now.timestamp(), - micros: now.timestamp_subsec_micros(), - } + DefaultClock.now() } } diff --git a/core/io/windows.rs b/core/io/windows.rs index a884cc922..3431e5454 100644 --- a/core/io/windows.rs +++ b/core/io/windows.rs @@ -1,4 +1,6 @@ -use crate::{Clock, Completion, File, Instant, LimboError, OpenFlags, Result, IO}; +use crate::{ + io::clock::DefaultClock, Clock, Completion, File, Instant, LimboError, OpenFlags, Result, IO, +}; use parking_lot::RwLock; use std::io::{Read, Seek, Write}; use std::sync::Arc; @@ -44,11 +46,7 @@ impl IO for WindowsIO { impl Clock for WindowsIO { fn now(&self) -> Instant { - let now = chrono::Local::now(); - Instant { - secs: now.timestamp(), - micros: now.timestamp_subsec_micros(), - } + DefaultClock.now() } }