From d395ed2d403aa0ff57c493052e3675de23292424 Mon Sep 17 00:00:00 2001 From: Shritesh Bhattarai Date: Tue, 30 Apr 2019 20:43:43 -0500 Subject: [PATCH] wasi: implement timestamp --- std/os/time.zig | 13 +++++++++++++ std/os/wasi/core.zig | 8 ++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/std/os/time.zig b/std/os/time.zig index 66ceedb1b6..d742c5d03b 100644 --- a/std/os/time.zig +++ b/std/os/time.zig @@ -7,6 +7,7 @@ const testing = std.testing; const windows = std.os.windows; const linux = std.os.linux; const darwin = std.os.darwin; +const wasi = std.os.wasi; const posix = std.os.posix; pub const epoch = @import("epoch.zig"); @@ -64,9 +65,21 @@ pub const milliTimestamp = switch (builtin.os) { Os.windows => milliTimestampWindows, Os.linux, Os.freebsd, Os.netbsd => milliTimestampPosix, Os.macosx, Os.ios => milliTimestampDarwin, + Os.wasi => milliTimestampWasi, else => @compileError("Unsupported OS"), }; +fn milliTimestampWasi() u64 { + var ns: wasi.timestamp_t = undefined; + + // TODO: Verify that precision is ignored + const err = wasi.clock_time_get(wasi.CLOCK_REALTIME, 1, &ns); + debug.assert(err == wasi.ESUCCESS); + + const ns_per_ms = 1000; + return @divFloor(ns, ns_per_ms); +} + fn milliTimestampWindows() u64 { //FileTime has a granularity of 100 nanoseconds // and uses the NTFS/Windows epoch diff --git a/std/os/wasi/core.zig b/std/os/wasi/core.zig index 77fd831f81..23a0c7ba65 100644 --- a/std/os/wasi/core.zig +++ b/std/os/wasi/core.zig @@ -10,10 +10,10 @@ pub const ciovec_t = extern struct { buf_len: usize, }; -pub const CLOCK_REALTIME = 0; -pub const CLOCK_MONOTONIC = 1; -pub const CLOCK_PROCESS_CPUTIME_ID = 2; -pub const CLOCK_THREAD_CPUTIME_ID = 3; +pub const CLOCK_REALTIME: clockid_t = 0; +pub const CLOCK_MONOTONIC: clockid_t = 1; +pub const CLOCK_PROCESS_CPUTIME_ID: clockid_t = 2; +pub const CLOCK_THREAD_CPUTIME_ID: clockid_t = 3; pub const SIGABRT: signal_t = 6;