Source release 16.4.0

This commit is contained in:
John W. Bruce
2020-10-09 16:08:56 -07:00
parent 160df9f57a
commit 9d17a531ee
562 changed files with 52913 additions and 37426 deletions

View File

@@ -23,7 +23,7 @@ namespace wvcdm {
bool TestSleep::real_sleep_ = true;
TestSleep::CallBack* TestSleep::callback_ = nullptr;
int TestSleep::total_clock_rollback_ = 0;
int TestSleep::total_clock_rollback_seconds_ = 0;
void TestSleep::Sleep(unsigned int seconds) {
int64_t milliseconds = 1000 * seconds;
@@ -33,11 +33,15 @@ void TestSleep::Sleep(unsigned int seconds) {
// total since the start, and then compare to a running total of sleep
// calls. We sleep for approximately x second, and then advance the clock by
// the amount of time that has actually passed.
static auto start_real = std::chrono::system_clock().now();
static int64_t fake_clock = 0;
static const auto start_real = std::chrono::system_clock().now();
sleep(seconds);
auto now_real = std::chrono::system_clock().now();
int64_t total_real = (now_real - start_real) / std::chrono::milliseconds(1);
const auto now_real = std::chrono::system_clock().now();
const int64_t rollback_adjustment = 1000 * total_clock_rollback_seconds_;
const int64_t total_real =
(now_real - start_real) / std::chrono::milliseconds(1) +
rollback_adjustment;
static int64_t fake_clock = 0;
// We want to advance the fake clock by the difference between the real
// clock, and the previous value on the fake clock.
milliseconds = total_real - fake_clock;
@@ -90,7 +94,7 @@ bool TestSleep::RollbackSystemTime(int seconds) {
// For both real and fake sleep we still update the callback and we still keep
// track of the total amount of time slept.
total_clock_rollback_ += seconds;
total_clock_rollback_seconds_ += seconds;
if (callback_ != nullptr) callback_->ElapseTime(-1000 * seconds);
return true;
}
@@ -98,7 +102,6 @@ bool TestSleep::RollbackSystemTime(int seconds) {
bool TestSleep::CanChangeSystemTime() {
// If we are using a fake clock, then we can move the clock backwards by
// just going backwards.
// ElapseTime.
if (!real_sleep_) {
return true;
}