Skip to content

Commit 50e5997

Browse files
[stdlib] Port SE-0329 Clock APIs to WASI
WASI doesn't have "suspending-time" concept, so use `CLOCK_MONOTONIC` for both "continuous" and "suspending" clocks. WASI's "monotonic" doesn't guarantee any underlying system call implementation, but most of major implementations use `CLOCK_MONOTONIC` for all underlying platforms. This partially buildfixes this platform. See also: https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md#variant-cases
1 parent 0c2f307 commit 50e5997

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

stdlib/public/Concurrency/Clock.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void swift_get_time(
4242
clock_gettime(CLOCK_MONOTONIC_RAW, &continuous);
4343
*seconds = continuous.tv_sec;
4444
*nanoseconds = continuous.tv_nsec;
45-
#elif defined(__OpenBSD__) && HAS_TIME
45+
#elif (defined(__OpenBSD__) || defined(__wasi__)) && HAS_TIME
4646
struct timespec continuous;
4747
clock_gettime(CLOCK_MONOTONIC, &continuous);
4848
*seconds = continuous.tv_sec;
@@ -76,6 +76,11 @@ void swift_get_time(
7676
clock_gettime(CLOCK_UPTIME_RAW, &suspending);
7777
*seconds = suspending.tv_sec;
7878
*nanoseconds = suspending.tv_nsec;
79+
#elif defined(__wasi__) && HAS_TIME
80+
struct timespec suspending;
81+
clock_gettime(CLOCK_MONOTONIC, &suspending);
82+
*seconds = suspending.tv_sec;
83+
*nanoseconds = suspending.tv_nsec;
7984
#elif defined(__OpenBSD__) && HAS_TIME
8085
struct timespec suspending;
8186
clock_gettime(CLOCK_UPTIME, &suspending);
@@ -121,7 +126,7 @@ switch (clock_id) {
121126
clock_getres(CLOCK_MONOTONIC_RAW, &continuous);
122127
*seconds = continuous.tv_sec;
123128
*nanoseconds = continuous.tv_nsec;
124-
#elif defined(__OpenBSD__) && HAS_TIME
129+
#elif (defined(__OpenBSD__) || defined(__wasi__)) && HAS_TIME
125130
struct timespec continuous;
126131
clock_getres(CLOCK_MONOTONIC, &continuous);
127132
*seconds = continuous.tv_sec;
@@ -144,6 +149,10 @@ switch (clock_id) {
144149
clock_getres(CLOCK_UPTIME_RAW, &suspending);
145150
*seconds = suspending.tv_sec;
146151
*nanoseconds = suspending.tv_nsec;
152+
#elif defined(__wasi__) && HAS_TIME
153+
clock_getres(CLOCK_MONOTONIC, &suspending);
154+
*seconds = suspending.tv_sec;
155+
*nanoseconds = suspending.tv_nsec;
147156
#elif defined(__OpenBSD__) && HAS_TIME
148157
clock_getres(CLOCK_UPTIME, &suspending);
149158
*seconds = suspending.tv_sec;

0 commit comments

Comments
 (0)