| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
ig_retrieval_params.h" | 5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
ig_retrieval_params.h" |
| 6 | 6 |
| 7 #include "base/metrics/field_trial.h" | 7 #include "base/metrics/field_trial.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 } | 46 } |
| 47 | 47 |
| 48 // Retrieves the boolean stored in |variation| from the field trial group | 48 // Retrieves the boolean stored in |variation| from the field trial group |
| 49 // |group|. If the value is not present or cannot be parsed, returns | 49 // |group|. If the value is not present or cannot be parsed, returns |
| 50 // |default_value|. | 50 // |default_value|. |
| 51 bool GetVariationBoolWithDefault(const char* group, | 51 bool GetVariationBoolWithDefault(const char* group, |
| 52 const char* variation, | 52 const char* variation, |
| 53 bool default_value) { | 53 bool default_value) { |
| 54 std::string variation_value = | 54 std::string variation_value = |
| 55 variations::GetVariationParamValue(group, variation); | 55 variations::GetVariationParamValue(group, variation); |
| 56 int64 variation_numeric; | 56 int64_t variation_numeric; |
| 57 if (variation_value.empty() || | 57 if (variation_value.empty() || |
| 58 !base::StringToInt64(variation_value, &variation_numeric)) { | 58 !base::StringToInt64(variation_value, &variation_numeric)) { |
| 59 return default_value; | 59 return default_value; |
| 60 } | 60 } |
| 61 | 61 |
| 62 return variation_numeric != 0; | 62 return variation_numeric != 0; |
| 63 } | 63 } |
| 64 | 64 |
| 65 // Retrieves the int64 stored in |variation| from the field trial group | 65 // Retrieves the int64_t stored in |variation| from the field trial group |
| 66 // |group|. If the value is not present, cannot be parsed, or is less than | 66 // |group|. If the value is not present, cannot be parsed, or is less than |
| 67 // |min_value|, returns |default_value|. | 67 // |min_value|, returns |default_value|. |
| 68 int64 GetVariationInt64WithDefault(const char* group, | 68 int64_t GetVariationInt64WithDefault(const char* group, |
| 69 const char* variation, | 69 const char* variation, |
| 70 int64 default_value, | 70 int64_t default_value, |
| 71 int64 min_value) { | 71 int64_t min_value) { |
| 72 DCHECK(default_value >= min_value); | 72 DCHECK(default_value >= min_value); |
| 73 std::string variation_value = | 73 std::string variation_value = |
| 74 variations::GetVariationParamValue(group, variation); | 74 variations::GetVariationParamValue(group, variation); |
| 75 int64 variation_numeric; | 75 int64_t variation_numeric; |
| 76 if (variation_value.empty() || | 76 if (variation_value.empty() || |
| 77 !base::StringToInt64(variation_value, &variation_numeric) || | 77 !base::StringToInt64(variation_value, &variation_numeric) || |
| 78 variation_numeric < min_value) { | 78 variation_numeric < min_value) { |
| 79 return default_value; | 79 return default_value; |
| 80 } | 80 } |
| 81 | 81 |
| 82 return variation_numeric; | 82 return variation_numeric; |
| 83 } | 83 } |
| 84 | 84 |
| 85 // Retrieves the double stored in |variation| from the field trial group | 85 // Retrieves the double stored in |variation| from the field trial group |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 if (!group.starts_with(kEnabled)) | 133 if (!group.starts_with(kEnabled)) |
| 134 return scoped_ptr<DataReductionProxyConfigRetrievalParams>(); | 134 return scoped_ptr<DataReductionProxyConfigRetrievalParams>(); |
| 135 | 135 |
| 136 base::Time now = base::Time::Now(); | 136 base::Time now = base::Time::Now(); |
| 137 base::Time config_retrieve; | 137 base::Time config_retrieve; |
| 138 bool config_always_stale = GetVariationBoolWithDefault( | 138 bool config_always_stale = GetVariationBoolWithDefault( |
| 139 kConfigFetchTrialGroup, kConfigAlwaysStaleParam, false); | 139 kConfigFetchTrialGroup, kConfigAlwaysStaleParam, false); |
| 140 if (config_always_stale) { | 140 if (config_always_stale) { |
| 141 config_retrieve = base::Time(); | 141 config_retrieve = base::Time(); |
| 142 } else { | 142 } else { |
| 143 int64 config_retrieve_value = | 143 int64_t config_retrieve_value = |
| 144 pref_service->GetInt64(prefs::kSimulatedConfigRetrieveTime); | 144 pref_service->GetInt64(prefs::kSimulatedConfigRetrieveTime); |
| 145 config_retrieve = base::Time::FromInternalValue(config_retrieve_value); | 145 config_retrieve = base::Time::FromInternalValue(config_retrieve_value); |
| 146 if (config_retrieve > now) | 146 if (config_retrieve > now) |
| 147 config_retrieve = base::Time(); | 147 config_retrieve = base::Time(); |
| 148 } | 148 } |
| 149 | 149 |
| 150 int64 config_expiration_interval_seconds = GetVariationInt64WithDefault( | 150 int64_t config_expiration_interval_seconds = GetVariationInt64WithDefault( |
| 151 kConfigFetchTrialGroup, kConfigExpirationSecondsParam, | 151 kConfigFetchTrialGroup, kConfigExpirationSecondsParam, |
| 152 kConfigFetchDefaultExpirationSeconds, | 152 kConfigFetchDefaultExpirationSeconds, |
| 153 kConfigFetchMinimumExpirationSeconds); | 153 kConfigFetchMinimumExpirationSeconds); |
| 154 base::TimeDelta config_expiration_interval = | 154 base::TimeDelta config_expiration_interval = |
| 155 base::TimeDelta::FromSeconds(config_expiration_interval_seconds); | 155 base::TimeDelta::FromSeconds(config_expiration_interval_seconds); |
| 156 base::Time config_expiration = config_retrieve + config_expiration_interval; | 156 base::Time config_expiration = config_retrieve + config_expiration_interval; |
| 157 std::vector<Variation> variations; | 157 std::vector<Variation> variations; |
| 158 bool expired_config = (now > config_expiration); | 158 bool expired_config = (now > config_expiration); |
| 159 if (expired_config) { | 159 if (expired_config) { |
| 160 config_expiration = now + config_expiration_interval; | 160 config_expiration = now + config_expiration_interval; |
| 161 | 161 |
| 162 int64 config_roundtrip_milliseconds = GetVariationInt64WithDefault( | 162 int64_t config_roundtrip_milliseconds = GetVariationInt64WithDefault( |
| 163 kConfigFetchTrialGroup, kConfigRoundtripMillisecondsBaseParam, | 163 kConfigFetchTrialGroup, kConfigRoundtripMillisecondsBaseParam, |
| 164 kConfigFetchDefaultRoundtripMillisecondsBase, 0); | 164 kConfigFetchDefaultRoundtripMillisecondsBase, 0); |
| 165 double config_roundtrip_multiplier = GetVariationDoubleWithDefault( | 165 double config_roundtrip_multiplier = GetVariationDoubleWithDefault( |
| 166 kConfigFetchTrialGroup, kConfigRoundtripMultiplierParam, | 166 kConfigFetchTrialGroup, kConfigRoundtripMultiplierParam, |
| 167 kConfigFetchDefaultRoundtripMultiplier, 1.0); | 167 kConfigFetchDefaultRoundtripMultiplier, 1.0); |
| 168 int64 roundtrip_milliseconds_increment = GetVariationInt64WithDefault( | 168 int64_t roundtrip_milliseconds_increment = GetVariationInt64WithDefault( |
| 169 kConfigFetchTrialGroup, kConfigRoundtripMillisecondsIncrementParam, | 169 kConfigFetchTrialGroup, kConfigRoundtripMillisecondsIncrementParam, |
| 170 kConfigFetchDefaultRoundtripMillisecondsIncrement, 0); | 170 kConfigFetchDefaultRoundtripMillisecondsIncrement, 0); |
| 171 | 171 |
| 172 for (int params_index = 0; params_index < kConfigFetchGroups; | 172 for (int params_index = 0; params_index < kConfigFetchGroups; |
| 173 ++params_index) { | 173 ++params_index) { |
| 174 base::Time config_retrieved = now + base::TimeDelta::FromMilliseconds( | 174 base::Time config_retrieved = now + base::TimeDelta::FromMilliseconds( |
| 175 config_roundtrip_milliseconds); | 175 config_roundtrip_milliseconds); |
| 176 variations.push_back(Variation(params_index, config_retrieved)); | 176 variations.push_back(Variation(params_index, config_retrieved)); |
| 177 config_roundtrip_milliseconds *= config_roundtrip_multiplier; | 177 config_roundtrip_milliseconds *= config_roundtrip_multiplier; |
| 178 config_roundtrip_milliseconds += roundtrip_milliseconds_increment; | 178 config_roundtrip_milliseconds += roundtrip_milliseconds_increment; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 205 request_time < simulated_config_retrieved_) { | 205 request_time < simulated_config_retrieved_) { |
| 206 return DataReductionProxyConfigRetrievalParams::RETRIEVING; | 206 return DataReductionProxyConfigRetrievalParams::RETRIEVING; |
| 207 } else if (request_time < config_expiration) { | 207 } else if (request_time < config_expiration) { |
| 208 return DataReductionProxyConfigRetrievalParams::VALID; | 208 return DataReductionProxyConfigRetrievalParams::VALID; |
| 209 } | 209 } |
| 210 | 210 |
| 211 return DataReductionProxyConfigRetrievalParams::EXPIRED; | 211 return DataReductionProxyConfigRetrievalParams::EXPIRED; |
| 212 } | 212 } |
| 213 | 213 |
| 214 void DataReductionProxyConfigRetrievalParams::Variation::RecordStats( | 214 void DataReductionProxyConfigRetrievalParams::Variation::RecordStats( |
| 215 int64 received_content_length, | 215 int64_t received_content_length, |
| 216 int64 original_content_length) const { | 216 int64_t original_content_length) const { |
| 217 lost_bytes_rcl_->Add(received_content_length); | 217 lost_bytes_rcl_->Add(received_content_length); |
| 218 lost_bytes_ocl_->Add(original_content_length); | 218 lost_bytes_ocl_->Add(original_content_length); |
| 219 int64 content_length_diff = original_content_length - received_content_length; | 219 int64_t content_length_diff = |
| 220 original_content_length - received_content_length; |
| 220 if (content_length_diff > 0) | 221 if (content_length_diff > 0) |
| 221 lost_bytes_diff_->Add(content_length_diff); | 222 lost_bytes_diff_->Add(content_length_diff); |
| 222 } | 223 } |
| 223 | 224 |
| 224 DataReductionProxyConfigRetrievalParams:: | 225 DataReductionProxyConfigRetrievalParams:: |
| 225 DataReductionProxyConfigRetrievalParams( | 226 DataReductionProxyConfigRetrievalParams( |
| 226 bool loaded_expired_config, | 227 bool loaded_expired_config, |
| 227 const std::vector<Variation>& variations, | 228 const std::vector<Variation>& variations, |
| 228 const base::Time& config_expiration, | 229 const base::Time& config_expiration, |
| 229 const base::TimeDelta& config_expiration_interval) | 230 const base::TimeDelta& config_expiration_interval) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 240 base::TimeDelta::FromSeconds(kConfigFetchMinimumIntervalSeconds); | 241 base::TimeDelta::FromSeconds(kConfigFetchMinimumIntervalSeconds); |
| 241 } | 242 } |
| 242 } | 243 } |
| 243 | 244 |
| 244 DataReductionProxyConfigRetrievalParams:: | 245 DataReductionProxyConfigRetrievalParams:: |
| 245 ~DataReductionProxyConfigRetrievalParams() { | 246 ~DataReductionProxyConfigRetrievalParams() { |
| 246 } | 247 } |
| 247 | 248 |
| 248 void DataReductionProxyConfigRetrievalParams::RecordStats( | 249 void DataReductionProxyConfigRetrievalParams::RecordStats( |
| 249 const base::Time& request_time, | 250 const base::Time& request_time, |
| 250 int64 received_content_length, | 251 int64_t received_content_length, |
| 251 int64 original_content_length) const { | 252 int64_t original_content_length) const { |
| 252 for (const auto& variation : variations_) { | 253 for (const auto& variation : variations_) { |
| 253 switch (variation.GetState(request_time, config_expiration_)) { | 254 switch (variation.GetState(request_time, config_expiration_)) { |
| 254 case VALID: | 255 case VALID: |
| 255 break; | 256 break; |
| 256 case RETRIEVING: | 257 case RETRIEVING: |
| 257 case EXPIRED: | 258 case EXPIRED: |
| 258 variation.RecordStats(received_content_length, original_content_length); | 259 variation.RecordStats(received_content_length, original_content_length); |
| 259 break; | 260 break; |
| 260 default: | 261 default: |
| 261 NOTREACHED(); | 262 NOTREACHED(); |
| 262 } | 263 } |
| 263 } | 264 } |
| 264 } | 265 } |
| 265 | 266 |
| 266 void DataReductionProxyConfigRetrievalParams::RefreshConfig() { | 267 void DataReductionProxyConfigRetrievalParams::RefreshConfig() { |
| 267 config_expiration_ = base::Time::Now() + config_expiration_interval_; | 268 config_expiration_ = base::Time::Now() + config_expiration_interval_; |
| 268 } | 269 } |
| 269 | 270 |
| 270 } // namespace data_reduction_proxy | 271 } // namespace data_reduction_proxy |
| OLD | NEW |