| // Copyright 2018 The Fuchsia 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 GARNET_BIN_NETWORK_TIME_TEST_SETTABLE_TIME_SOURCE_H |
| #define GARNET_BIN_NETWORK_TIME_TEST_SETTABLE_TIME_SOURCE_H |
| |
| #include "third_party/roughtime/protocol.h" |
| #include "third_party/roughtime/time_source.h" |
| |
| namespace time_server { |
| |
| // A |TimeSource| implementation whose current time can be set using |SetTime|. |
| // (Note: Time does not advance automatically.) |
| class SettableTimeSource : public roughtime::TimeSource { |
| public: |
| SettableTimeSource(); |
| explicit SettableTimeSource(roughtime::rough_time_t initial_time_micros); |
| |
| SettableTimeSource(SettableTimeSource&& rhs) noexcept; |
| SettableTimeSource& operator=(SettableTimeSource const& rhs); |
| |
| ~SettableTimeSource() override; |
| |
| // Set the current time |
| void SetTime(roughtime::rough_time_t now_micros); |
| std::pair<roughtime::rough_time_t, uint32_t> Now() override; |
| |
| private: |
| // Current time in epoch microseconds. |
| // TODO(kpozin): Use std::atomic? Would require custom copy & move ctors. |
| roughtime::rough_time_t now_micros_ = 0; |
| }; |
| |
| } // namespace time_server |
| |
| #endif // GARNET_BIN_NETWORK_TIME_TEST_SETTABLE_TIME_SOURCE_H |