<pre style='margin:0'>
Chris Jones (cjones051073) pushed a commit to branch master
in repository macports-legacy-support.
</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/88852aa8928004f1b02e40d80d924ccf8fc31195">https://github.com/macports/macports-legacy-support/commit/88852aa8928004f1b02e40d80d924ccf8fc31195</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 88852aa Add support for CLOCK_MONOTONIC_RAW to clock_gettime
</span>88852aa is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 88852aa8928004f1b02e40d80d924ccf8fc31195
</span>Author: Chris Jones <cjones051073@icloud.com>
AuthorDate: Sun Mar 26 17:26:01 2023 +0100
<span style='display:block; white-space:pre;color:#404040;'> Add support for CLOCK_MONOTONIC_RAW to clock_gettime
</span>---
include/time.h | 7 ++++---
src/time.c | 51 +++++++++++++++++++++++----------------------------
test/test_time.cpp | 31 ++++++++++++++++++++-----------
3 files changed, 47 insertions(+), 42 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/time.h b/include/time.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 5ea5974..d042e24 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/time.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/time.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,10 +44,11 @@ __MP__END_DECLS
</span> #if __MP_LEGACY_SUPPORT_GETTIME__
/* One define types and methods if not already defined. */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !defined(CLOCK_REALTIME) && !defined(CLOCK_MONOTONIC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !defined(CLOCK_REALTIME) && !defined(CLOCK_MONOTONIC) && !defined(CLOCK_MONOTONIC_RAW)
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#define CLOCK_REALTIME 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define CLOCK_MONOTONIC 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_REALTIME 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_MONOTONIC 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define CLOCK_MONOTONIC_RAW 4
</span> typedef int clockid_t;
__MP__BEGIN_DECLS
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/time.c b/src/time.c
</span><span style='display:block; white-space:pre;color:#808080;'>index bda2743..fd1dcf9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/time.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/time.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -22,6 +22,10 @@
</span> #include <sys/time.h>
#include <mach/mach_time.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#define BILLION 1000000000L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define MILLION 1000000L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define THOUSAND 1000L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> int clock_gettime( clockid_t clk_id, struct timespec *ts )
{
int ret = -1;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -34,21 +38,24 @@ int clock_gettime( clockid_t clk_id, struct timespec *ts )
</span> ts->tv_sec = tv.tv_sec;
ts->tv_nsec = tv.tv_usec * 1000;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- else if ( CLOCK_MONOTONIC == clk_id )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else if ( CLOCK_MONOTONIC == clk_id || CLOCK_MONOTONIC_RAW == clk_id )
</span> {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- const uint64_t t = mach_absolute_time();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uint64_t clock = mach_absolute_time();
</span> mach_timebase_info_data_t timebase;
mach_timebase_info(&timebase);
<span style='display:block; white-space:pre;background:#ffe0e0;'>- const uint64_t tdiff = t * timebase.numer / timebase.denom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ts->tv_sec = tdiff / 1000000000;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ts->tv_nsec = tdiff % 1000000000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint64_t tdiff = clock * timebase.numer / timebase.denom;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ( CLOCK_MONOTONIC == clk_id ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tdiff = THOUSAND * ( tdiff / THOUSAND );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts->tv_sec = tdiff / BILLION;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts->tv_nsec = tdiff % BILLION;
</span> ret = 0;
}
}
return ret;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int clock_getres ( clockid_t clk_id, struct timespec *ts )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int clock_getres( clockid_t clk_id, struct timespec *ts )
</span> {
int ret = -1;
if ( ts )
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -58,32 +65,20 @@ int clock_getres ( clockid_t clk_id, struct timespec *ts )
</span> {
// return 1us precision
ts->tv_sec = 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ts->tv_nsec = 1000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts->tv_nsec = THOUSAND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ret = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else if ( CLOCK_MONOTONIC_RAW == clk_id )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // return 1ns precision
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts->tv_sec = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ts->tv_nsec = 1;
</span> ret = 0;
}
}
return ret;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <mach/clock.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <mach/mach.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int clock_gettime( int clk_id, struct timespec *ts )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- clock_serv_t cclock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mach_timespec_t mts;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- host_get_clock_service( mach_host_self(), clk_id, &cclock );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const int ret = clock_get_time( cclock, &mts );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mach_port_deallocate( mach_task_self(), cclock );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ( ts )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ts->tv_sec = mts.tv_sec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ts->tv_nsec = mts.tv_nsec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> #endif
#if __MP_LEGACY_SUPPORT_TIMESPEC_GET__
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -92,9 +87,9 @@ int timespec_get(struct timespec *ts, int base)
</span> {
switch (base) {
case TIME_UTC:
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (clock_gettime(CLOCK_REALTIME, ts) == -1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (clock_gettime(CLOCK_REALTIME, ts) == -1) {
</span> return 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> return base;
default:
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_time.cpp b/test/test_time.cpp
</span><span style='display:block; white-space:pre;color:#808080;'>index 83b2186..5019f25 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_time.cpp
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_time.cpp
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -28,20 +28,29 @@ inline void res( CLOCKID clk_id )
</span>
int main()
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int c(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- res(CLOCK_REALTIME);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while ( ++c < 10 )
</span> {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- std::cout << "CLOCK_REALTIME " << time(CLOCK_REALTIME) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int c =0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ res(CLOCK_REALTIME);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ( ++c < 10 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::cout << "CLOCK_REALTIME ("<< CLOCK_REALTIME << ") " << time(CLOCK_REALTIME) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- c = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- res(CLOCK_MONOTONIC);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while ( ++c < 10 )
</span> {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- std::cout << "CLOCK_MONOTONIC " << time(CLOCK_MONOTONIC) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int c = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ res(CLOCK_MONOTONIC);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ( ++c < 10 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::cout << "CLOCK_MONOTONIC ("<< CLOCK_MONOTONIC << ") " << time(CLOCK_MONOTONIC) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int c = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ res(CLOCK_MONOTONIC_RAW);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ( ++c < 10 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::cout << "CLOCK_MONOTONIC_RAW ("<< CLOCK_MONOTONIC_RAW << ") " << time(CLOCK_MONOTONIC_RAW) << std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> return 0;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span></pre><pre style='margin:0'>
</pre>