| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef QUICHE_QUIC_CORE_QUIC_CLOCK_H_ |
| #define QUICHE_QUIC_CORE_QUIC_CLOCK_H_ |
| |
| #include "quiche/quic/core/quic_time.h" |
| #include "quiche/quic/platform/api/quic_export.h" |
| |
| /* API_DESCRIPTION |
| QuicClock is used by QUIC core to get current time. Its instance is created by |
| applications and passed into QuicDispatcher and QuicConnectionHelperInterface. |
| API-DESCRIPTION */ |
| |
| namespace quic { |
| |
| // Interface for retrieving the current time. |
| class QUIC_EXPORT_PRIVATE QuicClock { |
| public: |
| QuicClock() = default; |
| virtual ~QuicClock() = default; |
| |
| QuicClock(const QuicClock&) = delete; |
| QuicClock& operator=(const QuicClock&) = delete; |
| |
| // Returns the approximate current time as a QuicTime object. |
| virtual QuicTime ApproximateNow() const = 0; |
| |
| // Returns the current time as a QuicTime object. |
| // Note: this use significant resources please use only if needed. |
| virtual QuicTime Now() const = 0; |
| |
| // WallNow returns the current wall-time - a time that is consistent across |
| // different clocks. |
| virtual QuicWallTime WallNow() const = 0; |
| |
| // Converts |walltime| to a QuicTime relative to this clock's epoch. |
| virtual QuicTime ConvertWallTimeToQuicTime( |
| const QuicWallTime& walltime) const; |
| |
| protected: |
| // Creates a new QuicTime using |time_us| as the internal value. |
| QuicTime CreateTimeFromMicroseconds(uint64_t time_us) const { |
| return QuicTime(time_us); |
| } |
| }; |
| |
| } // namespace quic |
| |
| #endif // QUICHE_QUIC_CORE_QUIC_CLOCK_H_ |