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 "webkit/quota/quota_temporary_storage_evictor.h" | 5 #include "webkit/quota/quota_temporary_storage_evictor.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
11 #include "googleurl/src/gurl.h" | 11 #include "googleurl/src/gurl.h" |
12 #include "webkit/quota/quota_manager.h" | 12 #include "webkit/quota/quota_manager.h" |
13 | 13 |
14 #define UMA_HISTOGRAM_MBYTES(name, sample) \ | 14 #define UMA_HISTOGRAM_MBYTES(name, sample) \ |
15 UMA_HISTOGRAM_CUSTOM_COUNTS( \ | 15 UMA_HISTOGRAM_CUSTOM_COUNTS( \ |
16 (name), static_cast<int>((sample) / kMBytes), \ | 16 (name), static_cast<int>((sample) / kMBytes), \ |
17 1, 10 * 1024 * 1024 /* 10TB */, 100) | 17 1, 10 * 1024 * 1024 /* 10TB */, 100) |
18 | 18 |
19 #define UMA_HISTOGRAM_MINUTES(name, sample) \ | 19 #define UMA_HISTOGRAM_MINUTES(name, sample) \ |
20 UMA_HISTOGRAM_CUSTOM_TIMES( \ | 20 UMA_HISTOGRAM_CUSTOM_TIMES( \ |
21 (name), (sample), \ | 21 (name), (sample), \ |
22 base::TimeDelta::FromMinutes(1), \ | 22 base::TimeDelta::FromMinutes(1), \ |
23 base::TimeDelta::FromDays(1), 50) | 23 base::TimeDelta::FromDays(1), 50) |
24 | 24 |
25 namespace { | 25 namespace { |
26 const int64 kMBytes = 1024 * 1024; | 26 const int64 kMBytes = 1024 * 1024; |
27 const double kUsageRatioToStartEviction = 0.7; | 27 const double kUsageRatioToStartEviction = 0.7; |
28 const int kThresholdOfErrorsToStopEviction = 5; | 28 const int kThresholdOfErrorsToStopEviction = 5; |
29 const base::TimeDelta kHistogramReportInterval = | 29 const int kHistogramReportIntervalMinutes = 60; |
30 base::TimeDelta::FromMilliseconds(60 * 60 * 1000); // 1 hour | |
31 } | 30 } |
32 | 31 |
33 namespace quota { | 32 namespace quota { |
34 | 33 |
35 const int QuotaTemporaryStorageEvictor:: | 34 const int QuotaTemporaryStorageEvictor:: |
36 kMinAvailableDiskSpaceToStartEvictionNotSpecified = -1; | 35 kMinAvailableDiskSpaceToStartEvictionNotSpecified = -1; |
37 | 36 |
38 QuotaTemporaryStorageEvictor::QuotaTemporaryStorageEvictor( | 37 QuotaTemporaryStorageEvictor::QuotaTemporaryStorageEvictor( |
39 QuotaEvictionHandler* quota_eviction_handler, | 38 QuotaEvictionHandler* quota_eviction_handler, |
40 int64 interval_ms) | 39 int64 interval_ms) |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 // Reset stats for next round. | 122 // Reset stats for next round. |
124 round_statistics_ = EvictionRoundStatistics(); | 123 round_statistics_ = EvictionRoundStatistics(); |
125 } | 124 } |
126 | 125 |
127 void QuotaTemporaryStorageEvictor::Start() { | 126 void QuotaTemporaryStorageEvictor::Start() { |
128 DCHECK(CalledOnValidThread()); | 127 DCHECK(CalledOnValidThread()); |
129 StartEvictionTimerWithDelay(0); | 128 StartEvictionTimerWithDelay(0); |
130 | 129 |
131 if (histogram_timer_.IsRunning()) | 130 if (histogram_timer_.IsRunning()) |
132 return; | 131 return; |
133 histogram_timer_.Start(FROM_HERE, kHistogramReportInterval, this, | 132 |
134 &QuotaTemporaryStorageEvictor::ReportPerHourHistogram); | 133 histogram_timer_.Start( |
| 134 FROM_HERE, base::TimeDelta::FromMinutes(kHistogramReportIntervalMinutes), |
| 135 this, &QuotaTemporaryStorageEvictor::ReportPerHourHistogram); |
135 } | 136 } |
136 | 137 |
137 void QuotaTemporaryStorageEvictor::StartEvictionTimerWithDelay(int delay_ms) { | 138 void QuotaTemporaryStorageEvictor::StartEvictionTimerWithDelay(int delay_ms) { |
138 if (eviction_timer_.IsRunning()) | 139 if (eviction_timer_.IsRunning()) |
139 return; | 140 return; |
140 eviction_timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(delay_ms), | 141 eviction_timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(delay_ms), |
141 this, &QuotaTemporaryStorageEvictor::ConsiderEviction); | 142 this, &QuotaTemporaryStorageEvictor::ConsiderEviction); |
142 } | 143 } |
143 | 144 |
144 void QuotaTemporaryStorageEvictor::ConsiderEviction() { | 145 void QuotaTemporaryStorageEvictor::ConsiderEviction() { |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 ++statistics_.num_errors_on_evicting_origin; | 244 ++statistics_.num_errors_on_evicting_origin; |
244 if (repeated_eviction_) { | 245 if (repeated_eviction_) { |
245 // Sleep for a while and retry again until we see too many errors. | 246 // Sleep for a while and retry again until we see too many errors. |
246 StartEvictionTimerWithDelay(interval_ms_); | 247 StartEvictionTimerWithDelay(interval_ms_); |
247 } | 248 } |
248 OnEvictionRoundFinished(); | 249 OnEvictionRoundFinished(); |
249 } | 250 } |
250 } | 251 } |
251 | 252 |
252 } // namespace quota | 253 } // namespace quota |
OLD | NEW |