| Index: components/network_time/network_time_tracker.cc
|
| diff --git a/components/network_time/network_time_tracker.cc b/components/network_time/network_time_tracker.cc
|
| index 5ce5e24a42cc4b252e7c9af84a7eaf725f352498..a9f9f82c89a7837939f59d6c977295bad32edfac 100644
|
| --- a/components/network_time/network_time_tracker.cc
|
| +++ b/components/network_time/network_time_tracker.cc
|
| @@ -306,12 +306,13 @@ base::TimeDelta NetworkTimeTracker::GetTimerDelayForTesting() const {
|
| return timer_.GetCurrentDelay();
|
| }
|
|
|
| -bool NetworkTimeTracker::GetNetworkTime(base::Time* network_time,
|
| - base::TimeDelta* uncertainty) const {
|
| +NetworkTimeTracker::NetworkTimeResult NetworkTimeTracker::GetNetworkTime(
|
| + base::Time* network_time,
|
| + base::TimeDelta* uncertainty) const {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| DCHECK(network_time);
|
| if (network_time_at_last_measurement_.is_null()) {
|
| - return false;
|
| + return NETWORK_TIME_NO_SYNC;
|
| }
|
| DCHECK(!ticks_at_last_measurement_.is_null());
|
| DCHECK(!time_at_last_measurement_.is_null());
|
| @@ -320,23 +321,41 @@ bool NetworkTimeTracker::GetNetworkTime(base::Time* network_time,
|
| base::TimeDelta time_delta = clock_->Now() - time_at_last_measurement_;
|
| if (time_delta.InMilliseconds() < 0) { // Has wall clock run backward?
|
| DVLOG(1) << "Discarding network time due to wall clock running backward";
|
| + UMA_HISTOGRAM_CUSTOM_TIMES(
|
| + "NetworkTimeTracker.WallClockRanBackwards", time_delta.magnitude(),
|
| + base::TimeDelta::FromSeconds(1), base::TimeDelta::FromDays(7), 50);
|
| network_time_at_last_measurement_ = base::Time();
|
| - return false;
|
| + return NETWORK_TIME_SYNC_LOST;
|
| }
|
| // Now we know that both |tick_delta| and |time_delta| are positive.
|
| - base::TimeDelta divergence = (tick_delta - time_delta).magnitude();
|
| - if (divergence > base::TimeDelta::FromSeconds(kClockDivergenceSeconds)) {
|
| + base::TimeDelta divergence = tick_delta - time_delta;
|
| + if (divergence.magnitude() >
|
| + base::TimeDelta::FromSeconds(kClockDivergenceSeconds)) {
|
| // Most likely either the machine has suspended, or the wall clock has been
|
| // reset.
|
| DVLOG(1) << "Discarding network time due to clocks diverging";
|
| +
|
| + // The below histograms do not use |kClockDivergenceSeconds| as the
|
| + // lower-bound, so that |kClockDivergenceSeconds| can be changed
|
| + // without causing the buckets to change and making data from
|
| + // old/new clients incompatible.
|
| + if (divergence.InMilliseconds() < 0) {
|
| + UMA_HISTOGRAM_CUSTOM_TIMES(
|
| + "NetworkTimeTracker.ClockDivergence.Negative", divergence.magnitude(),
|
| + base::TimeDelta::FromSeconds(60), base::TimeDelta::FromDays(7), 50);
|
| + } else {
|
| + UMA_HISTOGRAM_CUSTOM_TIMES(
|
| + "NetworkTimeTracker.ClockDivergence.Positive", divergence.magnitude(),
|
| + base::TimeDelta::FromSeconds(60), base::TimeDelta::FromDays(7), 50);
|
| + }
|
| network_time_at_last_measurement_ = base::Time();
|
| - return false;
|
| + return NETWORK_TIME_SYNC_LOST;
|
| }
|
| *network_time = network_time_at_last_measurement_ + tick_delta;
|
| if (uncertainty) {
|
| *uncertainty = network_time_uncertainty_ + divergence;
|
| }
|
| - return true;
|
| + return NETWORK_TIME_AVAILABLE;
|
| }
|
|
|
| void NetworkTimeTracker::CheckTime() {
|
| @@ -469,10 +488,10 @@ bool NetworkTimeTracker::ShouldIssueTimeQuery() {
|
| return false;
|
| }
|
|
|
| - // If GetNetworkTime() returns false, synchronization has been lost
|
| - // and a query is needed.
|
| + // If GetNetworkTime() does not return NETWORK_TIME_AVAILABLE,
|
| + // synchronization has been lost and a query is needed.
|
| base::Time network_time;
|
| - if (!GetNetworkTime(&network_time, nullptr)) {
|
| + if (GetNetworkTime(&network_time, nullptr) != NETWORK_TIME_AVAILABLE) {
|
| return true;
|
| }
|
|
|
|
|