diff options
Diffstat (limited to 'net/disk_cache/stats_histogram.cc')
-rw-r--r-- | net/disk_cache/stats_histogram.cc | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/net/disk_cache/stats_histogram.cc b/net/disk_cache/stats_histogram.cc index f605934..e6eaf90 100644 --- a/net/disk_cache/stats_histogram.cc +++ b/net/disk_cache/stats_histogram.cc @@ -12,6 +12,37 @@ namespace disk_cache { // Static. const Stats* StatsHistogram::stats_ = NULL; +scoped_refptr<StatsHistogram> StatsHistogram::StatsHistogramFactoryGet( + const std::string& name) { + scoped_refptr<Histogram> histogram(NULL); + + Sample minimum = 1; + Sample maximum = disk_cache::Stats::kDataSizesLength - 1; + size_t bucket_count = disk_cache::Stats::kDataSizesLength; + + if (StatisticsRecorder::FindHistogram(name, &histogram)) { + DCHECK(histogram.get() != NULL); + } else { + histogram = new StatsHistogram(name, minimum, maximum, bucket_count); + scoped_refptr<Histogram> registered_histogram(NULL); + StatisticsRecorder::FindHistogram(name, ®istered_histogram); + if (registered_histogram.get() != NULL && + registered_histogram.get() != histogram.get()) + histogram = registered_histogram; + } + + DCHECK(HISTOGRAM == histogram->histogram_type()); + DCHECK(histogram->HasConstructorArguments(minimum, maximum, bucket_count)); + + // We're preparing for an otherwise unsafe upcast by ensuring we have the + // proper class type. + Histogram* temp_histogram = histogram.get(); + StatsHistogram* temp_stats_histogram = + static_cast<StatsHistogram*>(temp_histogram); + scoped_refptr<StatsHistogram> return_histogram = temp_stats_histogram; + return return_histogram; +} + bool StatsHistogram::Init(const Stats* stats) { DCHECK(stats); if (stats_) |