Commit d7f1662f authored by cypt4's avatar cypt4 Committed by Commit Bot

Fix dcheck in network_quality_estimator

Adding http_rtt_observation in ReadCachedNetworkQualityEstimate
causes notifying observers.
That can lead to calling ReadCachedNetworkQualityEstimate again.
So some observations can be added between adding
http_rtt_observation and adding transport_rtt_observation.
That ends up to breaking observations timestamp increasing.
To fix this we can use new timestamp each time when add
observation.
Same logic is used in AddDefaultEstimates for example.

R=ryansturm@chromium.org, tbansal@chromium.org

Bug: 841681
Change-Id: Ibed7d5e8e3efca82915d37b1de58df50ae43ff58
Reviewed-on: https://chromium-review.googlesource.com/1052690Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Commit-Queue: Tarun Bansal <tbansal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#558609}
parent ff8f9399
...@@ -1357,8 +1357,6 @@ bool NetworkQualityEstimator::ReadCachedNetworkQualityEstimate() { ...@@ -1357,8 +1357,6 @@ bool NetworkQualityEstimator::ReadCachedNetworkQualityEstimate() {
nqe::internal::NetworkQuality network_quality = nqe::internal::NetworkQuality network_quality =
cached_network_quality.network_quality(); cached_network_quality.network_quality();
const base::TimeTicks now = tick_clock_->NowTicks();
bool update_network_quality_store = false; bool update_network_quality_store = false;
// Populate |network_quality| with synthetic RTT and throughput observations // Populate |network_quality| with synthetic RTT and throughput observations
...@@ -1387,25 +1385,25 @@ bool NetworkQualityEstimator::ReadCachedNetworkQualityEstimate() { ...@@ -1387,25 +1385,25 @@ bool NetworkQualityEstimator::ReadCachedNetworkQualityEstimate() {
} }
if (update_network_quality_store) { if (update_network_quality_store) {
network_quality_store_->Add( network_quality_store_->Add(current_network_id_,
current_network_id_, nqe::internal::CachedNetworkQuality(
nqe::internal::CachedNetworkQuality(now, network_quality, tick_clock_->NowTicks(), network_quality,
effective_connection_type)); effective_connection_type));
} }
Observation http_rtt_observation( Observation http_rtt_observation(
network_quality.http_rtt().InMilliseconds(), now, INT32_MIN, network_quality.http_rtt().InMilliseconds(), tick_clock_->NowTicks(),
NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE); INT32_MIN, NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE);
AddAndNotifyObserversOfRTT(http_rtt_observation); AddAndNotifyObserversOfRTT(http_rtt_observation);
Observation transport_rtt_observation( Observation transport_rtt_observation(
network_quality.transport_rtt().InMilliseconds(), now, INT32_MIN, network_quality.transport_rtt().InMilliseconds(), tick_clock_->NowTicks(),
NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE); INT32_MIN, NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE);
AddAndNotifyObserversOfRTT(transport_rtt_observation); AddAndNotifyObserversOfRTT(transport_rtt_observation);
Observation througphput_observation( Observation througphput_observation(
network_quality.downstream_throughput_kbps(), now, INT32_MIN, network_quality.downstream_throughput_kbps(), tick_clock_->NowTicks(),
NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE); INT32_MIN, NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE);
AddAndNotifyObserversOfThroughput(througphput_observation); AddAndNotifyObserversOfThroughput(througphput_observation);
ComputeEffectiveConnectionType(); ComputeEffectiveConnectionType();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment