Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: net/base/network_quality_estimator.h

Issue 1898603002: Move Network Quality Estimator files to //net/nqe (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased, removed //net/socket/OWNERS Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/external_estimate_provider.h ('k') | net/base/network_quality_estimator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/network_quality_estimator.h
diff --git a/net/base/network_quality_estimator.h b/net/base/network_quality_estimator.h
deleted file mode 100644
index 0a386e9bed80524f4231c438a55ac3953f61c08e..0000000000000000000000000000000000000000
--- a/net/base/network_quality_estimator.h
+++ /dev/null
@@ -1,671 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef NET_BASE_NETWORK_QUALITY_ESTIMATOR_H_
-#define NET_BASE_NETWORK_QUALITY_ESTIMATOR_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <deque>
-#include <map>
-#include <memory>
-#include <string>
-#include <tuple>
-
-#include "base/compiler_specific.h"
-#include "base/gtest_prod_util.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
-#include "base/threading/thread_checker.h"
-#include "base/time/time.h"
-#include "net/base/external_estimate_provider.h"
-#include "net/base/net_export.h"
-#include "net/base/network_change_notifier.h"
-#include "net/base/socket_performance_watcher_factory.h"
-
-namespace base {
-class SingleThreadTaskRunner;
-} // namespace base
-
-namespace net {
-
-class URLRequest;
-
-// NetworkQualityEstimator provides network quality estimates (quality of the
-// full paths to all origins that have been connected to).
-// The estimates are based on the observed organic traffic.
-// A NetworkQualityEstimator instance is attached to URLRequestContexts and
-// observes the traffic of URLRequests spawned from the URLRequestContexts.
-// A single instance of NQE can be attached to multiple URLRequestContexts,
-// thereby increasing the single NQE instance's accuracy by providing more
-// observed traffic characteristics.
-class NET_EXPORT_PRIVATE NetworkQualityEstimator
- : public NetworkChangeNotifier::ConnectionTypeObserver,
- public ExternalEstimateProvider::UpdatedEstimateDelegate {
- public:
- // EffectiveConnectionType is the connection type whose typical performance is
- // most similar to the measured performance of the network in use. In many
- // cases, the "effective" connection type and the actual type of connection in
- // use are the same, but often a network connection performs significantly
- // different, usually worse, from its expected capabilities.
- // EffectiveConnectionType of a network is independent of if the current
- // connection is metered or not. For example, an unmetered slow connection may
- // have EFFECTIVE_CONNECTION_TYPE_SLOW_2G as its effective connection type.
- enum EffectiveConnectionType {
- // The connection types should be in increasing order of quality.
- EFFECTIVE_CONNECTION_TYPE_UNKNOWN = 0,
- EFFECTIVE_CONNECTION_TYPE_OFFLINE,
- EFFECTIVE_CONNECTION_TYPE_SLOW_2G,
- EFFECTIVE_CONNECTION_TYPE_2G,
- EFFECTIVE_CONNECTION_TYPE_3G,
- EFFECTIVE_CONNECTION_TYPE_4G,
- EFFECTIVE_CONNECTION_TYPE_BROADBAND,
- EFFECTIVE_CONNECTION_TYPE_LAST,
- };
-
- // On Android, a Java counterpart will be generated for this enum.
- // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.net
- // GENERATED_JAVA_CLASS_NAME_OVERRIDE: NetworkQualityObservationSource
- // GENERATED_JAVA_PREFIX_TO_STRIP:
- enum ObservationSource {
- // The observation was taken at the request layer, e.g., a round trip time
- // is recorded as the time between the request being sent and the first byte
- // being received.
- URL_REQUEST,
- // The observation is taken from TCP statistics maintained by the kernel.
- TCP,
- // The observation is taken at the QUIC layer.
- QUIC,
- // The observation is a previously cached estimate of the metric.
- CACHED_ESTIMATE,
- // The observation is derived from network connection information provided
- // by the platform. For example, typical RTT and throughput values are used
- // for a given type of network connection.
- DEFAULT_FROM_PLATFORM,
- // The observation came from a Chromium-external source.
- EXTERNAL_ESTIMATE
- };
-
- // Observes measurements of round trip time.
- class NET_EXPORT_PRIVATE RTTObserver {
- public:
- // Will be called when a new RTT observation is available. The round trip
- // time is specified in milliseconds. The time when the observation was
- // taken and the source of the observation are provided.
- virtual void OnRTTObservation(int32_t rtt_ms,
- const base::TimeTicks& timestamp,
- ObservationSource source) = 0;
-
- protected:
- RTTObserver() {}
- virtual ~RTTObserver() {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(RTTObserver);
- };
-
- // Observes measurements of throughput.
- class NET_EXPORT_PRIVATE ThroughputObserver {
- public:
- // Will be called when a new throughput observation is available.
- // Throughput is specified in kilobits per second.
- virtual void OnThroughputObservation(int32_t throughput_kbps,
- const base::TimeTicks& timestamp,
- ObservationSource source) = 0;
-
- protected:
- ThroughputObserver() {}
- virtual ~ThroughputObserver() {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ThroughputObserver);
- };
-
- // Creates a new NetworkQualityEstimator.
- // |variation_params| is the map containing all field trial parameters
- // related to NetworkQualityEstimator field trial.
- // |external_estimates_provider| may be NULL.
- NetworkQualityEstimator(
- std::unique_ptr<ExternalEstimateProvider> external_estimates_provider,
- const std::map<std::string, std::string>& variation_params);
-
- // Construct a NetworkQualityEstimator instance allowing for test
- // configuration. Registers for network type change notifications so estimates
- // can be kept network specific.
- // |external_estimates_provider| may be NULL.
- // |variation_params| is the map containing all field trial parameters for the
- // network quality estimator field trial.
- // |allow_local_host_requests_for_tests| should only be true when testing
- // against local HTTP server and allows the requests to local host to be
- // used for network quality estimation.
- // |allow_smaller_responses_for_tests| should only be true when testing.
- // Allows the responses smaller than |kMinTransferSizeInBytes| or shorter than
- // |kMinRequestDurationMicroseconds| to be used for network quality
- // estimation.
- NetworkQualityEstimator(
- std::unique_ptr<ExternalEstimateProvider> external_estimates_provider,
- const std::map<std::string, std::string>& variation_params,
- bool allow_local_host_requests_for_tests,
- bool allow_smaller_responses_for_tests);
-
- ~NetworkQualityEstimator() override;
-
- // Returns the effective type of the current connection.
- EffectiveConnectionType GetEffectiveConnectionType() const;
-
- // Returns true if RTT is available and sets |rtt| to estimated RTT at the
- // HTTP layer. Virtualized for testing. |rtt| should not be null. The RTT at
- // the HTTP layer measures the time from when the request was sent (this
- // happens after the connection is established) to the time when the response
- // headers were received.
- virtual bool GetURLRequestRTTEstimate(base::TimeDelta* rtt) const
- WARN_UNUSED_RESULT;
-
- // Returns true if downlink throughput is available and sets |kbps| to
- // estimated downlink throughput (in kilobits per second).
- // Virtualized for testing. |kbps| should not be null.
- virtual bool GetDownlinkThroughputKbpsEstimate(int32_t* kbps) const;
-
- // Notifies NetworkQualityEstimator that the response header of |request| has
- // been received.
- void NotifyHeadersReceived(const URLRequest& request);
-
- // Notifies NetworkQualityEstimator that the response body of |request| has
- // been received.
- void NotifyRequestCompleted(const URLRequest& request);
-
- // Returns true if median RTT at the HTTP layer is available and sets |rtt|
- // to the median of RTT observations since |begin_timestamp|.
- // Virtualized for testing. |rtt| should not be null. The RTT at the HTTP
- // layer measures the time from when the request was sent (this happens after
- // the connection is established) to the time when the response headers were
- // received.
- virtual bool GetRecentURLRequestRTTMedian(
- const base::TimeTicks& begin_timestamp,
- base::TimeDelta* rtt) const WARN_UNUSED_RESULT;
-
- // Returns true if median downstream throughput is available and sets |kbps|
- // to the median of downstream throughput (in kilobits per second)
- // observations since |begin_timestamp|. Virtualized for testing. |kbps|
- // should not be null.
- virtual bool GetRecentMedianDownlinkThroughputKbps(
- const base::TimeTicks& begin_timestamp,
- int32_t* kbps) const WARN_UNUSED_RESULT;
-
- // Adds |rtt_observer| to the list of round trip time observers. Must be
- // called on the IO thread.
- void AddRTTObserver(RTTObserver* rtt_observer);
-
- // Removes |rtt_observer| from the list of round trip time observers if it
- // is on the list of observers. Must be called on the IO thread.
- void RemoveRTTObserver(RTTObserver* rtt_observer);
-
- // Adds |throughput_observer| to the list of throughput observers. Must be
- // called on the IO thread.
- void AddThroughputObserver(ThroughputObserver* throughput_observer);
-
- // Removes |throughput_observer| from the list of throughput observers if it
- // is on the list of observers. Must be called on the IO thread.
- void RemoveThroughputObserver(ThroughputObserver* throughput_observer);
-
- SocketPerformanceWatcherFactory* GetSocketPerformanceWatcherFactory();
-
- protected:
- // NetworkID is used to uniquely identify a network.
- // For the purpose of network quality estimation and caching, a network is
- // uniquely identified by a combination of |type| and
- // |id|. This approach is unable to distinguish networks with
- // same name (e.g., different Wi-Fi networks with same SSID).
- // This is a protected member to expose it to tests.
- struct NET_EXPORT_PRIVATE NetworkID {
- NetworkID(NetworkChangeNotifier::ConnectionType type, const std::string& id)
- : type(type), id(id) {}
- NetworkID(const NetworkID& other) : type(other.type), id(other.id) {}
- ~NetworkID() {}
-
- NetworkID& operator=(const NetworkID& other) {
- type = other.type;
- id = other.id;
- return *this;
- }
-
- // Overloaded because NetworkID is used as key in a map.
- bool operator<(const NetworkID& other) const {
- return std::tie(type, id) < std::tie(other.type, other.id);
- }
-
- // Connection type of the network.
- NetworkChangeNotifier::ConnectionType type;
-
- // Name of this network. This is set to:
- // - Wi-Fi SSID if the device is connected to a Wi-Fi access point and the
- // SSID name is available, or
- // - MCC/MNC code of the cellular carrier if the device is connected to a
- // cellular network, or
- // - "Ethernet" in case the device is connected to ethernet.
- // - An empty string in all other cases or if the network name is not
- // exposed by platform APIs.
- std::string id;
- };
-
- // Returns true if the cached network quality estimate was successfully read.
- bool ReadCachedNetworkQualityEstimate();
-
- // NetworkChangeNotifier::ConnectionTypeObserver implementation:
- void OnConnectionTypeChanged(
- NetworkChangeNotifier::ConnectionType type) override;
-
- // ExternalEstimateProvider::UpdatedEstimateObserver implementation.
- void OnUpdatedEstimateAvailable() override;
-
- // Return a string equivalent to |type|.
- const char* GetNameForEffectiveConnectionType(
- EffectiveConnectionType type) const;
-
- private:
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, StoreObservations);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, TestAddObservation);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, ObtainOperatingParams);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, HalfLifeParam);
- FRIEND_TEST_ALL_PREFIXES(URLRequestTestHTTP, NetworkQualityEstimator);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest,
- PercentileSameTimestamps);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest,
- PercentileDifferentTimestamps);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, ComputedPercentiles);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, TestCaching);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest,
- TestLRUCacheMaximumSize);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, TestGetMedianRTTSince);
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest,
- TestExternalEstimateProviderMergeEstimates);
-
- class SocketWatcher;
- class SocketWatcherFactory;
-
- // NetworkQuality is used to cache the quality of a network connection.
- class NET_EXPORT_PRIVATE NetworkQuality {
- public:
- NetworkQuality();
- // |rtt| is the estimate of the round trip time.
- // |downstream_throughput_kbps| is the estimate of the downstream
- // throughput in kilobits per second.
- NetworkQuality(const base::TimeDelta& rtt,
- int32_t downstream_throughput_kbps);
- NetworkQuality(const NetworkQuality& other);
- ~NetworkQuality();
-
- NetworkQuality& operator=(const NetworkQuality& other);
-
- // Returns the estimate of the round trip time.
- const base::TimeDelta& rtt() const { return rtt_; }
-
- // Returns the estimate of the downstream throughput in Kbps (Kilobits per
- // second).
- int32_t downstream_throughput_kbps() const {
- return downstream_throughput_kbps_;
- }
-
- private:
- // Estimated round trip time.
- base::TimeDelta rtt_;
-
- // Estimated downstream throughput in kilobits per second.
- int32_t downstream_throughput_kbps_;
- };
-
- // CachedNetworkQuality stores the quality of a previously seen network.
- class NET_EXPORT_PRIVATE CachedNetworkQuality {
- public:
- explicit CachedNetworkQuality(const NetworkQuality& network_quality);
- CachedNetworkQuality(const CachedNetworkQuality& other);
- ~CachedNetworkQuality();
-
- // Returns the network quality associated with this cached entry.
- const NetworkQuality& network_quality() const { return network_quality_; }
-
- // Returns true if this cache entry was updated before
- // |cached_network_quality|.
- bool OlderThan(const CachedNetworkQuality& cached_network_quality) const;
-
- // Time when this cache entry was last updated.
- const base::TimeTicks last_update_time_;
-
- // Quality of this cached network.
- const NetworkQuality network_quality_;
-
- private:
- DISALLOW_ASSIGN(CachedNetworkQuality);
- };
-
- // Records observations of network quality metrics (such as round trip time
- // or throughput), along with the time the observation was made. Observations
- // can be made at several places in the network stack, thus the observation
- // source is provided as well. ValueType must be numerical so that statistics
- // such as median, average can be computed.
- template <typename ValueType>
- struct NET_EXPORT_PRIVATE Observation {
- Observation(const ValueType& value,
- base::TimeTicks timestamp,
- ObservationSource source)
- : value(value), timestamp(timestamp), source(source) {
- DCHECK(!timestamp.is_null());
- }
- ~Observation() {}
-
- // Value of the observation.
- const ValueType value;
-
- // Time when the observation was taken.
- const base::TimeTicks timestamp;
-
- // The source of the observation.
- const ObservationSource source;
- };
-
- // Holds an observation and its weight.
- template <typename ValueType>
- struct NET_EXPORT_PRIVATE WeightedObservation {
- WeightedObservation(ValueType value, double weight)
- : value(value), weight(weight) {}
- WeightedObservation(const WeightedObservation& other)
- : WeightedObservation(other.value, other.weight) {}
-
- WeightedObservation& operator=(const WeightedObservation& other) {
- value = other.value;
- weight = other.weight;
- return *this;
- }
-
- // Required for sorting the samples in the ascending order of values.
- bool operator<(const WeightedObservation& other) const {
- return (value < other.value);
- }
-
- // Value of the sample.
- ValueType value;
-
- // Weight of the sample. This is computed based on how much time has passed
- // since the sample was taken.
- double weight;
- };
-
- // Stores observations sorted by time.
- template <typename ValueType>
- class NET_EXPORT_PRIVATE ObservationBuffer {
- public:
- explicit ObservationBuffer(double weight_multiplier_per_second);
- ~ObservationBuffer();
-
- // Adds |observation| to the buffer. The oldest observation in the buffer
- // will be evicted to make room if the buffer is already full.
- void AddObservation(const Observation<ValueType>& observation) {
- DCHECK_LE(observations_.size(),
- static_cast<size_t>(kMaximumObservationsBufferSize));
- // Evict the oldest element if the buffer is already full.
- if (observations_.size() == kMaximumObservationsBufferSize)
- observations_.pop_front();
-
- observations_.push_back(observation);
- DCHECK_LE(observations_.size(),
- static_cast<size_t>(kMaximumObservationsBufferSize));
- }
-
- // Clears the observations stored in this buffer.
- void Clear() { observations_.clear(); }
-
- // Returns true iff the |percentile| value of the observations in this
- // buffer is available. Sets |result| to the computed |percentile|
- // value among all observations since |begin_timestamp|. If the value is
- // unavailable, false is returned and |result| is not modified. Percentile
- // value is unavailable if all the values in observation buffer are older
- // than |begin_timestamp|. |result| must not be null.
- // |disallowed_observation_sources| is the list of observation sources that
- // should be excluded when computing the percentile.
- bool GetPercentile(
- const base::TimeTicks& begin_timestamp,
- ValueType* result,
- int percentile,
- const std::vector<ObservationSource>& disallowed_observation_sources)
- const WARN_UNUSED_RESULT;
-
- private:
- FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, HalfLifeParam);
-
- // Computes the weighted observations and stores them in
- // |weighted_observations| sorted by ascending |WeightedObservation.value|.
- // Only the observations with timestamp later than |begin_timestamp| are
- // considered. Also, sets |total_weight| to the total weight of all
- // observations. Should be called only when there is at least one
- // observation in the buffer. |disallowed_observation_sources| is the list
- // of observation sources that should be excluded when computing the
- // weighted observations.
- void ComputeWeightedObservations(
- const base::TimeTicks& begin_timestamp,
- std::vector<WeightedObservation<ValueType>>& weighted_observations,
- double* total_weight,
- const std::vector<ObservationSource>& disallowed_observation_sources)
- const;
-
- // Holds observations sorted by time, with the oldest observation at the
- // front of the queue.
- std::deque<Observation<ValueType>> observations_;
-
- // The factor by which the weight of an observation reduces every second.
- // For example, if an observation is 6 seconds old, its weight would be:
- // weight_multiplier_per_second_ ^ 6
- // Calculated from |kHalfLifeSeconds| by solving the following equation:
- // weight_multiplier_per_second_ ^ kHalfLifeSeconds = 0.5
- const double weight_multiplier_per_second_;
-
- DISALLOW_COPY_AND_ASSIGN(ObservationBuffer);
- };
-
- // Value of round trip time observations is in base::TimeDelta.
- typedef net::NetworkQualityEstimator::Observation<base::TimeDelta>
- RttObservation;
- typedef net::NetworkQualityEstimator::ObservationBuffer<base::TimeDelta>
- RttObservationBuffer;
-
- // Value of throughput observations is in kilobits per second.
- typedef net::NetworkQualityEstimator::Observation<int32_t>
- ThroughputObservation;
- typedef net::NetworkQualityEstimator::ObservationBuffer<int32_t>
- ThroughputObservationBuffer;
-
- // This does not use a unordered_map or hash_map for code simplicity (key just
- // implements operator<, rather than hash and equality) and because the map is
- // tiny.
- typedef std::map<NetworkID, CachedNetworkQuality> CachedNetworkQualities;
-
- // Throughput is set to |kInvalidThroughput| if a valid value is
- // unavailable. Readers should discard throughput value if it is set to
- // |kInvalidThroughput|.
- static const int32_t kInvalidThroughput;
-
- // Tiny transfer sizes may give inaccurate throughput results.
- // Minimum size of the transfer over which the throughput is computed.
- static const int kMinTransferSizeInBytes = 10000;
-
- // Minimum duration (in microseconds) of the transfer over which the
- // throughput is computed.
- static const int kMinRequestDurationMicroseconds = 1000;
-
- // Minimum valid value of the variation parameter that holds RTT (in
- // milliseconds) values.
- static const int kMinimumRTTVariationParameterMsec = 1;
-
- // Minimum valid value of the variation parameter that holds throughput (in
- // kilobits per second) values.
- static const int kMinimumThroughputVariationParameterKbps = 1;
-
- // Maximum size of the cache that holds network quality estimates.
- // Smaller size may reduce the cache hit rate due to frequent evictions.
- // Larger size may affect performance.
- static const size_t kMaximumNetworkQualityCacheSize = 10;
-
- // Maximum number of observations that can be held in the ObservationBuffer.
- static const size_t kMaximumObservationsBufferSize = 300;
-
- // Time duration (in milliseconds) after which the estimate provided by
- // external estimate provider is considered stale.
- static const int kExternalEstimateProviderFreshnessDurationMsec =
- 5 * 60 * 1000;
-
- // Returns the RTT value to be used when the valid RTT is unavailable. Readers
- // should discard RTT if it is set to the value returned by |InvalidRTT()|.
- static const base::TimeDelta InvalidRTT();
-
- // Notifies |this| of a new transport layer RTT.
- void OnUpdatedRTTAvailable(SocketPerformanceWatcherFactory::Protocol protocol,
- const base::TimeDelta& rtt);
-
- // Queries the external estimate provider for the latest network quality
- // estimates, and adds those estimates to the current observation buffer.
- void QueryExternalEstimateProvider();
-
- // Obtains operating parameters from the field trial parameters.
- void ObtainOperatingParams(
- const std::map<std::string, std::string>& variation_params);
-
- // Obtains the model parameters for different effective connection types from
- // the field trial parameters. For each effective connection type, a model
- // (currently composed of a RTT threshold and a downlink throughput threshold)
- // is provided by the field trial.
- void ObtainEffectiveConnectionTypeModelParams(
- const std::map<std::string, std::string>& variation_params);
-
- // Adds the default median RTT and downstream throughput estimate for the
- // current connection type to the observation buffer.
- void AddDefaultEstimates();
-
- // Returns an estimate of network quality at the specified |percentile|.
- // |disallowed_observation_sources| is the list of observation sources that
- // should be excluded when computing the percentile.
- // Only the observations later than |begin_timestamp| are taken into account.
- // |percentile| must be between 0 and 100 (both inclusive) with higher
- // percentiles indicating less performant networks. For example, if
- // |percentile| is 90, then the network is expected to be faster than the
- // returned estimate with 0.9 probability. Similarly, network is expected to
- // be slower than the returned estimate with 0.1 probability.
- base::TimeDelta GetRTTEstimateInternal(
- const std::vector<ObservationSource>& disallowed_observation_sources,
- const base::TimeTicks& begin_timestamp,
- int percentile) const;
- int32_t GetDownlinkThroughputKbpsEstimateInternal(
- const base::TimeTicks& begin_timestamp,
- int percentile) const;
-
- // Returns the current network ID checking by calling the platform APIs.
- // Virtualized for testing.
- virtual NetworkID GetCurrentNetworkID() const;
-
- // Writes the estimated quality of the current network to the cache.
- void CacheNetworkQualityEstimate();
-
- void NotifyObserversOfRTT(const RttObservation& observation);
-
- void NotifyObserversOfThroughput(const ThroughputObservation& observation);
-
- // Records the UMA related to RTT.
- void RecordRTTUMA(int32_t estimated_value_msec,
- int32_t actual_value_msec) const;
-
- // Returns true only if |request| can be used for network quality estimation.
- // Only the requests that go over network are considered to provide useful
- // observations.
- bool RequestProvidesUsefulObservations(const URLRequest& request) const;
-
- // Values of external estimate provider status. This enum must remain
- // synchronized with the enum of the same name in
- // metrics/histograms/histograms.xml.
- enum NQEExternalEstimateProviderStatus {
- EXTERNAL_ESTIMATE_PROVIDER_STATUS_NOT_AVAILABLE,
- EXTERNAL_ESTIMATE_PROVIDER_STATUS_AVAILABLE,
- EXTERNAL_ESTIMATE_PROVIDER_STATUS_QUERIED,
- EXTERNAL_ESTIMATE_PROVIDER_STATUS_QUERY_SUCCESSFUL,
- EXTERNAL_ESTIMATE_PROVIDER_STATUS_CALLBACK,
- EXTERNAL_ESTIMATE_PROVIDER_STATUS_RTT_AVAILABLE,
- EXTERNAL_ESTIMATE_PROVIDER_STATUS_DOWNLINK_BANDWIDTH_AVAILABLE,
- EXTERNAL_ESTIMATE_PROVIDER_STATUS_BOUNDARY
- };
-
- // Records the metrics related to external estimate provider.
- void RecordExternalEstimateProviderMetrics(
- NQEExternalEstimateProviderStatus status) const;
-
- // Determines if the requests to local host can be used in estimating the
- // network quality. Set to true only for tests.
- const bool allow_localhost_requests_;
-
- // Determines if the responses smaller than |kMinTransferSizeInBytes|
- // or shorter than |kMinTransferSizeInBytes| can be used in estimating the
- // network quality. Set to true only for tests.
- const bool allow_small_responses_;
-
- // The factor by which the weight of an observation reduces every second.
- const double weight_multiplier_per_second_;
-
- // Time when last connection change was observed.
- base::TimeTicks last_connection_change_;
-
- // ID of the current network.
- NetworkID current_network_id_;
-
- // Peak network quality (fastest round-trip-time (RTT) and highest
- // downstream throughput) measured since last connectivity change. RTT is
- // measured from time the request is sent until the first byte received.
- // The accuracy is decreased by ignoring these factors:
- // 1) Multiple URLRequests can occur concurrently.
- // 2) Includes server processing time.
- NetworkQuality peak_network_quality_;
-
- // Cache that stores quality of previously seen networks.
- CachedNetworkQualities cached_network_qualities_;
-
- // Buffer that holds throughput observations (in kilobits per second) sorted
- // by timestamp.
- ThroughputObservationBuffer downstream_throughput_kbps_observations_;
-
- // Buffer that holds RTT observations sorted by timestamp.
- RttObservationBuffer rtt_observations_;
-
- // Default network quality observations obtained from the network quality
- // estimator field trial parameters. The observations are indexed by
- // ConnectionType.
- NetworkQuality
- default_observations_[NetworkChangeNotifier::CONNECTION_LAST + 1];
-
- // Thresholds for different effective connection types obtained from field
- // trial variation params. These thresholds encode how different connection
- // types behave in general. In future, complex encodings (e.g., curve
- // fitting) may be used.
- NetworkQuality connection_thresholds_[EFFECTIVE_CONNECTION_TYPE_LAST];
-
- // Estimated network quality. Updated on mainframe requests.
- NetworkQuality estimated_median_network_quality_;
-
- // ExternalEstimateProvider that provides network quality using operating
- // system APIs. May be NULL.
- const std::unique_ptr<ExternalEstimateProvider> external_estimate_provider_;
-
- // Observer lists for round trip times and throughput measurements.
- base::ObserverList<RTTObserver> rtt_observer_list_;
- base::ObserverList<ThroughputObserver> throughput_observer_list_;
-
- std::unique_ptr<SocketPerformanceWatcherFactory> watcher_factory_;
-
- base::ThreadChecker thread_checker_;
-
- base::WeakPtrFactory<NetworkQualityEstimator> weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(NetworkQualityEstimator);
-};
-
-} // namespace net
-
-#endif // NET_BASE_NETWORK_QUALITY_ESTIMATOR_H_
« no previous file with comments | « net/base/external_estimate_provider.h ('k') | net/base/network_quality_estimator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698