58 lines
1.1 KiB
V
58 lines
1.1 KiB
V
// Copyright (c) 2019-2020 Alexander Medvednikov. All rights reserved.
|
|
// Use of this source code is governed by an MIT license
|
|
// that can be found in the LICENSE file.
|
|
module time
|
|
|
|
struct C.tm {
|
|
tm_year int
|
|
tm_mon int
|
|
tm_mday int
|
|
tm_hour int
|
|
tm_min int
|
|
tm_sec int
|
|
}
|
|
|
|
|
|
const (
|
|
// start_time is needed on Darwin and Windows because of potential overflows
|
|
start_time = init_win_time_start()
|
|
freq_time = init_win_time_freq()
|
|
)
|
|
|
|
fn C._mkgmtime(&C.tm) time_t
|
|
|
|
fn C.QueryPerformanceCounter(&u64) C.BOOL
|
|
|
|
fn C.QueryPerformanceFrequency(&u64) C.BOOL
|
|
|
|
fn make_unix_time(t C.tm) int {
|
|
return int(C._mkgmtime(&t))
|
|
}
|
|
|
|
fn init_win_time_freq() u64 {
|
|
f := u64(0)
|
|
C.QueryPerformanceFrequency(&f)
|
|
return f
|
|
}
|
|
|
|
fn init_win_time_start() u64 {
|
|
s := u64(0)
|
|
C.QueryPerformanceCounter(&s)
|
|
return s
|
|
}
|
|
|
|
pub fn sys_mono_now() u64 {
|
|
tm := u64(0)
|
|
C.QueryPerformanceCounter(&tm) // XP or later never fail
|
|
return (tm - start_time) * 1_000_000_000 / freq_time
|
|
}
|
|
|
|
// NB: vpc_now is used by `v -profile` .
|
|
// It should NOT call *any other v function*, just C functions and casts.
|
|
[inline]
|
|
fn vpc_now() u64 {
|
|
tm := u64(0)
|
|
C.QueryPerformanceCounter(&tm)
|
|
return tm
|
|
}
|