diff --git a/modules/congestion_controller/network_control/include/network_units.h b/modules/congestion_controller/network_control/include/network_units.h index 60cbb519d9..4a61c747bb 100644 --- a/modules/congestion_controller/network_control/include/network_units.h +++ b/modules/congestion_controller/network_control/include/network_units.h @@ -67,6 +67,9 @@ class TimeDelta { return microseconds_; } TimeDelta Abs() const { return TimeDelta::us(std::abs(us())); } + + double SecondsAsDouble() const; + bool IsZero() const { return microseconds_ == 0; } bool IsFinite() const { return IsInitialized() && !IsInfinite(); } bool IsInitialized() const { @@ -188,6 +191,8 @@ class Timestamp { microseconds_ += other.us(); return *this; } + + double SecondsAsDouble() const; bool operator==(const Timestamp& other) const { return microseconds_ == other.microseconds_; } diff --git a/modules/congestion_controller/network_control/network_units.cc b/modules/congestion_controller/network_control/network_units.cc index 806ad977de..a04eef7e90 100644 --- a/modules/congestion_controller/network_control/network_units.cc +++ b/modules/congestion_controller/network_control/network_units.cc @@ -19,6 +19,27 @@ TimeDelta TimeDelta::operator*(double scalar) const { DataSize DataSize::operator*(double scalar) const { return DataSize::bytes(std::round(bytes() * scalar)); } +double TimeDelta::SecondsAsDouble() const { + if (IsPlusInfinity()) { + return std::numeric_limits::infinity(); + } else if (IsMinusInfinity()) { + return -std::numeric_limits::infinity(); + } else if (!IsInitialized()) { + return std::numeric_limits::signaling_NaN(); + } else { + return us() * 1e-6; + } +} + +double Timestamp::SecondsAsDouble() const { + if (IsInfinite()) { + return std::numeric_limits::infinity(); + } else if (!IsInitialized()) { + return std::numeric_limits::signaling_NaN(); + } else { + return us() * 1e-6; + } +} DataRate DataRate::operator*(double scalar) const { return DataRate::bytes_per_second(std::round(bytes_per_second() * scalar));