1use crate::timer::get_kernel_timer;
7
8pub fn current_time() -> u64 {
13 get_kernel_timer().get_time_us(0)
16}
17
18pub fn current_time_ms() -> u64 {
20 current_time() / 1000
21}
22
23pub fn current_time_s() -> u64 {
25 current_time() / 1_000_000
26}
27
28pub fn format_time_us(time_us: u64) -> (u64, u64, u64) {
30 let seconds = time_us / 1_000_000;
31 let minutes = seconds / 60;
32 let hours = minutes / 60;
33
34 (hours, minutes % 60, seconds % 60)
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test_case]
42 fn test_time_functions() {
43 let time1 = current_time();
44 let time2 = current_time();
45
46 assert!(time2 >= time1);
48
49 let time_ms = current_time_ms();
51 let time_s = current_time_s();
52
53 assert!(time_ms <= time1 / 1000 + 1); assert!(time_s <= time1 / 1_000_000 + 1);
55 }
56
57 #[test_case]
58 fn test_format_time() {
59 let (hours, minutes, seconds) = format_time_us(3_661_000_000); assert_eq!(hours, 1);
61 assert_eq!(minutes, 1);
62 assert_eq!(seconds, 1);
63
64 let (hours, minutes, seconds) = format_time_us(123_000_000); assert_eq!(hours, 0);
66 assert_eq!(minutes, 2);
67 assert_eq!(seconds, 3);
68 }
69}