Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/nqe/network_quality_estimator.h" | 5 #include "net/nqe/network_quality_estimator.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 799 const int estimated_observed_diff_milliseconds = | 799 const int estimated_observed_diff_milliseconds = |
| 800 external_estimate_provider_quality_.http_rtt().InMilliseconds() - | 800 external_estimate_provider_quality_.http_rtt().InMilliseconds() - |
| 801 recent_http_rtt.InMilliseconds(); | 801 recent_http_rtt.InMilliseconds(); |
| 802 | 802 |
| 803 RecordRTTAccuracy("NQE.ExternalEstimateProvider.RTT.Accuracy", | 803 RecordRTTAccuracy("NQE.ExternalEstimateProvider.RTT.Accuracy", |
| 804 estimated_observed_diff_milliseconds, measuring_duration, | 804 estimated_observed_diff_milliseconds, measuring_duration, |
| 805 recent_http_rtt); | 805 recent_http_rtt); |
| 806 } | 806 } |
| 807 } | 807 } |
| 808 | 808 |
| 809 void NetworkQualityEstimator::NotifyRequestCompleted( | 809 void NetworkQualityEstimator::NotifyRequestCompleted(const URLRequest& request, |
| 810 const URLRequest& request) { | 810 int net_error) { |
| 811 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), | 811 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
| 812 "NetworkQualityEstimator::NotifyRequestCompleted"); | 812 "NetworkQualityEstimator::NotifyRequestCompleted"); |
| 813 DCHECK(thread_checker_.CalledOnValidThread()); | 813 DCHECK(thread_checker_.CalledOnValidThread()); |
| 814 | 814 |
| 815 if (!RequestSchemeIsHTTPOrHTTPS(request)) | 815 if (!RequestSchemeIsHTTPOrHTTPS(request)) |
| 816 return; | 816 return; |
| 817 | 817 |
| 818 throughput_analyzer_->NotifyRequestCompleted(request); | 818 throughput_analyzer_->NotifyRequestCompleted(request); |
| 819 RecordCorrelationMetric(request); | 819 RecordCorrelationMetric(request, net_error); |
| 820 } | 820 } |
| 821 | 821 |
| 822 void NetworkQualityEstimator::RecordCorrelationMetric( | 822 void NetworkQualityEstimator::RecordCorrelationMetric(const URLRequest& request, |
| 823 const URLRequest& request) const { | 823 int net_error) const { |
| 824 DCHECK(thread_checker_.CalledOnValidThread()); | 824 DCHECK(thread_checker_.CalledOnValidThread()); |
| 825 | 825 |
| 826 // The histogram is recorded with probability | 826 // The histogram is recorded with probability |
| 827 // |correlation_uma_logging_probability_| to reduce overhead involved with | 827 // |correlation_uma_logging_probability_| to reduce overhead involved with |
| 828 // sparse histograms. Also, recording the correlation on each request is | 828 // sparse histograms. Also, recording the correlation on each request is |
| 829 // unnecessary. | 829 // unnecessary. |
| 830 if (RandDouble() >= correlation_uma_logging_probability_) | 830 if (RandDouble() >= correlation_uma_logging_probability_) |
| 831 return; | 831 return; |
| 832 | 832 |
| 833 if (request.response_info().was_cached || | 833 if (request.response_info().was_cached || |
| 834 !request.response_info().network_accessed) { | 834 !request.response_info().network_accessed) { |
| 835 return; | 835 return; |
| 836 } | 836 } |
| 837 | 837 |
| 838 LoadTimingInfo load_timing_info; | 838 LoadTimingInfo load_timing_info; |
| 839 request.GetLoadTimingInfo(&load_timing_info); | 839 request.GetLoadTimingInfo(&load_timing_info); |
| 840 // If the load timing info is unavailable, it probably means that the request | 840 // If the load timing info is unavailable, it probably means that the request |
| 841 // did not go over the network. | 841 // did not go over the network. |
| 842 if (load_timing_info.send_start.is_null() || | 842 if (load_timing_info.send_start.is_null() || |
| 843 load_timing_info.receive_headers_end.is_null()) { | 843 load_timing_info.receive_headers_end.is_null()) { |
| 844 return; | 844 return; |
| 845 } | 845 } |
| 846 | 846 |
| 847 // Record UMA only for successful requests that have completed. | 847 // Record UMA only for successful requests that have completed. |
| 848 if (!request.status().is_success() || request.status().is_io_pending()) | 848 if (net_error != OK || net_error == ERR_IO_PENDING) |
|
mmenke
2016/08/30 22:13:22
The ERR_IO_PENDING part of this comparison is redu
maksims (do not use this acc)
2016/09/01 12:22:30
Do you mean all the paths here? Do you think they
| |
| 849 return; | 849 return; |
| 850 if (request.GetResponseCode() != HTTP_OK) | 850 if (request.GetResponseCode() != HTTP_OK) |
| 851 return; | 851 return; |
| 852 if (load_timing_info.receive_headers_end < last_main_frame_request_) | 852 if (load_timing_info.receive_headers_end < last_main_frame_request_) |
| 853 return; | 853 return; |
| 854 | 854 |
| 855 const base::TimeTicks now = tick_clock_->NowTicks(); | 855 const base::TimeTicks now = tick_clock_->NowTicks(); |
| 856 // Record UMA only for requests that started recently. | 856 // Record UMA only for requests that started recently. |
| 857 if (now - last_main_frame_request_ > base::TimeDelta::FromSeconds(15)) | 857 if (now - last_main_frame_request_ > base::TimeDelta::FromSeconds(15)) |
| 858 return; | 858 return; |
| (...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1704 if (effective_connection_type_ != EFFECTIVE_CONNECTION_TYPE_UNKNOWN) { | 1704 if (effective_connection_type_ != EFFECTIVE_CONNECTION_TYPE_UNKNOWN) { |
| 1705 network_quality_store_->Add( | 1705 network_quality_store_->Add( |
| 1706 current_network_id_, | 1706 current_network_id_, |
| 1707 nqe::internal::CachedNetworkQuality( | 1707 nqe::internal::CachedNetworkQuality( |
| 1708 tick_clock_->NowTicks(), estimated_quality_at_last_main_frame_, | 1708 tick_clock_->NowTicks(), estimated_quality_at_last_main_frame_, |
| 1709 effective_connection_type_)); | 1709 effective_connection_type_)); |
| 1710 } | 1710 } |
| 1711 } | 1711 } |
| 1712 | 1712 |
| 1713 } // namespace net | 1713 } // namespace net |
| OLD | NEW |