Remove clock calibration logic from QuicClock.
It's been unused since all of the Quartc code got removed.
PiperOrigin-RevId: 443490482
diff --git a/quiche/quic/core/quic_clock.cc b/quiche/quic/core/quic_clock.cc
index 94ca72f..571dc59 100644
--- a/quiche/quic/core/quic_clock.cc
+++ b/quiche/quic/core/quic_clock.cc
@@ -10,46 +10,8 @@
namespace quic {
-QuicClock::QuicClock()
- : is_calibrated_(false), calibration_offset_(QuicTime::Delta::Zero()) {}
-
-QuicClock::~QuicClock() {}
-
-QuicTime::Delta QuicClock::ComputeCalibrationOffset() const {
- // In the ideal world, all we need to do is to return the difference of
- // WallNow() and Now(). In the real world, things like context switch may
- // happen between the calls to WallNow() and Now(), causing their difference
- // to be arbitrarily large, so we repeat the calculation many times and use
- // the one with the minimum difference as the true offset.
- int64_t min_offset_us = std::numeric_limits<int64_t>::max();
-
- for (int i = 0; i < 128; ++i) {
- int64_t now_in_us = (Now() - QuicTime::Zero()).ToMicroseconds();
- int64_t wallnow_in_us =
- static_cast<int64_t>(WallNow().ToUNIXMicroseconds());
-
- int64_t offset_us = wallnow_in_us - now_in_us;
- if (offset_us < min_offset_us) {
- min_offset_us = offset_us;
- }
- }
-
- return QuicTime::Delta::FromMicroseconds(min_offset_us);
-}
-
-void QuicClock::SetCalibrationOffset(QuicTime::Delta offset) {
- QUICHE_DCHECK(!is_calibrated_) << "A clock should only be calibrated once";
- calibration_offset_ = offset;
- is_calibrated_ = true;
-}
-
QuicTime QuicClock::ConvertWallTimeToQuicTime(
const QuicWallTime& walltime) const {
- if (is_calibrated_) {
- int64_t time_in_us = static_cast<int64_t>(walltime.ToUNIXMicroseconds()) -
- calibration_offset_.ToMicroseconds();
- return QuicTime::Zero() + QuicTime::Delta::FromMicroseconds(time_in_us);
- }
// ..........................
// | | |
diff --git a/quiche/quic/core/quic_clock.h b/quiche/quic/core/quic_clock.h
index f128f9e..69aed4e 100644
--- a/quiche/quic/core/quic_clock.h
+++ b/quiche/quic/core/quic_clock.h
@@ -18,25 +18,12 @@
// Interface for retrieving the current time.
class QUIC_EXPORT_PRIVATE QuicClock {
public:
- QuicClock();
- virtual ~QuicClock();
+ QuicClock() = default;
+ virtual ~QuicClock() = default;
QuicClock(const QuicClock&) = delete;
QuicClock& operator=(const QuicClock&) = delete;
- // Compute the offset between this clock with the Unix Epoch clock.
- // Return the calibrated offset between WallNow() and Now(), in the form of
- // (wallnow_in_us - now_in_us).
- // The return value can be used by SetCalibrationOffset() to actually
- // calibrate the clock, or all instances of this clock type.
- QuicTime::Delta ComputeCalibrationOffset() const;
-
- // Calibrate this clock. A calibrated clock guarantees that the
- // ConvertWallTimeToQuicTime() function always return the same result for the
- // same walltime.
- // Should not be called more than once for each QuicClock.
- void SetCalibrationOffset(QuicTime::Delta offset);
-
// Returns the approximate current time as a QuicTime object.
virtual QuicTime ApproximateNow() const = 0;
@@ -57,14 +44,6 @@
QuicTime CreateTimeFromMicroseconds(uint64_t time_us) const {
return QuicTime(time_us);
}
-
- private:
- // True if |calibration_offset_| is valid.
- bool is_calibrated_;
- // If |is_calibrated_|, |calibration_offset_| is the (fixed) offset between
- // the Unix Epoch clock and this clock.
- // In other words, the offset between WallNow() and Now().
- QuicTime::Delta calibration_offset_;
};
} // namespace quic
diff --git a/quiche/quic/core/quic_epoll_clock_test.cc b/quiche/quic/core/quic_epoll_clock_test.cc
index e501fc4..617230f 100644
--- a/quiche/quic/core/quic_epoll_clock_test.cc
+++ b/quiche/quic/core/quic_epoll_clock_test.cc
@@ -44,70 +44,6 @@
EXPECT_EQ(1000005, (clock.Now() - QuicTime::Zero()).ToMicroseconds());
}
-TEST_F(QuicEpollClockTest, CalibrateRealEpollClock) {
- QuicEpollServer epoll_server;
-
- QuicEpollClock uncalibrated_clock(&epoll_server);
- QuicEpollClock calibrated_clock(&epoll_server);
- EXPECT_TRUE(calibrated_clock.ComputeCalibrationOffset().IsZero());
-
- for (int i = 0; i < 100; ++i) {
- QuicWallTime wallnow = uncalibrated_clock.WallNow();
- EXPECT_EQ(uncalibrated_clock.ConvertWallTimeToQuicTime(wallnow),
- calibrated_clock.ConvertWallTimeToQuicTime(wallnow));
- }
-}
-
-// ClockWithOffset is a clock whose offset(WallNow() - Now() at any instant) is
-// given at construction time.
-class ClockWithOffset : public QuicEpollClock {
- public:
- ClockWithOffset(QuicEpollServer* epoll_server, QuicTime::Delta offset)
- : QuicEpollClock(epoll_server), offset_(offset) {}
-
- QuicTime Now() const override { return QuicEpollClock::Now() - offset_; }
-
- // QuicEpollClock disables ConvertWallTimeToQuicTime since it always have a
- // zero offset. We need to re-enable it here in order to test the calibration
- // and conversion code in QuicClock.
- QuicTime ConvertWallTimeToQuicTime(
- const QuicWallTime& walltime) const override {
- return QuicClock::ConvertWallTimeToQuicTime(walltime);
- }
-
- private:
- QuicTime::Delta offset_;
-};
-
-TEST_F(QuicEpollClockTest, CalibrateClockWithOffset) {
- QuicEpollServer epoll_server;
-
- for (const QuicTime::Delta& offset : {QuicTime::Delta::FromSeconds(5000),
- QuicTime::Delta::FromSeconds(-8000)}) {
- ClockWithOffset clock(&epoll_server, offset);
- ASSERT_EQ(offset, clock.ComputeCalibrationOffset())
- << "offset (us): " << offset.ToMicroseconds();
- // Test fails without this.
- clock.SetCalibrationOffset(offset);
-
- QuicWallTime last_walltime = clock.WallNow();
- QuicTime last_time = clock.ConvertWallTimeToQuicTime(last_walltime);
-
- for (int i = 0; i < 1e5; ++i) {
- QuicWallTime wallnow = clock.WallNow();
- QuicTime now = clock.ConvertWallTimeToQuicTime(wallnow);
-
- if (wallnow.IsAfter(last_walltime)) {
- ASSERT_LT(0, (now - last_time).ToMicroseconds())
- << "offset (us): " << offset.ToMicroseconds();
-
- last_walltime = wallnow;
- last_time = now;
- }
- }
- }
-}
-
TEST_F(QuicEpollClockTest, MonotonicityWithRealEpollClock) {
QuicEpollServer epoll_server;
QuicEpollClock clock(&epoll_server);