From 39bfc48ea7f768979b7676758f1392cad587c187 Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Mon, 31 Jan 2022 19:02:03 +0100 Subject: [PATCH] AK: Add Time::from_ticks() This helper allows Time to be constructed from a tick count and a ticks per second value. --- AK/Time.cpp | 9 +++++++++ AK/Time.h | 1 + 2 files changed, 10 insertions(+) diff --git a/AK/Time.cpp b/AK/Time.cpp index e09df2451c7..825002ed30b 100644 --- a/AK/Time.cpp +++ b/AK/Time.cpp @@ -38,6 +38,15 @@ unsigned day_of_week(int year, unsigned month, int day) return (year + year / 4 - year / 100 + year / 400 + seek_table[month - 1] + day) % 7; } +Time Time::from_ticks(clock_t ticks, time_t ticks_per_second) +{ + auto secs = ticks % ticks_per_second; + + i32 nsecs = 1'000'000'000 * (ticks - (ticks_per_second * secs)) / ticks_per_second; + i32 extra_secs = sane_mod(nsecs, 1'000'000'000); + return Time::from_half_sanitized(secs, extra_secs, nsecs); +} + Time Time::from_timespec(const struct timespec& ts) { i32 nsecs = ts.tv_nsec; diff --git a/AK/Time.h b/AK/Time.h index adea9fe2b14..869a0c21a4d 100644 --- a/AK/Time.h +++ b/AK/Time.h @@ -187,6 +187,7 @@ public: i64 seconds = sane_mod(milliseconds, 1'000); return Time(seconds, milliseconds * 1'000'000); } + [[nodiscard]] static Time from_ticks(clock_t, time_t); [[nodiscard]] static Time from_timespec(const struct timespec&); [[nodiscard]] static Time from_timeval(const struct timeval&); // We don't pull in for the pretty min/max definitions because this file is also included in the Kernel