From 257e85dbc28f1fddc0c3d11981815b56cb01d0e0 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Fri, 21 Feb 2020 12:32:16 -0500 Subject: [PATCH] remove CPU time clocks These clocks were removed from WASI in snapshot2. Refs: https://github.com/cjihrig/uvwasi/issues/59 --- README.md | 9 --- include/wasi_types.h | 2 - src/clocks.c | 178 ------------------------------------------- src/clocks.h | 5 -- src/uvwasi.c | 8 -- 5 files changed, 202 deletions(-) diff --git a/README.md b/README.md index 0b2889d..91409f5 100644 --- a/README.md +++ b/README.md @@ -1307,20 +1307,11 @@ Possible values: The epoch of this clock is undefined. The absolute time value of this clock therefore has no meaning. -- **`UVWASI_CLOCK_PROCESS_CPUTIME_ID`** - - The CPU-time clock associated with the current - process. - - **`UVWASI_CLOCK_REALTIME`** The clock measuring real time. Time value zero corresponds with 1970-01-01T00:00:00Z. -- **`UVWASI_CLOCK_THREAD_CPUTIME_ID`** - - The CPU-time clock associated with the current thread. - ### `uvwasi_device_t` (`uint64_t`) Identifier for a device containing a file system. Can be used diff --git a/include/wasi_types.h b/include/wasi_types.h index 6f83a6c..e6306c5 100644 --- a/include/wasi_types.h +++ b/include/wasi_types.h @@ -22,8 +22,6 @@ typedef struct uvwasi_ciovec_s { typedef uint32_t uvwasi_clockid_t; #define UVWASI_CLOCK_REALTIME 0 #define UVWASI_CLOCK_MONOTONIC 1 -#define UVWASI_CLOCK_PROCESS_CPUTIME_ID 2 -#define UVWASI_CLOCK_THREAD_CPUTIME_ID 3 typedef uint64_t uvwasi_device_t; diff --git a/src/clocks.c b/src/clocks.c index b59cbd6..66e8798 100644 --- a/src/clocks.c +++ b/src/clocks.c @@ -1,127 +1,9 @@ -#ifndef _WIN32 -# include -# include -# include -# include -#endif /* _WIN32 */ - #include "uv.h" #include "clocks.h" #include "wasi_types.h" #include "uv_mapping.h" -#define UVWASI__WIN_TIME_AND_RETURN(handle, time) \ - do { \ - FILETIME create; \ - FILETIME exit; \ - FILETIME system; \ - FILETIME user; \ - SYSTEMTIME sys_system; \ - SYSTEMTIME sys_user; \ - if (0 == GetProcessTimes((handle), &create, &exit, &system, &user)) { \ - return uvwasi__translate_uv_error( \ - uv_translate_sys_error(GetLastError()) \ - ); \ - } \ - \ - if (0 == FileTimeToSystemTime(&system, &sys_system)) { \ - return uvwasi__translate_uv_error( \ - uv_translate_sys_error(GetLastError()) \ - ); \ - } \ - \ - if (0 == FileTimeToSystemTime(&user, &sys_user)) { \ - return uvwasi__translate_uv_error( \ - uv_translate_sys_error(GetLastError()) \ - ); \ - } \ - \ - (time) = (((sys_system.wHour * 3600) + (sys_system.wMinute * 60) + \ - sys_system.wSecond) * NANOS_PER_SEC) + \ - (sys_system.wMilliseconds * 1000000) + \ - (((sys_user.wHour * 3600) + (sys_user.wMinute * 60) + \ - sys_user.wSecond) * NANOS_PER_SEC) + \ - (sys_user.wMilliseconds * 1000000); \ - return UVWASI_ESUCCESS; \ - } while (0) - - -#define UVWASI__CLOCK_GETTIME_AND_RETURN(clk, time) \ - do { \ - struct timespec ts; \ - if (0 != clock_gettime((clk), &ts)) \ - return uvwasi__translate_uv_error(uv_translate_sys_error(errno)); \ - (time) = (ts.tv_sec * NANOS_PER_SEC) + ts.tv_nsec; \ - return UVWASI_ESUCCESS; \ - } while (0) - - -#define UVWASI__GETRUSAGE_AND_RETURN(who, time) \ - do { \ - struct rusage ru; \ - if (0 != getrusage((who), &ru)) \ - return uvwasi__translate_uv_error(uv_translate_sys_error(errno)); \ - (time) = (ru.ru_utime.tv_sec * NANOS_PER_SEC) + \ - (ru.ru_utime.tv_usec * 1000) + \ - (ru.ru_stime.tv_sec * NANOS_PER_SEC) + \ - (ru.ru_stime.tv_usec * 1000); \ - return UVWASI_ESUCCESS; \ - } while (0) - - -#define UVWASI__OSX_THREADTIME_AND_RETURN(time) \ - do { \ - mach_port_t thread; \ - thread_basic_info_data_t info; \ - mach_msg_type_number_t count; \ - count = THREAD_BASIC_INFO_COUNT; \ - thread = pthread_mach_thread_np(pthread_self()); \ - if (KERN_SUCCESS != thread_info(thread, \ - THREAD_BASIC_INFO, \ - (thread_info_t) &info, \ - &count)) { \ - return UVWASI_ENOSYS; \ - } \ - (time) = (info.user_time.seconds * NANOS_PER_SEC) + \ - (info.user_time.microseconds * 1000) + \ - (info.system_time.seconds * NANOS_PER_SEC) + \ - (info.system_time.microseconds * 1000); \ - return UVWASI_ESUCCESS; \ - } while (0) - - -#define UVWASI__WIN_GETRES_AND_RETURN(time) \ - do { \ - /* The GetProcessTimes() docs claim a resolution of 100 ns. */ \ - (time) = 100; \ - return UVWASI_ESUCCESS; \ - } while (0) - - -#define UVWASI__CLOCK_GETRES_AND_RETURN(clk, time) \ - do { \ - struct timespec ts; \ - /* Try calling clock_getres(). If it doesn't succeed, then default to \ - 1000000. We implement all of the clocks, and some platforms (such as \ - SmartOS) don't support all of the clocks, even though they define \ - the constants for them. */ \ - if (0 != clock_getres((clk), &ts)) \ - (time) = 1000000; \ - else \ - (time) = (ts.tv_sec * NANOS_PER_SEC) + ts.tv_nsec; \ - return UVWASI_ESUCCESS; \ - } while (0) - - -#define UVWASI__SLOW_GETRES_AND_RETURN(time) \ - do { \ - /* Assume a "worst case" of 1000000 ns resolution. */ \ - (time) = 1000000; \ - return UVWASI_ESUCCESS; \ - } while (0) - - uvwasi_errno_t uvwasi__clock_gettime_realtime(uvwasi_timestamp_t* time) { uv_timeval64_t tv; int r; @@ -133,63 +15,3 @@ uvwasi_errno_t uvwasi__clock_gettime_realtime(uvwasi_timestamp_t* time) { *time = (tv.tv_sec * NANOS_PER_SEC) + (tv.tv_usec * 1000); return UVWASI_ESUCCESS; } - - -uvwasi_errno_t uvwasi__clock_gettime_process_cputime(uvwasi_timestamp_t* time) { -#if defined(_WIN32) - UVWASI__WIN_TIME_AND_RETURN(GetCurrentProcess(), *time); -#elif defined(CLOCK_PROCESS_CPUTIME_ID) && \ - !defined(__APPLE__) && \ - !defined(__sun) - UVWASI__CLOCK_GETTIME_AND_RETURN(CLOCK_PROCESS_CPUTIME_ID, *time); -#else - UVWASI__GETRUSAGE_AND_RETURN(RUSAGE_SELF, *time); -#endif -} - - -uvwasi_errno_t uvwasi__clock_gettime_thread_cputime(uvwasi_timestamp_t* time) { -#if defined(_WIN32) - UVWASI__WIN_TIME_AND_RETURN(GetCurrentThread(), *time); -#elif defined(__APPLE__) - UVWASI__OSX_THREADTIME_AND_RETURN(*time); -#elif defined(CLOCK_THREAD_CPUTIME_ID) && !defined(__sun) && !defined(__PASE__) - UVWASI__CLOCK_GETTIME_AND_RETURN(CLOCK_THREAD_CPUTIME_ID, *time); -#else -# if defined(RUSAGE_LWP) - UVWASI__GETRUSAGE_AND_RETURN(RUSAGE_LWP, *time); -# elif defined(RUSAGE_THREAD) - UVWASI__GETRUSAGE_AND_RETURN(RUSAGE_THREAD, *time); -# else - return UVWASI_ENOSYS; -# endif /* RUSAGE_LWP */ -#endif -} - - -uvwasi_errno_t uvwasi__clock_getres_process_cputime(uvwasi_timestamp_t* time) { -#if defined(_WIN32) - UVWASI__WIN_GETRES_AND_RETURN(*time); -#elif defined(CLOCK_PROCESS_CPUTIME_ID) && \ - !defined(__APPLE__) && \ - !defined(__sun) - UVWASI__CLOCK_GETRES_AND_RETURN(CLOCK_PROCESS_CPUTIME_ID, *time); -#else - UVWASI__SLOW_GETRES_AND_RETURN(*time); -#endif -} - - -uvwasi_errno_t uvwasi__clock_getres_thread_cputime(uvwasi_timestamp_t* time) { -#if defined(_WIN32) - UVWASI__WIN_GETRES_AND_RETURN(*time); -#elif defined(__APPLE__) - UVWASI__SLOW_GETRES_AND_RETURN(*time); -#elif defined(CLOCK_THREAD_CPUTIME_ID) && !defined(__sun) && !defined(__PASE__) - UVWASI__CLOCK_GETTIME_AND_RETURN(CLOCK_THREAD_CPUTIME_ID, *time); -#elif defined(RUSAGE_THREAD) || defined(RUSAGE_LWP) - UVWASI__SLOW_GETRES_AND_RETURN(*time); -#else - return UVWASI_ENOSYS; -#endif -} diff --git a/src/clocks.h b/src/clocks.h index 7437d03..e8ab897 100644 --- a/src/clocks.h +++ b/src/clocks.h @@ -4,10 +4,5 @@ #include "wasi_types.h" uvwasi_errno_t uvwasi__clock_gettime_realtime(uvwasi_timestamp_t* time); -uvwasi_errno_t uvwasi__clock_gettime_process_cputime(uvwasi_timestamp_t* time); -uvwasi_errno_t uvwasi__clock_gettime_thread_cputime(uvwasi_timestamp_t* time); - -uvwasi_errno_t uvwasi__clock_getres_process_cputime(uvwasi_timestamp_t* time); -uvwasi_errno_t uvwasi__clock_getres_thread_cputime(uvwasi_timestamp_t* time); #endif /* __UVWASI_CLOCKS_H__ */ diff --git a/src/uvwasi.c b/src/uvwasi.c index d3d1512..4f9eaa1 100644 --- a/src/uvwasi.c +++ b/src/uvwasi.c @@ -698,10 +698,6 @@ uvwasi_errno_t uvwasi_clock_res_get(uvwasi_t* uvwasi, case UVWASI_CLOCK_REALTIME: *resolution = 1; /* Nanosecond precision. */ return UVWASI_ESUCCESS; - case UVWASI_CLOCK_PROCESS_CPUTIME_ID: - return uvwasi__clock_getres_process_cputime(resolution); - case UVWASI_CLOCK_THREAD_CPUTIME_ID: - return uvwasi__clock_getres_thread_cputime(resolution); default: return UVWASI_EINVAL; } @@ -721,10 +717,6 @@ uvwasi_errno_t uvwasi_clock_time_get(uvwasi_t* uvwasi, return UVWASI_ESUCCESS; case UVWASI_CLOCK_REALTIME: return uvwasi__clock_gettime_realtime(time); - case UVWASI_CLOCK_PROCESS_CPUTIME_ID: - return uvwasi__clock_gettime_process_cputime(time); - case UVWASI_CLOCK_THREAD_CPUTIME_ID: - return uvwasi__clock_gettime_thread_cputime(time); default: return UVWASI_EINVAL; }