xref: /aosp_15_r20/external/cronet/net/nqe/network_quality.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 #include "net/nqe/network_quality.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker namespace net::nqe::internal {
8*6777b538SAndroid Build Coastguard Worker 
InvalidRTT()9*6777b538SAndroid Build Coastguard Worker base::TimeDelta InvalidRTT() {
10*6777b538SAndroid Build Coastguard Worker   return base::Milliseconds(INVALID_RTT_THROUGHPUT);
11*6777b538SAndroid Build Coastguard Worker }
12*6777b538SAndroid Build Coastguard Worker 
NetworkQuality()13*6777b538SAndroid Build Coastguard Worker NetworkQuality::NetworkQuality()
14*6777b538SAndroid Build Coastguard Worker     : NetworkQuality(InvalidRTT(), InvalidRTT(), INVALID_RTT_THROUGHPUT) {
15*6777b538SAndroid Build Coastguard Worker   VerifyValueCorrectness();
16*6777b538SAndroid Build Coastguard Worker   DETACH_FROM_SEQUENCE(sequence_checker_);
17*6777b538SAndroid Build Coastguard Worker }
18*6777b538SAndroid Build Coastguard Worker 
NetworkQuality(const base::TimeDelta & http_rtt,const base::TimeDelta & transport_rtt,int32_t downstream_throughput_kbps)19*6777b538SAndroid Build Coastguard Worker NetworkQuality::NetworkQuality(const base::TimeDelta& http_rtt,
20*6777b538SAndroid Build Coastguard Worker                                const base::TimeDelta& transport_rtt,
21*6777b538SAndroid Build Coastguard Worker                                int32_t downstream_throughput_kbps)
22*6777b538SAndroid Build Coastguard Worker     : http_rtt_(http_rtt),
23*6777b538SAndroid Build Coastguard Worker       transport_rtt_(transport_rtt),
24*6777b538SAndroid Build Coastguard Worker       downstream_throughput_kbps_(downstream_throughput_kbps) {
25*6777b538SAndroid Build Coastguard Worker   VerifyValueCorrectness();
26*6777b538SAndroid Build Coastguard Worker   DETACH_FROM_SEQUENCE(sequence_checker_);
27*6777b538SAndroid Build Coastguard Worker }
28*6777b538SAndroid Build Coastguard Worker 
NetworkQuality(const NetworkQuality & other)29*6777b538SAndroid Build Coastguard Worker NetworkQuality::NetworkQuality(const NetworkQuality& other)
30*6777b538SAndroid Build Coastguard Worker     : NetworkQuality(other.http_rtt_,
31*6777b538SAndroid Build Coastguard Worker                      other.transport_rtt_,
32*6777b538SAndroid Build Coastguard Worker                      other.downstream_throughput_kbps_) {
33*6777b538SAndroid Build Coastguard Worker   VerifyValueCorrectness();
34*6777b538SAndroid Build Coastguard Worker   DETACH_FROM_SEQUENCE(sequence_checker_);
35*6777b538SAndroid Build Coastguard Worker }
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker NetworkQuality::~NetworkQuality() = default;
38*6777b538SAndroid Build Coastguard Worker 
operator =(const NetworkQuality & other)39*6777b538SAndroid Build Coastguard Worker NetworkQuality& NetworkQuality::operator=(const NetworkQuality& other) {
40*6777b538SAndroid Build Coastguard Worker   http_rtt_ = other.http_rtt_;
41*6777b538SAndroid Build Coastguard Worker   transport_rtt_ = other.transport_rtt_;
42*6777b538SAndroid Build Coastguard Worker   downstream_throughput_kbps_ = other.downstream_throughput_kbps_;
43*6777b538SAndroid Build Coastguard Worker   VerifyValueCorrectness();
44*6777b538SAndroid Build Coastguard Worker   DETACH_FROM_SEQUENCE(sequence_checker_);
45*6777b538SAndroid Build Coastguard Worker   return *this;
46*6777b538SAndroid Build Coastguard Worker }
47*6777b538SAndroid Build Coastguard Worker 
operator ==(const NetworkQuality & other) const48*6777b538SAndroid Build Coastguard Worker bool NetworkQuality::operator==(const NetworkQuality& other) const {
49*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
50*6777b538SAndroid Build Coastguard Worker   return http_rtt_ == other.http_rtt_ &&
51*6777b538SAndroid Build Coastguard Worker          transport_rtt_ == other.transport_rtt_ &&
52*6777b538SAndroid Build Coastguard Worker          downstream_throughput_kbps_ == other.downstream_throughput_kbps_;
53*6777b538SAndroid Build Coastguard Worker }
54*6777b538SAndroid Build Coastguard Worker 
IsFaster(const NetworkQuality & other) const55*6777b538SAndroid Build Coastguard Worker bool NetworkQuality::IsFaster(const NetworkQuality& other) const {
56*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
57*6777b538SAndroid Build Coastguard Worker   return (http_rtt() == InvalidRTT() || other.http_rtt() == InvalidRTT() ||
58*6777b538SAndroid Build Coastguard Worker           http_rtt() <= other.http_rtt()) &&
59*6777b538SAndroid Build Coastguard Worker          (transport_rtt() == InvalidRTT() ||
60*6777b538SAndroid Build Coastguard Worker           other.transport_rtt() == InvalidRTT() ||
61*6777b538SAndroid Build Coastguard Worker           transport_rtt() <= other.transport_rtt()) &&
62*6777b538SAndroid Build Coastguard Worker          (downstream_throughput_kbps() == INVALID_RTT_THROUGHPUT ||
63*6777b538SAndroid Build Coastguard Worker           other.downstream_throughput_kbps() == INVALID_RTT_THROUGHPUT ||
64*6777b538SAndroid Build Coastguard Worker           downstream_throughput_kbps() >= other.downstream_throughput_kbps());
65*6777b538SAndroid Build Coastguard Worker }
66*6777b538SAndroid Build Coastguard Worker 
VerifyValueCorrectness() const67*6777b538SAndroid Build Coastguard Worker void NetworkQuality::VerifyValueCorrectness() const {
68*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
69*6777b538SAndroid Build Coastguard Worker   DCHECK_LE(INVALID_RTT_THROUGHPUT, http_rtt_.InMilliseconds());
70*6777b538SAndroid Build Coastguard Worker   DCHECK_LE(INVALID_RTT_THROUGHPUT, transport_rtt_.InMilliseconds());
71*6777b538SAndroid Build Coastguard Worker   DCHECK_LE(INVALID_RTT_THROUGHPUT, downstream_throughput_kbps_);
72*6777b538SAndroid Build Coastguard Worker }
73*6777b538SAndroid Build Coastguard Worker 
74*6777b538SAndroid Build Coastguard Worker }  // namespace net::nqe::internal
75