webrtc_m130/webrtc/test/drifting_clock.cc
danilchap 21dc1890f4 Replace Clock::CurrentNtp with Clock::CurrentNtpTime
CurrentNtp return time by taking two output parameters by reference
(also breaks style guide)
CurrentNtpTime treat ntp time as single entity and returns it using NtpTime structure.
(making interface clearer)

BUG=None

Review-Url: https://codereview.webrtc.org/2733823002
Cr-Commit-Position: refs/heads/master@{#17088}
2017-03-07 10:51:09 +00:00

57 lines
1.8 KiB
C++

/*
* Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "webrtc/test/drifting_clock.h"
#include "webrtc/base/checks.h"
namespace webrtc {
namespace test {
const float DriftingClock::kDoubleSpeed = 2.0f;
const float DriftingClock::kNoDrift = 1.0f;
const float DriftingClock::kHalfSpeed = 0.5f;
DriftingClock::DriftingClock(Clock* clock, float speed)
: clock_(clock),
drift_(speed - 1.0f),
start_time_(clock_->TimeInMicroseconds()) {
RTC_CHECK(clock);
RTC_CHECK_GT(speed, 0.0f);
}
float DriftingClock::Drift() const {
int64_t now = clock_->TimeInMicroseconds();
RTC_DCHECK_GE(now, start_time_);
return (now - start_time_) * drift_;
}
int64_t DriftingClock::TimeInMilliseconds() const {
return clock_->TimeInMilliseconds() + Drift() / 1000.;
}
int64_t DriftingClock::TimeInMicroseconds() const {
return clock_->TimeInMicroseconds() + Drift();
}
NtpTime DriftingClock::CurrentNtpTime() const {
// NTP precision is 1/2^32 seconds, i.e. 2^32 ntp fractions = 1 second.
const double kNtpFracPerMicroSecond = 4294.967296; // = 2^32 / 10^6
NtpTime ntp = clock_->CurrentNtpTime();
uint64_t total_fractions = static_cast<uint64_t>(ntp);
total_fractions += Drift() * kNtpFracPerMicroSecond;
return NtpTime(total_fractions);
}
int64_t DriftingClock::CurrentNtpInMilliseconds() const {
return clock_->CurrentNtpInMilliseconds() + Drift() / 1000.;
}
} // namespace test
} // namespace webrtc