OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "net/url_request/url_request_throttler_entry.h" | 5 #include "net/url_request/url_request_throttler_entry.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 new RejectedRequestParameters(url_id_, | 192 new RejectedRequestParameters(url_id_, |
193 num_failures, | 193 num_failures, |
194 release_after_ms))); | 194 release_after_ms))); |
195 | 195 |
196 reject_request = true; | 196 reject_request = true; |
197 } | 197 } |
198 | 198 |
199 int reject_count = reject_request ? 1 : 0; | 199 int reject_count = reject_request ? 1 : 0; |
200 UMA_HISTOGRAM_ENUMERATION( | 200 UMA_HISTOGRAM_ENUMERATION( |
201 "Throttling.RequestThrottled", reject_count, 2); | 201 "Throttling.RequestThrottled", reject_count, 2); |
202 if (base::FieldTrialList::TrialExists("ThrottlingEnabled")) { | 202 if (base::FieldTrialList::TrialExists("HttpThrottlingEnabled")) { |
203 UMA_HISTOGRAM_ENUMERATION(base::FieldTrial::MakeName( | 203 UMA_HISTOGRAM_ENUMERATION(base::FieldTrial::MakeName( |
204 "Throttling.RequestThrottled", "ThrottlingEnabled"), reject_count, 2); | 204 "Throttling.RequestThrottled", "HttpThrottlingEnabled"), |
| 205 reject_count, 2); |
205 } | 206 } |
206 | 207 |
207 return reject_request; | 208 return reject_request; |
208 } | 209 } |
209 | 210 |
210 int64 URLRequestThrottlerEntry::ReserveSendingTimeForNextRequest( | 211 int64 URLRequestThrottlerEntry::ReserveSendingTimeForNextRequest( |
211 const base::TimeTicks& earliest_time) { | 212 const base::TimeTicks& earliest_time) { |
212 base::TimeTicks now = ImplGetTimeNow(); | 213 base::TimeTicks now = ImplGetTimeNow(); |
213 | 214 |
214 // If a lot of requests were successfully made recently, | 215 // If a lot of requests were successfully made recently, |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 net_log_.AddEvent( | 361 net_log_.AddEvent( |
361 NetLog::TYPE_THROTTLING_GOT_CUSTOM_RETRY_AFTER, | 362 NetLog::TYPE_THROTTLING_GOT_CUSTOM_RETRY_AFTER, |
362 make_scoped_refptr(new RetryAfterParameters(url_id_, value_ms))); | 363 make_scoped_refptr(new RetryAfterParameters(url_id_, value_ms))); |
363 | 364 |
364 base::TimeDelta value = base::TimeDelta::FromMilliseconds(value_ms); | 365 base::TimeDelta value = base::TimeDelta::FromMilliseconds(value_ms); |
365 GetBackoffEntry()->SetCustomReleaseTime(ImplGetTimeNow() + value); | 366 GetBackoffEntry()->SetCustomReleaseTime(ImplGetTimeNow() + value); |
366 | 367 |
367 UMA_HISTOGRAM_CUSTOM_TIMES( | 368 UMA_HISTOGRAM_CUSTOM_TIMES( |
368 "Throttling.CustomRetryAfterMs", value, | 369 "Throttling.CustomRetryAfterMs", value, |
369 base::TimeDelta::FromSeconds(1), base::TimeDelta::FromHours(12), 50); | 370 base::TimeDelta::FromSeconds(1), base::TimeDelta::FromHours(12), 50); |
370 if (base::FieldTrialList::TrialExists("ThrottlingEnabled")) { | 371 if (base::FieldTrialList::TrialExists("HttpThrottlingEnabled")) { |
371 UMA_HISTOGRAM_CUSTOM_TIMES( | 372 UMA_HISTOGRAM_CUSTOM_TIMES( |
372 base::FieldTrial::MakeName("Throttling.CustomRetryAfterMs", | 373 base::FieldTrial::MakeName("Throttling.CustomRetryAfterMs", |
373 "ThrottlingEnabled"), value, | 374 "HttpThrottlingEnabled"), value, |
374 base::TimeDelta::FromSeconds(1), base::TimeDelta::FromHours(12), 50); | 375 base::TimeDelta::FromSeconds(1), base::TimeDelta::FromHours(12), 50); |
375 } | 376 } |
376 } | 377 } |
377 | 378 |
378 void URLRequestThrottlerEntry::HandleThrottlingHeader( | 379 void URLRequestThrottlerEntry::HandleThrottlingHeader( |
379 const std::string& header_value, | 380 const std::string& header_value, |
380 const std::string& host) { | 381 const std::string& host) { |
381 if (header_value == kExponentialThrottlingDisableValue) { | 382 if (header_value == kExponentialThrottlingDisableValue) { |
382 DisableBackoffThrottling(); | 383 DisableBackoffThrottling(); |
383 if (manager_) | 384 if (manager_) |
384 manager_->AddToOptOutList(host); | 385 manager_->AddToOptOutList(host); |
385 } else { | 386 } else { |
386 // TODO(joi): Log this. | 387 // TODO(joi): Log this. |
387 } | 388 } |
388 } | 389 } |
389 | 390 |
390 void URLRequestThrottlerEntry::HandleMetricsTracking(int response_code) { | 391 void URLRequestThrottlerEntry::HandleMetricsTracking(int response_code) { |
391 // This is essentially the same as the "Net.HttpResponseCode" UMA stat | 392 // This is essentially the same as the "Net.HttpResponseCode" UMA stat |
392 // but we are tracking it separately here for the throttling experiment | 393 // but we are tracking it separately here for the throttling experiment |
393 // to make sure we count only the responses seen by throttling. | 394 // to make sure we count only the responses seen by throttling. |
394 // TODO(joi): Remove after experiment. | 395 // TODO(joi): Remove after experiment. |
395 UMA_HISTOGRAM_ENUMERATION("Throttling.HttpResponseCode", response_code, 600); | 396 UMA_HISTOGRAM_ENUMERATION("Throttling.HttpResponseCode", response_code, 600); |
396 if (base::FieldTrialList::TrialExists("ThrottlingEnabled")) { | 397 if (base::FieldTrialList::TrialExists("HttpThrottlingEnabled")) { |
397 UMA_HISTOGRAM_ENUMERATION( | 398 UMA_HISTOGRAM_ENUMERATION( |
398 base::FieldTrial::MakeName("Throttling.HttpResponseCode", | 399 base::FieldTrial::MakeName("Throttling.HttpResponseCode", |
399 "ThrottlingEnabled"), | 400 "HttpThrottlingEnabled"), |
400 response_code, 600); | 401 response_code, 600); |
401 } | 402 } |
402 | 403 |
403 // Note that we are not interested in whether the code is considered | 404 // Note that we are not interested in whether the code is considered |
404 // an error for the backoff logic, but whether it is a 5xx error in | 405 // an error for the backoff logic, but whether it is a 5xx error in |
405 // general. This is because here, we are tracking the apparent total | 406 // general. This is because here, we are tracking the apparent total |
406 // downtime of a server. | 407 // downtime of a server. |
407 if (response_code >= 500) { | 408 if (response_code >= 500) { |
408 last_response_was_success_ = false; | 409 last_response_was_success_ = false; |
409 } else { | 410 } else { |
410 base::TimeTicks now = ImplGetTimeNow(); | 411 base::TimeTicks now = ImplGetTimeNow(); |
411 if (!last_response_was_success_) { | 412 if (!last_response_was_success_) { |
412 // We are transitioning from failure to success, so generate our stats. | 413 // We are transitioning from failure to success, so generate our stats. |
413 base::TimeDelta down_time = now - last_successful_response_time_; | 414 base::TimeDelta down_time = now - last_successful_response_time_; |
414 int failure_count = GetBackoffEntry()->failure_count(); | 415 int failure_count = GetBackoffEntry()->failure_count(); |
415 | 416 |
416 UMA_HISTOGRAM_COUNTS("Throttling.FailureCountAtSuccess", failure_count); | 417 UMA_HISTOGRAM_COUNTS("Throttling.FailureCountAtSuccess", failure_count); |
417 UMA_HISTOGRAM_CUSTOM_TIMES( | 418 UMA_HISTOGRAM_CUSTOM_TIMES( |
418 "Throttling.PerceivedDowntime", down_time, | 419 "Throttling.PerceivedDowntime", down_time, |
419 base::TimeDelta::FromMilliseconds(10), | 420 base::TimeDelta::FromMilliseconds(10), |
420 base::TimeDelta::FromHours(6), 50); | 421 base::TimeDelta::FromHours(6), 50); |
421 | 422 |
422 if (base::FieldTrialList::TrialExists("ThrottlingEnabled")) { | 423 if (base::FieldTrialList::TrialExists("HttpThrottlingEnabled")) { |
423 UMA_HISTOGRAM_COUNTS(base::FieldTrial::MakeName( | 424 UMA_HISTOGRAM_COUNTS(base::FieldTrial::MakeName( |
424 "Throttling.FailureCountAtSuccess", "ThrottlingEnabled"), | 425 "Throttling.FailureCountAtSuccess", "HttpThrottlingEnabled"), |
425 failure_count); | 426 failure_count); |
426 UMA_HISTOGRAM_CUSTOM_TIMES(base::FieldTrial::MakeName( | 427 UMA_HISTOGRAM_CUSTOM_TIMES(base::FieldTrial::MakeName( |
427 "Throttling.PerceivedDowntime", "ThrottlingEnabled"), down_time, | 428 "Throttling.PerceivedDowntime", "HttpThrottlingEnabled"), down_time, |
428 base::TimeDelta::FromMilliseconds(10), | 429 base::TimeDelta::FromMilliseconds(10), |
429 base::TimeDelta::FromHours(6), 50); | 430 base::TimeDelta::FromHours(6), 50); |
430 } | 431 } |
431 } | 432 } |
432 | 433 |
433 last_successful_response_time_ = now; | 434 last_successful_response_time_ = now; |
434 last_response_was_success_ = true; | 435 last_response_was_success_ = true; |
435 } | 436 } |
436 } | 437 } |
437 | 438 |
438 const BackoffEntry* URLRequestThrottlerEntry::GetBackoffEntry() const { | 439 const BackoffEntry* URLRequestThrottlerEntry::GetBackoffEntry() const { |
439 return &backoff_entry_; | 440 return &backoff_entry_; |
440 } | 441 } |
441 | 442 |
442 BackoffEntry* URLRequestThrottlerEntry::GetBackoffEntry() { | 443 BackoffEntry* URLRequestThrottlerEntry::GetBackoffEntry() { |
443 return &backoff_entry_; | 444 return &backoff_entry_; |
444 } | 445 } |
445 | 446 |
446 } // namespace net | 447 } // namespace net |
OLD | NEW |