| Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_config_retrieval_params.h
|
| diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_retrieval_params.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_retrieval_params.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..53aa10aba8fc59347e562aa5c9d96d10caf70b2b
|
| --- /dev/null
|
| +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_retrieval_params.h
|
| @@ -0,0 +1,154 @@
|
| +// 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 COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_CONFIG_RETRIEVAL_PARAMS_H_
|
| +#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_CONFIG_RETRIEVAL_PARAMS_H_
|
| +
|
| +#include <vector>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/time/time.h"
|
| +
|
| +class PrefService;
|
| +
|
| +namespace base {
|
| +class HistogramBase;
|
| +}
|
| +
|
| +namespace data_reduction_proxy {
|
| +
|
| +// The number of config fetch variations supported. Must match the number of
|
| +// suffixes in histograms.xml.
|
| +extern const int kConfigFetchGroups;
|
| +
|
| +// The name of the trial group for measuring lost bytes during fetching the
|
| +// configuration.
|
| +extern const char kConfigFetchTrialGroup[];
|
| +
|
| +// The config retrieval round trip time is calculated as:
|
| +// (previous base) * (multiplier) + increment.
|
| +// Multipler is >= 1. Increment is >= 0.
|
| +// The name of the param prefix for determining the base round trip time in
|
| +// milliseconds for simulating a configuration fetch.
|
| +extern const char kConfigRoundtripMillisecondsBaseParam[];
|
| +
|
| +// The name of the param prefix for determining the base round trip time in
|
| +// milliseconds for simulating a configuration fetch.
|
| +extern const char kConfigRoundtripMultiplierParam[];
|
| +
|
| +// The name of the param prefix for determining the base round trip time in
|
| +// milliseconds for simulating a configuration fetch.
|
| +extern const char kConfigRoundtripMillisecondsIncrementParam[];
|
| +
|
| +// The name of the param for determining the expiration interval of the
|
| +// configuration in seconds.
|
| +extern const char kConfigExpirationSecondsParam[];
|
| +
|
| +// The name of the param for determining if the config should be considered
|
| +// stale on startup (regardless of whether it is stale or not).
|
| +extern const char kConfigAlwaysStaleParam[];
|
| +
|
| +// The number of seconds by which the expiration interval exceeds the refresh
|
| +// interval so that we maintain a valid configuration.
|
| +extern const int kConfigFetchBufferSeconds;
|
| +
|
| +// Parameters for setting up an experiment to measure potentially uncompressed
|
| +// bytes during the retrieval of the Data Reduction Proxy configuration.
|
| +class DataReductionProxyConfigRetrievalParams {
|
| + public:
|
| + enum ConfigState {
|
| + VALID = 0,
|
| + RETRIEVING = 1,
|
| + EXPIRED = 2,
|
| + };
|
| +
|
| + // A variation of the simulated configuration retrieval time, permitting the
|
| + // experiment to measure multiple values.
|
| + class Variation {
|
| + public:
|
| + Variation(int index, const base::Time& simulated_config_retrieved);
|
| +
|
| + // Returns the current state of the Data Reduction Proxy configuration.
|
| + // Virtual for testing.
|
| + virtual ConfigState GetState(const base::Time& request_time,
|
| + const base::Time& config_expiration) const;
|
| +
|
| + // Records content length statistics if potentially uncompressed bytes have
|
| + // been detected for this variation.
|
| + void RecordStats(int64 received_content_length,
|
| + int64 original_content_length) const;
|
| +
|
| + // Visible for testing.
|
| + const base::Time& simulated_config_retrieved() const {
|
| + return simulated_config_retrieved_;
|
| + }
|
| +
|
| + private:
|
| + // The time at which the simulated Data Reduction Proxy configuration is
|
| + // considered to have been received.
|
| + base::Time simulated_config_retrieved_;
|
| +
|
| + // Histograms for recording stats.
|
| + base::HistogramBase* lost_bytes_ocl_;
|
| + base::HistogramBase* lost_bytes_rcl_;
|
| + base::HistogramBase* lost_bytes_diff_;
|
| + };
|
| +
|
| + static scoped_ptr<DataReductionProxyConfigRetrievalParams> Create(
|
| + PrefService* pref_service);
|
| +
|
| + virtual ~DataReductionProxyConfigRetrievalParams();
|
| +
|
| + // Records content length statistics against any variations for which
|
| + // potentially uncompressed bytes have been detected.
|
| + void RecordStats(const base::Time& request_time,
|
| + int64 received_content_length,
|
| + int64 original_content_length) const;
|
| +
|
| + // Simulates retrieving a new configuration.
|
| + void RefreshConfig();
|
| +
|
| + bool loaded_expired_config() const { return loaded_expired_config_; }
|
| +
|
| + // Returns the expiration time of the current configuration.
|
| + const base::Time& config_expiration() const { return config_expiration_; }
|
| +
|
| + // Returns how often the configuration should be retrieved.
|
| + const base::TimeDelta& refresh_interval() const {
|
| + return config_refresh_interval_;
|
| + }
|
| +
|
| + // Visible for testing.
|
| + const std::vector<Variation>& variations() const { return variations_; }
|
| +
|
| + private:
|
| + DataReductionProxyConfigRetrievalParams(
|
| + bool loaded_expired_config,
|
| + const std::vector<Variation>& variations,
|
| + const base::Time& config_expiration,
|
| + const base::TimeDelta& config_refresh_interval);
|
| +
|
| + // Indicates that the Data Reduction Proxy configuration when loaded has
|
| + // expired.
|
| + bool loaded_expired_config_;
|
| +
|
| + // The time at which the simulated Data Reduction Proxy configuration
|
| + // expires.
|
| + base::Time config_expiration_;
|
| +
|
| + // The duration for which a Data Reduction Proxy configuration is considered
|
| + // valid.
|
| + base::TimeDelta config_expiration_interval_;
|
| +
|
| + // The duration after which a simulated retrieval of a new Data Reduction
|
| + // Proxy configuration should be performed.
|
| + base::TimeDelta config_refresh_interval_;
|
| +
|
| + // The different variations on roundtrip time that can take place.
|
| + std::vector<Variation> variations_;
|
| +};
|
| +
|
| +} // namespace data_reduction_proxy
|
| +#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_CONFIG_RETRIEVAL_PARAMS_H_
|
|
|