| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/nqe/network_quality.h" |
| |
| namespace net { |
| namespace nqe { |
| namespace internal { |
| |
| base::TimeDelta InvalidRTT() { |
| return base::TimeDelta::FromMilliseconds(INVALID_RTT_THROUGHPUT); |
| } |
| |
| NetworkQuality::NetworkQuality() |
| : NetworkQuality(InvalidRTT(), InvalidRTT(), INVALID_RTT_THROUGHPUT) { |
| VerifyValueCorrectness(); |
| DETACH_FROM_SEQUENCE(sequence_checker_); |
| } |
| |
| NetworkQuality::NetworkQuality(const base::TimeDelta& http_rtt, |
| const base::TimeDelta& transport_rtt, |
| int32_t downstream_throughput_kbps) |
| : http_rtt_(http_rtt), |
| transport_rtt_(transport_rtt), |
| downstream_throughput_kbps_(downstream_throughput_kbps) { |
| VerifyValueCorrectness(); |
| DETACH_FROM_SEQUENCE(sequence_checker_); |
| } |
| |
| NetworkQuality::NetworkQuality(const NetworkQuality& other) |
| : NetworkQuality(other.http_rtt_, |
| other.transport_rtt_, |
| other.downstream_throughput_kbps_) { |
| VerifyValueCorrectness(); |
| DETACH_FROM_SEQUENCE(sequence_checker_); |
| } |
| |
| NetworkQuality::~NetworkQuality() = default; |
| |
| NetworkQuality& NetworkQuality::operator=(const NetworkQuality& other) { |
| http_rtt_ = other.http_rtt_; |
| transport_rtt_ = other.transport_rtt_; |
| downstream_throughput_kbps_ = other.downstream_throughput_kbps_; |
| VerifyValueCorrectness(); |
| DETACH_FROM_SEQUENCE(sequence_checker_); |
| return *this; |
| } |
| |
| bool NetworkQuality::operator==(const NetworkQuality& other) const { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| return http_rtt_ == other.http_rtt_ && |
| transport_rtt_ == other.transport_rtt_ && |
| downstream_throughput_kbps_ == other.downstream_throughput_kbps_; |
| } |
| |
| bool NetworkQuality::IsFaster(const NetworkQuality& other) const { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| return (http_rtt() == InvalidRTT() || other.http_rtt() == InvalidRTT() || |
| http_rtt() <= other.http_rtt()) && |
| (transport_rtt() == InvalidRTT() || |
| other.transport_rtt() == InvalidRTT() || |
| transport_rtt() <= other.transport_rtt()) && |
| (downstream_throughput_kbps() == INVALID_RTT_THROUGHPUT || |
| other.downstream_throughput_kbps() == INVALID_RTT_THROUGHPUT || |
| downstream_throughput_kbps() >= other.downstream_throughput_kbps()); |
| } |
| |
| void NetworkQuality::VerifyValueCorrectness() const { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| DCHECK_LE(INVALID_RTT_THROUGHPUT, http_rtt_.InMilliseconds()); |
| DCHECK_LE(INVALID_RTT_THROUGHPUT, transport_rtt_.InMilliseconds()); |
| DCHECK_LE(INVALID_RTT_THROUGHPUT, downstream_throughput_kbps_); |
| } |
| |
| } // namespace internal |
| } // namespace nqe |
| } // namespace net |