Cleanup usage of kNumNanosecsPerSec like constants in event.cc Instead rely on TimeDelta constexpr functions to do conversion between different units of time. Bug: webrtc:42223979 Change-Id: I7476a2e344303b907a9e297d42bb8fb396fd3aaa Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/401680 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/main@{#45202}
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index fc3180f..fdf70e2 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn
@@ -421,7 +421,6 @@ ] deps = [ ":checks", - ":timeutils", "../api/units:time_delta", "synchronization:yield_policy", "system:warn_current_thread_is_deadlocked",
diff --git a/rtc_base/event.cc b/rtc_base/event.cc index 05f477c..560b036 100644 --- a/rtc_base/event.cc +++ b/rtc_base/event.cc
@@ -12,14 +12,13 @@ #include <time.h> -#include <cstdint> +#include <cstdlib> #include <optional> #include "api/units/time_delta.h" #include "rtc_base/checks.h" #include "rtc_base/synchronization/yield_policy.h" #include "rtc_base/system/warn_current_thread_is_deadlocked.h" -#include "rtc_base/time_utils.h" #if defined(WEBRTC_WIN) #include <windows.h> @@ -119,7 +118,7 @@ namespace { -timespec GetTimespec(TimeDelta duration_from_now) { +timespec GetTimespec(TimeDelta from_now) { timespec ts; // Get the current time. @@ -129,20 +128,15 @@ timeval tv; gettimeofday(&tv, nullptr); ts.tv_sec = tv.tv_sec; - ts.tv_nsec = tv.tv_usec * kNumNanosecsPerMicrosec; + ts.tv_nsec = TimeDelta::Micros(tv.tv_usec).ns(); #endif - // Add the specified number of milliseconds to it. - int64_t microsecs_from_now = duration_from_now.us(); - ts.tv_sec += microsecs_from_now / kNumMicrosecsPerSec; - ts.tv_nsec += - (microsecs_from_now % kNumMicrosecsPerSec) * kNumNanosecsPerMicrosec; - - // Normalize. - if (ts.tv_nsec >= kNumNanosecsPerSec) { - ts.tv_sec++; - ts.tv_nsec -= kNumNanosecsPerSec; - } + // Add the specified number of nanoseconds to it. + // Use integer division to transfer full seconds to `tv_sec`. + // `ns` has type either std::ldiv_t or std::lldiv_t. + auto ns = std::div(ts.tv_nsec + from_now.ns(), TimeDelta::Seconds(1).ns()); + ts.tv_sec += ns.quot; + ts.tv_nsec = ns.rem; return ts; }