mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 01:36:09 +03:00
79 lines
2.8 KiB
C++
79 lines
2.8 KiB
C++
|
// 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
|