1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_NQE_NETWORK_QUALITY_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_NQE_NETWORK_QUALITY_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/gtest_prod_util.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/sequence_checker.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace net::nqe::internal { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker // RTT and throughput values are set to |INVALID_RTT_THROUGHPUT| if a valid 18*6777b538SAndroid Build Coastguard Worker // value is unavailable. 19*6777b538SAndroid Build Coastguard Worker // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.net 20*6777b538SAndroid Build Coastguard Worker enum RttThroughputValues { 21*6777b538SAndroid Build Coastguard Worker // Invalid value. 22*6777b538SAndroid Build Coastguard Worker INVALID_RTT_THROUGHPUT = -1, 23*6777b538SAndroid Build Coastguard Worker }; 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker // Returns the RTT value to be used when the valid RTT is unavailable. Readers 26*6777b538SAndroid Build Coastguard Worker // should discard RTT if it is set to the value returned by |InvalidRTT()|. 27*6777b538SAndroid Build Coastguard Worker // TODO(tbansal): Remove this method, and replace all calls by 28*6777b538SAndroid Build Coastguard Worker // |INVALID_RTT_THROUGHPUT|. 29*6777b538SAndroid Build Coastguard Worker NET_EXPORT_PRIVATE base::TimeDelta InvalidRTT(); 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // NetworkQuality is used to cache the quality of a network connection. 32*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE NetworkQuality { 33*6777b538SAndroid Build Coastguard Worker public: 34*6777b538SAndroid Build Coastguard Worker NetworkQuality(); 35*6777b538SAndroid Build Coastguard Worker // |http_rtt| is the estimate of the round trip time at the HTTP layer. 36*6777b538SAndroid Build Coastguard Worker // |transport_rtt| is the estimate of the round trip time at the transport 37*6777b538SAndroid Build Coastguard Worker // layer. |downstream_throughput_kbps| is the estimate of the downstream 38*6777b538SAndroid Build Coastguard Worker // throughput in kilobits per second. 39*6777b538SAndroid Build Coastguard Worker NetworkQuality(const base::TimeDelta& http_rtt, 40*6777b538SAndroid Build Coastguard Worker const base::TimeDelta& transport_rtt, 41*6777b538SAndroid Build Coastguard Worker int32_t downstream_throughput_kbps); 42*6777b538SAndroid Build Coastguard Worker NetworkQuality(const NetworkQuality& other); 43*6777b538SAndroid Build Coastguard Worker ~NetworkQuality(); 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker NetworkQuality& operator=(const NetworkQuality& other); 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker bool operator==(const NetworkQuality& other) const; 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker // Returns true if |this| is at least as fast as |other| for all parameters 50*6777b538SAndroid Build Coastguard Worker // (HTTP RTT, transport RTT etc.) 51*6777b538SAndroid Build Coastguard Worker bool IsFaster(const NetworkQuality& other) const; 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker // Returns the estimate of the round trip time at the HTTP layer. http_rtt()54*6777b538SAndroid Build Coastguard Worker const base::TimeDelta& http_rtt() const { 55*6777b538SAndroid Build Coastguard Worker DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 56*6777b538SAndroid Build Coastguard Worker return http_rtt_; 57*6777b538SAndroid Build Coastguard Worker } 58*6777b538SAndroid Build Coastguard Worker set_http_rtt(base::TimeDelta http_rtt)59*6777b538SAndroid Build Coastguard Worker void set_http_rtt(base::TimeDelta http_rtt) { 60*6777b538SAndroid Build Coastguard Worker DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 61*6777b538SAndroid Build Coastguard Worker http_rtt_ = http_rtt; 62*6777b538SAndroid Build Coastguard Worker DCHECK_LE(INVALID_RTT_THROUGHPUT, http_rtt_.InMilliseconds()); 63*6777b538SAndroid Build Coastguard Worker } 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker // Returns the estimate of the round trip time at the transport layer. transport_rtt()66*6777b538SAndroid Build Coastguard Worker const base::TimeDelta& transport_rtt() const { 67*6777b538SAndroid Build Coastguard Worker DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 68*6777b538SAndroid Build Coastguard Worker return transport_rtt_; 69*6777b538SAndroid Build Coastguard Worker } 70*6777b538SAndroid Build Coastguard Worker set_transport_rtt(base::TimeDelta transport_rtt)71*6777b538SAndroid Build Coastguard Worker void set_transport_rtt(base::TimeDelta transport_rtt) { 72*6777b538SAndroid Build Coastguard Worker DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 73*6777b538SAndroid Build Coastguard Worker transport_rtt_ = transport_rtt; 74*6777b538SAndroid Build Coastguard Worker DCHECK_LE(INVALID_RTT_THROUGHPUT, transport_rtt_.InMilliseconds()); 75*6777b538SAndroid Build Coastguard Worker } 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker // Returns the estimate of the downstream throughput in Kbps (Kilobits per 78*6777b538SAndroid Build Coastguard Worker // second). downstream_throughput_kbps()79*6777b538SAndroid Build Coastguard Worker int32_t downstream_throughput_kbps() const { 80*6777b538SAndroid Build Coastguard Worker DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 81*6777b538SAndroid Build Coastguard Worker return downstream_throughput_kbps_; 82*6777b538SAndroid Build Coastguard Worker } 83*6777b538SAndroid Build Coastguard Worker set_downstream_throughput_kbps(int32_t downstream_throughput_kbps)84*6777b538SAndroid Build Coastguard Worker void set_downstream_throughput_kbps(int32_t downstream_throughput_kbps) { 85*6777b538SAndroid Build Coastguard Worker DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 86*6777b538SAndroid Build Coastguard Worker downstream_throughput_kbps_ = downstream_throughput_kbps; 87*6777b538SAndroid Build Coastguard Worker DCHECK_LE(INVALID_RTT_THROUGHPUT, downstream_throughput_kbps_); 88*6777b538SAndroid Build Coastguard Worker } 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker private: 91*6777b538SAndroid Build Coastguard Worker // Verifies that the value of network quality is within the expected range. 92*6777b538SAndroid Build Coastguard Worker void VerifyValueCorrectness() const; 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Worker // Estimated round trip time at the HTTP layer. 95*6777b538SAndroid Build Coastguard Worker base::TimeDelta http_rtt_; 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard Worker // Estimated round trip time at the transport layer. 98*6777b538SAndroid Build Coastguard Worker base::TimeDelta transport_rtt_; 99*6777b538SAndroid Build Coastguard Worker 100*6777b538SAndroid Build Coastguard Worker // Estimated downstream throughput in kilobits per second. 101*6777b538SAndroid Build Coastguard Worker int32_t downstream_throughput_kbps_; 102*6777b538SAndroid Build Coastguard Worker 103*6777b538SAndroid Build Coastguard Worker SEQUENCE_CHECKER(sequence_checker_); 104*6777b538SAndroid Build Coastguard Worker }; 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard Worker } // namespace net::nqe::internal 107*6777b538SAndroid Build Coastguard Worker 108*6777b538SAndroid Build Coastguard Worker #endif // NET_NQE_NETWORK_QUALITY_H_ 109