Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(793)

Unified Diff: net/base/network_quality_estimator.cc

Issue 1162293004: Use request start time for estimating network quality. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/network_quality_estimator.cc
diff --git a/net/base/network_quality_estimator.cc b/net/base/network_quality_estimator.cc
index e864c7e1f4619501fb8ce7073545f6f4c3ab7752..63b4afd86625d010ac5bea1c98522a5e24e19b3f 100644
--- a/net/base/network_quality_estimator.cc
+++ b/net/base/network_quality_estimator.cc
@@ -9,6 +9,7 @@
#include "base/logging.h"
#include "base/metrics/histogram.h"
+#include "net/base/load_timing_info.h"
#include "net/base/net_util.h"
#include "net/base/network_quality.h"
#include "net/url_request/url_request.h"
@@ -63,25 +64,50 @@ void NetworkQualityEstimator::NotifyDataReceived(
}
base::TimeTicks now = base::TimeTicks::Now();
- base::TimeDelta request_duration = now - request.creation_time();
- DCHECK_GE(request_duration, base::TimeDelta());
+ LoadTimingInfo load_timing_info;
+ request.GetLoadTimingInfo(&load_timing_info);
+
+ // Time when the resource was requested. Use the timings from LoadTimingInfo,
+ // if it is available since it is recorded after DNS is resolved and a secure
+ // connection is established.
+ base::TimeTicks request_start_time = !load_timing_info.send_start.is_null()
mmenke 2015/06/15 17:21:00 Hrm...If load_timing_info.send_start or load_timin
tbansal1 2015/06/15 18:57:11 QUIC still has these 2 values populated. I checked
+ ? load_timing_info.send_start
+ : request.creation_time();
+ DCHECK(!request_start_time.is_null());
+
+ // Time when the headers were received. Use timings from LoadTimingInfo, if
+ // available.
+ base::TimeTicks headers_received_time =
+ !load_timing_info.receive_headers_end.is_null()
+ ? load_timing_info.receive_headers_end
+ : now;
+ DCHECK(!headers_received_time.is_null());
+
+ // Duration between when the resource was requested and when response headers
+ // were received.
+ base::TimeDelta observed_rtt = headers_received_time - request_start_time;
+ DCHECK_GE(observed_rtt, base::TimeDelta());
mmenke 2015/06/15 17:21:00 This is only used in the body of the next if state
tbansal1 2015/06/15 18:57:11 Done.
+
+ // Time since the resource was requested.
+ base::TimeDelta since_request_start = now - request_start_time;
+ DCHECK_GE(since_request_start, base::TimeDelta());
// Only add RTT observation if this is the first read for this response.
if (cumulative_prefilter_bytes_read == prefiltered_bytes_read) {
- if (request_duration < fastest_rtt_since_last_connection_change_)
- fastest_rtt_since_last_connection_change_ = request_duration;
+ if (observed_rtt < fastest_rtt_since_last_connection_change_)
+ fastest_rtt_since_last_connection_change_ = observed_rtt;
rtt_msec_observations_.AddObservation(
- Observation(request_duration.InMilliseconds(), now));
+ Observation(observed_rtt.InMilliseconds(), now));
}
// Ignore tiny transfers which will not produce accurate rates.
// Ignore short duration transfers.
if (cumulative_prefilter_bytes_read >= kMinTransferSizeInBytes &&
- request_duration >=
+ since_request_start >=
base::TimeDelta::FromMicroseconds(kMinRequestDurationMicroseconds)) {
double kbps_f = cumulative_prefilter_bytes_read * 8.0 / 1000.0 /
- request_duration.InSecondsF();
+ since_request_start.InSecondsF();
DCHECK_GE(kbps_f, 0.0);
// Check overflow errors. This may happen if the kbpsF is more than
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698