36 lines
1.1 KiB
C
36 lines
1.1 KiB
C
// Released under the MIT License.
|
|
// Copyright, 2025, by Samuel Williams.
|
|
|
|
#include "time.h"
|
|
|
|
void IO_Event_Time_elapsed(const struct timespec* start, const struct timespec* stop, struct timespec *duration)
|
|
{
|
|
if ((stop->tv_nsec - start->tv_nsec) < 0) {
|
|
duration->tv_sec = stop->tv_sec - start->tv_sec - 1;
|
|
duration->tv_nsec = stop->tv_nsec - start->tv_nsec + 1000000000;
|
|
} else {
|
|
duration->tv_sec = stop->tv_sec - start->tv_sec;
|
|
duration->tv_nsec = stop->tv_nsec - start->tv_nsec;
|
|
}
|
|
}
|
|
|
|
float IO_Event_Time_duration(const struct timespec *duration)
|
|
{
|
|
return duration->tv_sec + duration->tv_nsec / 1000000000.0;
|
|
}
|
|
|
|
void IO_Event_Time_current(struct timespec *time) {
|
|
clock_gettime(CLOCK_MONOTONIC, time);
|
|
}
|
|
|
|
float IO_Event_Time_proportion(const struct timespec *duration, const struct timespec *total_duration) {
|
|
return IO_Event_Time_duration(duration) / IO_Event_Time_duration(total_duration);
|
|
}
|
|
|
|
float IO_Event_Time_delta(const struct timespec *start, const struct timespec *stop) {
|
|
struct timespec duration;
|
|
IO_Event_Time_elapsed(start, stop, &duration);
|
|
|
|
return IO_Event_Time_duration(&duration);
|
|
}
|