mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 23:25:34 +02:00
MDEV-23175: my_timer_milliseconds clock_gettime for multiple platfomrs
Small postfix to MDEV-23175 to ensure faster option on FreeBSD
and compatibility to Solaris that isn't high resolution.
ftime is left as a backup in case an implementation doesn't
contain any of these clocks.
FreeBSD
$ ./unittest/mysys/my_rdtsc-t
1..11
# ----- Routine ---------------
# myt.cycles.routine : 5
# myt.nanoseconds.routine : 11
# myt.microseconds.routine : 13
# myt.milliseconds.routine : 11
# myt.ticks.routine : 17
# ----- Frequency -------------
# myt.cycles.frequency : 3610295566
# myt.nanoseconds.frequency : 1000000000
# myt.microseconds.frequency : 1000000
# myt.milliseconds.frequency : 899
# myt.ticks.frequency : 136
# ----- Resolution ------------
# myt.cycles.resolution : 1
# myt.nanoseconds.resolution : 1
# myt.microseconds.resolution : 1
# myt.milliseconds.resolution : 7
# myt.ticks.resolution : 1
# ----- Overhead --------------
# myt.cycles.overhead : 26
# myt.nanoseconds.overhead : 19140
# myt.microseconds.overhead : 19036
# myt.milliseconds.overhead : 578
# myt.ticks.overhead : 21544
ok 1 - my_timer_init() did not crash
ok 2 - The cycle timer is strictly increasing
ok 3 - The cycle timer is implemented
ok 4 - The nanosecond timer is increasing
ok 5 - The nanosecond timer is implemented
ok 6 - The microsecond timer is increasing
ok 7 - The microsecond timer is implemented
ok 8 - The millisecond timer is increasing
ok 9 - The millisecond timer is implemented
ok 10 - The tick timer is increasing
ok 11 - The tick timer is implemented
This commit is contained in:
parent
85defc4764
commit
12087d6757
1 changed files with 24 additions and 2 deletions
|
|
@ -356,9 +356,29 @@ ulonglong my_timer_microseconds(void)
|
|||
milliseconds.
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CLOCK_GETTIME)
|
||||
#if defined(CLOCK_MONOTONIC_FAST)
|
||||
/* FreeBSD */
|
||||
#define MY_CLOCK_ID CLOCK_MONOTONIC_FAST
|
||||
#elif defined(CLOCK_MONOTONIC_COARSE)
|
||||
/* Linux */
|
||||
#define MY_CLOCK_ID CLOCK_MONOTONIC_COARSE
|
||||
#elif defined(CLOCK_MONOTONIC)
|
||||
/* POSIX (includes OSX) */
|
||||
#define MY_CLOCK_ID CLOCK_MONOTONIC
|
||||
#elif defined(CLOCK_REALTIME)
|
||||
/* Solaris (which doesn't seem to have MONOTONIC) */
|
||||
#define MY_CLOCK_ID CLOCK_REALTIME
|
||||
#endif
|
||||
#endif
|
||||
|
||||
ulonglong my_timer_milliseconds(void)
|
||||
{
|
||||
#if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
|
||||
#if defined(MY_CLOCK_ID)
|
||||
struct timespec tp;
|
||||
clock_gettime(MY_CLOCK_ID, &tp);
|
||||
return (ulonglong)tp.tv_sec * 1000 + (ulonglong)tp.tv_nsec / 1000000;
|
||||
#elif defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
|
||||
/* ftime() is obsolete but maybe the platform is old */
|
||||
struct timeb ft;
|
||||
ftime(&ft);
|
||||
|
|
@ -631,7 +651,9 @@ void my_timer_init(MY_TIMER_INFO *mti)
|
|||
|
||||
/* milliseconds */
|
||||
mti->milliseconds.frequency= 1000; /* initial assumption */
|
||||
#if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
|
||||
#ifdef MY_CLOCK_ID
|
||||
mti->milliseconds.routine= MY_TIMER_ROUTINE_CLOCK_GETTIME;
|
||||
#elif defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
|
||||
mti->milliseconds.routine= MY_TIMER_ROUTINE_FTIME;
|
||||
#elif defined(_WIN32)
|
||||
mti->milliseconds.routine= MY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue