mirror of
https://git.proxmox.com/git/wasi-libc
synced 2025-08-25 04:15:45 +00:00

Upcoming WASI snapshots omit the `PROCESS_CPUTIME` clock, since WASI has no inherent concept of processes, and since implementations which don't use a process for each instance don't have a way to implement it efficiently. However, `clock`, `times`, and `getrusage` are useful functions, so provide optional emulated version of them, using the `MONOTONIC` clock. This means these implementations will measure not just the program's own CPU time, but also time spent suspended while other programs are running. Due to this difference in behavior, put these implementations behind a flag. Users must pass `-D_WASI_EMULATED_PROCESS_CLOCK` and link with `-lwasi-emulated-process-clocks` to enable them.
35 lines
741 B
C
35 lines
741 B
C
#ifndef _WASI_EMULATED_PROCESS_CLOCKS
|
|
#error WASI lacks process-associated clocks; to enable emulation of the `times` function using \
|
|
the wall clock, which isn't sensitive to whether the program is running or suspended, \
|
|
compile with -D_WASI_EMULATED_PROCESS_CLOCKS and link with -lwasi-emulated-process-clocks
|
|
#else
|
|
#ifndef _SYS_TIMES_H
|
|
#define _SYS_TIMES_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define __NEED_clock_t
|
|
#include <bits/alltypes.h>
|
|
|
|
#ifdef __wasilibc_unmodified_upstream /* Use alternate WASI libc headers */
|
|
struct tms {
|
|
clock_t tms_utime;
|
|
clock_t tms_stime;
|
|
clock_t tms_cutime;
|
|
clock_t tms_cstime;
|
|
};
|
|
#else
|
|
#include <__struct_tms.h>
|
|
#endif
|
|
|
|
clock_t times (struct tms *);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
#endif
|