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

Unified Diff: webkit/quota/quota_temporary_storage_evictor.cc

Issue 7582027: Refine UMA stats of QuotaTemporaryStorageEvictor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 4 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
Index: webkit/quota/quota_temporary_storage_evictor.cc
diff --git a/webkit/quota/quota_temporary_storage_evictor.cc b/webkit/quota/quota_temporary_storage_evictor.cc
index d9e9fec0b33739aff562d48e31ae6e5e00561d3f..8990331d60f98aa93af09c69d1dec64036884b50 100644
--- a/webkit/quota/quota_temporary_storage_evictor.cc
+++ b/webkit/quota/quota_temporary_storage_evictor.cc
@@ -64,19 +64,62 @@ void QuotaTemporaryStorageEvictor::GetStatistics(
statistics_.num_skipped_eviction_rounds;
}
-void QuotaTemporaryStorageEvictor::ReportHistogram() {
- UMA_HISTOGRAM_COUNTS("Quota.ErrorsOnEvictingOrigin",
- statistics_.num_errors_on_evicting_origin);
- UMA_HISTOGRAM_COUNTS("Quota.ErrorsOnGettingUsageAndQuota",
- statistics_.num_errors_on_getting_usage_and_quota);
- UMA_HISTOGRAM_COUNTS("Quota.EvictedOrigins",
- statistics_.num_evicted_origins);
- UMA_HISTOGRAM_COUNTS("Quota.EvictionRounds",
- statistics_.num_eviction_rounds);
- UMA_HISTOGRAM_COUNTS("Quota.SkippedEvictionRounds",
- statistics_.num_skipped_eviction_rounds);
-
- statistics_ = Statistics();
+void QuotaTemporaryStorageEvictor::ReportPerRoundHistogram() {
+ DCHECK(round_statistics_.in_round);
+ DCHECK(round_statistics_.is_initialized);
+
+ base::Time now = base::Time::Now();
+ UMA_HISTOGRAM_TIMES("Quota.TimeSpentToAEvictionRound",
+ now - round_statistics_.start_time);
+ if (!time_of_end_of_last_round_.is_null())
+ UMA_HISTOGRAM_MINUTES("Quota.TimeDeltaOfEvictionRounds",
+ now - time_of_end_of_last_round_);
+ UMA_HISTOGRAM_MBYTES("Quota.UsageOverageOfTemporaryGlobalStorage",
+ round_statistics_.usage_overage_at_round);
+ UMA_HISTOGRAM_MBYTES("Quota.DiskspaceShortage",
+ round_statistics_.diskspace_shortage_at_round);
+ UMA_HISTOGRAM_MBYTES("Quota.EvictedBytesPerRound",
+ round_statistics_.usage_on_beginning_of_round -
+ round_statistics_.usage_on_end_of_round);
+ UMA_HISTOGRAM_COUNTS("Quota.NumberOfEvictedOriginsPerRound",
+ round_statistics_.num_evicted_origins_in_round);
+}
+
+void QuotaTemporaryStorageEvictor::ReportPerHourHistogram() {
+ Statistics stats_in_hour(statistics_);
+ stats_in_hour.subtract_assign(previous_statistics_);
+ previous_statistics_ = statistics_;
+
+ UMA_HISTOGRAM_COUNTS("Quota.ErrorsOnEvictingOriginPerHour",
+ stats_in_hour.num_errors_on_evicting_origin);
+ UMA_HISTOGRAM_COUNTS("Quota.ErrorsOnGettingUsageAndQuotaPerHour",
+ stats_in_hour.num_errors_on_getting_usage_and_quota);
+ UMA_HISTOGRAM_COUNTS("Quota.EvictedOriginsPerHour",
+ stats_in_hour.num_evicted_origins);
+ UMA_HISTOGRAM_COUNTS("Quota.EvictionRoundsPerHour",
+ stats_in_hour.num_eviction_rounds);
+ UMA_HISTOGRAM_COUNTS("Quota.SkippedEvictionRoundsPerHour",
+ stats_in_hour.num_skipped_eviction_rounds);
+}
+
+void QuotaTemporaryStorageEvictor::OnEvictionRoundStarted() {
+ if (round_statistics_.in_round)
+ return;
+ round_statistics_.in_round = true;
+ round_statistics_.start_time = base::Time::Now();
+ ++statistics_.num_eviction_rounds;
+}
+
+void QuotaTemporaryStorageEvictor::OnEvictionRoundFinished() {
+ // Check if skipped round
+ if (round_statistics_.num_evicted_origins_in_round) {
+ ReportPerRoundHistogram();
+ time_of_end_of_last_nonskipped_round_ = base::Time::Now();
+ } else {
+ ++statistics_.num_skipped_eviction_rounds;
+ }
+ // Reset stats for next round.
+ round_statistics_ = EvictionRoundStatistics();
}
void QuotaTemporaryStorageEvictor::Start() {
@@ -86,21 +129,19 @@ void QuotaTemporaryStorageEvictor::Start() {
if (histogram_timer_.IsRunning())
return;
histogram_timer_.Start(kHistogramReportInterval, this,
- &QuotaTemporaryStorageEvictor::ReportHistogram);
+ &QuotaTemporaryStorageEvictor::ReportPerHourHistogram);
}
void QuotaTemporaryStorageEvictor::StartEvictionTimerWithDelay(int delay_ms) {
if (eviction_timer_.IsRunning())
return;
- num_evicted_origins_in_round_ = 0;
- usage_on_beginning_of_round_ = -1;
- time_of_beginning_of_round_ = base::Time::Now();
- ++statistics_.num_eviction_rounds;
eviction_timer_.Start(base::TimeDelta::FromMilliseconds(delay_ms), this,
&QuotaTemporaryStorageEvictor::ConsiderEviction);
}
void QuotaTemporaryStorageEvictor::ConsiderEviction() {
+ OnEvictionRoundStarted();
+
// Get usage and disk space, then continue.
quota_eviction_handler_->GetUsageAndQuotaForEviction(callback_factory_.
NewCallback(
@@ -121,49 +162,43 @@ void QuotaTemporaryStorageEvictor::OnGotUsageAndQuotaForEviction(
if (status != kQuotaStatusOk)
++statistics_.num_errors_on_getting_usage_and_quota;
- int64 amount_to_evict = std::max(
- usage - static_cast<int64>(quota * kUsageRatioToStartEviction),
+ int64 usage_overage = std::max(
+ static_cast<int64>(0),
+ usage - static_cast<int64>(quota * kUsageRatioToStartEviction));
+
+ int64 diskspace_shortage = std::max(
+ static_cast<int64>(0),
min_available_disk_space_to_start_eviction_ - available_disk_space);
+
+ if (!round_statistics_.is_initialized) {
+ round_statistics_.usage_overage_at_round = usage_overage;
+ round_statistics_.diskspace_shortage_at_round = diskspace_shortage;
+ round_statistics_.usage_on_beginning_of_round = usage;
+ round_statistics_.is_initialized = true;
+ }
+ round_statistics_.usage_on_end_of_round = usage;
+
+ int64 amount_to_evict = std::max(usage_overage, diskspace_shortage);
if (status == kQuotaStatusOk && amount_to_evict > 0) {
// Space is getting tight. Get the least recently used origin and continue.
// TODO(michaeln): if the reason for eviction is low physical disk space,
// make 'unlimited' origins subject to eviction too.
-
- if (usage_on_beginning_of_round_ < 0) {
- usage_on_beginning_of_round_ = usage;
- UMA_HISTOGRAM_MBYTES("Quota.TemporaryStorageSizeToEvict",
- amount_to_evict);
- }
-
quota_eviction_handler_->GetLRUOrigin(kStorageTypeTemporary,
callback_factory_.NewCallback(
&QuotaTemporaryStorageEvictor::OnGotLRUOrigin));
- } else if (repeated_eviction_) {
- // No action required, sleep for a while and check again later.
- if (num_evicted_origins_in_round_ == 0) {
- ++statistics_.num_skipped_eviction_rounds;
- } else if (usage_on_beginning_of_round_ >= 0) {
- int64 evicted_bytes = usage_on_beginning_of_round_ - usage;
- base::Time now = base::Time::Now();
- UMA_HISTOGRAM_MBYTES("Quota.EvictedBytesPerRound", evicted_bytes);
- UMA_HISTOGRAM_COUNTS("Quota.NumberOfEvictedOriginsPerRound",
- num_evicted_origins_in_round_);
- UMA_HISTOGRAM_TIMES("Quota.TimeSpentToAEvictionRound",
- now - time_of_beginning_of_round_);
- if (!time_of_end_of_last_round_.is_null()) {
- UMA_HISTOGRAM_MINUTES("Quota.TimeDeltaOfEvictionRounds",
- now - time_of_end_of_last_round_);
+ } else {
+ if (repeated_eviction_) {
+ // No action required, sleep for a while and check again later.
+ if (statistics_.num_errors_on_getting_usage_and_quota <
+ kThresholdOfErrorsToStopEviction) {
+ StartEvictionTimerWithDelay(interval_ms_);
+ } else {
+ // TODO(dmikurube): Try restarting eviction after a while.
+ LOG(WARNING) << "Stopped eviction of temporary storage due to errors "
+ "in GetUsageAndQuotaForEviction.";
}
- time_of_end_of_last_round_ = now;
- }
- if (statistics_.num_errors_on_getting_usage_and_quota <
- kThresholdOfErrorsToStopEviction) {
- StartEvictionTimerWithDelay(interval_ms_);
- } else {
- // TODO(dmikurube): Try restarting eviction after a while.
- LOG(WARNING) << "Stopped eviction of temporary storage due to errors "
- "in GetUsageAndQuotaForEviction.";
}
+ OnEvictionRoundFinished();
}
// TODO(dmikurube): Add error handling for the case status != kQuotaStatusOk.
@@ -175,6 +210,7 @@ void QuotaTemporaryStorageEvictor::OnGotLRUOrigin(const GURL& origin) {
if (origin.is_empty()) {
if (repeated_eviction_)
StartEvictionTimerWithDelay(interval_ms_);
+ OnEvictionRoundFinished();
return;
}
@@ -195,7 +231,7 @@ void QuotaTemporaryStorageEvictor::OnEvictionComplete(
if (status == kQuotaStatusOk) {
++statistics_.num_evicted_origins;
- ++num_evicted_origins_in_round_;
+ ++round_statistics_.num_evicted_origins_in_round;
// We many need to get rid of more space so reconsider immediately.
ConsiderEviction();
} else {
@@ -204,6 +240,7 @@ void QuotaTemporaryStorageEvictor::OnEvictionComplete(
// Sleep for a while and retry again until we see too many errors.
StartEvictionTimerWithDelay(interval_ms_);
}
+ OnEvictionRoundFinished();
}
}
« no previous file with comments | « webkit/quota/quota_temporary_storage_evictor.h ('k') | webkit/quota/quota_temporary_storage_evictor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698