Index: base/metrics/histogram_base_unittest.cc |
diff --git a/base/metrics/histogram_base_unittest.cc b/base/metrics/histogram_base_unittest.cc |
index 2d6b6df0288850cab31362762957070201ca72e3..6b41597b4a10a489b35bbf10c92d73fc1a4962cb 100644 |
--- a/base/metrics/histogram_base_unittest.cc |
+++ b/base/metrics/histogram_base_unittest.cc |
@@ -18,19 +18,29 @@ class HistogramBaseTest : public testing::Test { |
HistogramBaseTest() { |
// Each test will have a clean state (no Histogram / BucketRanges |
// registered). |
- statistics_recorder_ = NULL; |
ResetStatisticsRecorder(); |
} |
- ~HistogramBaseTest() override { delete statistics_recorder_; } |
+ ~HistogramBaseTest() override { |
+ HistogramBase::report_histogram_ = nullptr; |
+ } |
void ResetStatisticsRecorder() { |
- delete statistics_recorder_; |
- statistics_recorder_ = new StatisticsRecorder(); |
+ // It is necessary to fully destruct any existing StatisticsRecorder |
+ // before creating a new one. |
+ statistics_recorder_.reset(); |
+ statistics_recorder_.reset(new StatisticsRecorder()); |
+ } |
+ |
+ HistogramBase* GetCreationReportHistogram(const std::string& name) { |
+ HistogramBase::EnableActivityReportHistogram(name); |
+ return HistogramBase::report_histogram_; |
} |
private: |
- StatisticsRecorder* statistics_recorder_; |
+ scoped_ptr<StatisticsRecorder> statistics_recorder_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(HistogramBaseTest); |
}; |
TEST_F(HistogramBaseTest, DeserializeHistogram) { |
@@ -152,4 +162,61 @@ TEST_F(HistogramBaseTest, DeserializeSparseHistogram) { |
EXPECT_EQ(0, deserialized->flags()); |
} |
+TEST_F(HistogramBaseTest, CreationReportHistogram) { |
+ // Enabled creation report. Itself is not included in the report. |
+ HistogramBase* report = GetCreationReportHistogram("CreationReportTest"); |
+ ASSERT_TRUE(report); |
+ |
+ std::vector<HistogramBase::Sample> ranges; |
+ ranges.push_back(1); |
+ ranges.push_back(2); |
+ ranges.push_back(4); |
+ ranges.push_back(8); |
+ ranges.push_back(10); |
+ |
+ // Create all histogram types and verify counts. |
+ Histogram::FactoryGet("CRH-Histogram", 1, 10, 5, 0); |
+ LinearHistogram::FactoryGet("CRH-Linear", 1, 10, 5, 0); |
+ BooleanHistogram::FactoryGet("CRH-Boolean", 0); |
+ CustomHistogram::FactoryGet("CRH-Custom", ranges, 0); |
+ SparseHistogram::FactoryGet("CRH-Sparse", 0); |
+ |
+ scoped_ptr<HistogramSamples> samples = report->SnapshotSamples(); |
+ EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_CREATED)); |
+ EXPECT_EQ(5, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_CREATED)); |
+ EXPECT_EQ(0, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_LOOKUP)); |
+ EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_LOGARITHMIC)); |
+ EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_LINEAR)); |
+ EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_BOOLEAN)); |
+ EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_CUSTOM)); |
+ EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_SPARSE)); |
+ |
+ // Create all flag types and verify counts. |
+ Histogram::FactoryGet("CRH-Histogram-UMA-Targeted", 1, 10, 5, |
+ HistogramBase::kUmaTargetedHistogramFlag); |
+ Histogram::FactoryGet("CRH-Histogram-UMA-Stability", 1, 10, 5, |
+ HistogramBase::kUmaStabilityHistogramFlag); |
+ SparseHistogram::FactoryGet("CRH-Sparse-UMA-Targeted", |
+ HistogramBase::kUmaTargetedHistogramFlag); |
+ SparseHistogram::FactoryGet("CRH-Sparse-UMA-Stability", |
+ HistogramBase::kUmaStabilityHistogramFlag); |
+ samples = report->SnapshotSamples(); |
+ EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_CREATED)); |
+ EXPECT_EQ(9, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_CREATED)); |
+ EXPECT_EQ(0, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_LOOKUP)); |
+ EXPECT_EQ(2, samples->GetCount(HISTOGRAM_REPORT_FLAG_UMA_TARGETED)); |
+ EXPECT_EQ(2, samples->GetCount(HISTOGRAM_REPORT_FLAG_UMA_STABILITY)); |
+ |
+ // Do lookup of existing histograms and verify counts. |
+ Histogram::FactoryGet("CRH-Histogram", 1, 10, 5, 0); |
+ LinearHistogram::FactoryGet("CRH-Linear", 1, 10, 5, 0); |
+ BooleanHistogram::FactoryGet("CRH-Boolean", 0); |
+ CustomHistogram::FactoryGet("CRH-Custom", ranges, 0); |
+ SparseHistogram::FactoryGet("CRH-Sparse", 0); |
+ samples = report->SnapshotSamples(); |
+ EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_CREATED)); |
+ EXPECT_EQ(9, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_CREATED)); |
+ EXPECT_EQ(5, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_LOOKUP)); |
+} |
+ |
} // namespace base |