mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-07-09 23:12:08 +08:00
c5d5c5d1f3
date: 2025-10-24T00:30:59 master commit: 405631baf9685e171a0dd19547cb763f1b163d18
52 lines
1.2 KiB
C++
52 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <ctime>
|
|
|
|
#ifdef __APPLE__
|
|
#define CLOCK_BOOTTIME CLOCK_MONOTONIC
|
|
#endif
|
|
|
|
static inline uint64_t nanos_since_boot() {
|
|
struct timespec t;
|
|
clock_gettime(CLOCK_BOOTTIME, &t);
|
|
return t.tv_sec * 1000000000ULL + t.tv_nsec;
|
|
}
|
|
|
|
static inline double millis_since_boot() {
|
|
struct timespec t;
|
|
clock_gettime(CLOCK_BOOTTIME, &t);
|
|
return t.tv_sec * 1000.0 + t.tv_nsec * 1e-6;
|
|
}
|
|
|
|
static inline double seconds_since_boot() {
|
|
struct timespec t;
|
|
clock_gettime(CLOCK_BOOTTIME, &t);
|
|
return (double)t.tv_sec + t.tv_nsec * 1e-9;
|
|
}
|
|
|
|
static inline uint64_t nanos_since_epoch() {
|
|
struct timespec t;
|
|
clock_gettime(CLOCK_REALTIME, &t);
|
|
return t.tv_sec * 1000000000ULL + t.tv_nsec;
|
|
}
|
|
|
|
static inline double seconds_since_epoch() {
|
|
struct timespec t;
|
|
clock_gettime(CLOCK_REALTIME, &t);
|
|
return (double)t.tv_sec + t.tv_nsec * 1e-9;
|
|
}
|
|
|
|
// you probably should use nanos_since_boot instead
|
|
static inline uint64_t nanos_monotonic() {
|
|
struct timespec t;
|
|
clock_gettime(CLOCK_MONOTONIC, &t);
|
|
return t.tv_sec * 1000000000ULL + t.tv_nsec;
|
|
}
|
|
|
|
static inline uint64_t nanos_monotonic_raw() {
|
|
struct timespec t;
|
|
clock_gettime(CLOCK_MONOTONIC_RAW, &t);
|
|
return t.tv_sec * 1000000000ULL + t.tv_nsec;
|
|
}
|