mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-13 06:15:33 +00:00
add realtime and monotonic clock support for wasi on windows
This commit is contained in:
parent
f3220a0435
commit
08b4b639f4
@ -19,6 +19,7 @@ log = "0.4.6"
|
||||
byteorder = "1.3.1"
|
||||
# hack to get tests to work
|
||||
wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.4.2", optional = true }
|
||||
winapi = { version = "0.3.7", optional = true }
|
||||
|
||||
[build-dependencies]
|
||||
glob = "0.2.11"
|
||||
|
@ -5,7 +5,21 @@ pub fn platform_clock_res_get(
|
||||
clock_id: __wasi_clockid_t,
|
||||
resolution: &Cell<__wasi_timestamp_t>,
|
||||
) -> __wasi_errno_t {
|
||||
__WASI_EINVAL
|
||||
let resolution = match clock_id {
|
||||
// resolution of monotonic clock at 10ms, from:
|
||||
// https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-gettickcount64
|
||||
__WASI_CLOCK_MONOTONIC => 10_000_000,
|
||||
// TODO: verify or compute this
|
||||
__WASI_CLOCK_REALTIME => 1,
|
||||
__WASI_CLOCK_PROCESS_CPUTIME_ID => {
|
||||
return __WASI_EINVAL;
|
||||
}
|
||||
__WASI_CLOCK_THREAD_CPUTIME_ID => {
|
||||
return __WASI_EINVAL;
|
||||
}
|
||||
};
|
||||
resolution.set(resolution);
|
||||
__WASI_ESUCCESS
|
||||
}
|
||||
|
||||
pub fn platform_clock_time_get(
|
||||
@ -13,5 +27,24 @@ pub fn platform_clock_time_get(
|
||||
precision: __wasi_timestamp_t,
|
||||
time: &Cell<__wasi_timestamp_t>,
|
||||
) -> __wasi_errno_t {
|
||||
unimplemented!()
|
||||
let nanos = match clock_id {
|
||||
__WASI_CLOCK_MONOTONIC => {
|
||||
let tick_ms = winapi::um::sysinfoapi::GetTickCount64();
|
||||
tick_ms * 1_000_000
|
||||
}
|
||||
__WASI_CLOCK_REALTIME => {
|
||||
let duration = wasi_try!(std::time::SystemTime::now()
|
||||
.duration_since(std::time::UNIX_EPOCH)
|
||||
.ok_or(__WASI_EIO));
|
||||
duration.as_nanos() as u64
|
||||
}
|
||||
__WASI_CLOCK_PROCESS_CPUTIME_ID => {
|
||||
unimplemented!("wasi::platform_clock_time_get(__WASI_CLOCK_PROCESS_CPUTIME_ID, ..)")
|
||||
}
|
||||
__WASI_CLOCK_THREAD_CPUTIME_ID => {
|
||||
unimplemented!("wasi::platform_clock_time_get(__WASI_CLOCK_THREAD_CPUTIME_ID, ..)")
|
||||
}
|
||||
};
|
||||
time.set(nanos);
|
||||
__WASI_ESUCCESS
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user