1b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Use of this source code is governed by a BSD-style license that can be
3b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// found in the LICENSE file.
4b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
5b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include <vector>
6b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
7b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/metrics/histogram.h"
8b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/metrics/histogram_base.h"
9b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/metrics/sparse_histogram.h"
10b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/metrics/statistics_recorder.h"
11b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/pickle.h"
12b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "testing/gtest/include/gtest/gtest.h"
13b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
14b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratnamespace base {
15b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
16b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratclass HistogramBaseTest : public testing::Test {
17b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat protected:
18b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBaseTest() {
19b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat    // Each test will have a clean state (no Histogram / BucketRanges
20b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat    // registered).
21b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat    ResetStatisticsRecorder();
22b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  }
23b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
2445779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  ~HistogramBaseTest() override {
2545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko    HistogramBase::report_histogram_ = nullptr;
2645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  }
27b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
28b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  void ResetStatisticsRecorder() {
2945779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko    // It is necessary to fully destruct any existing StatisticsRecorder
3045779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko    // before creating a new one.
3145779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko    statistics_recorder_.reset();
320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez    statistics_recorder_ = StatisticsRecorder::CreateTemporaryForTesting();
3345779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  }
3445779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko
3545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  HistogramBase* GetCreationReportHistogram(const std::string& name) {
3645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko    HistogramBase::EnableActivityReportHistogram(name);
3745779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko    return HistogramBase::report_histogram_;
38b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  }
39b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
40b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat private:
4194ffa55491333f3dcc701befd0d2652922916d99Luis Hector Chavez  std::unique_ptr<StatisticsRecorder> statistics_recorder_;
4245779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko
4345779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  DISALLOW_COPY_AND_ASSIGN(HistogramBaseTest);
44b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat};
45b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
46b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(HistogramBaseTest, DeserializeHistogram) {
47b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* histogram = Histogram::FactoryGet(
48b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      "TestHistogram", 1, 1000, 10,
49b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      (HistogramBase::kUmaTargetedHistogramFlag |
50b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      HistogramBase::kIPCSerializationSourceFlag));
51b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
52b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  Pickle pickle;
53b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ASSERT_TRUE(histogram->SerializeInfo(&pickle));
54b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
55b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter(pickle);
56b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* deserialized = DeserializeHistogramInfo(&iter);
57b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(histogram, deserialized);
58b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
59b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ResetStatisticsRecorder();
60b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
61b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter2(pickle);
62b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  deserialized = DeserializeHistogramInfo(&iter2);
63b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized);
64b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_NE(histogram, deserialized);
65b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ("TestHistogram", deserialized->histogram_name());
66b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized->HasConstructionArguments(1, 1000, 10));
67b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
68b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  // kIPCSerializationSourceFlag will be cleared.
69b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, deserialized->flags());
70b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
71b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
72b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(HistogramBaseTest, DeserializeLinearHistogram) {
73b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* histogram = LinearHistogram::FactoryGet(
74b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      "TestHistogram", 1, 1000, 10,
75b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      HistogramBase::kIPCSerializationSourceFlag);
76b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
77b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  Pickle pickle;
78b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ASSERT_TRUE(histogram->SerializeInfo(&pickle));
79b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
80b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter(pickle);
81b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* deserialized = DeserializeHistogramInfo(&iter);
82b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(histogram, deserialized);
83b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
84b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ResetStatisticsRecorder();
85b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
86b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter2(pickle);
87b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  deserialized = DeserializeHistogramInfo(&iter2);
88b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized);
89b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_NE(histogram, deserialized);
90b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ("TestHistogram", deserialized->histogram_name());
91b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized->HasConstructionArguments(1, 1000, 10));
92b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(0, deserialized->flags());
93b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
94b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
95b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(HistogramBaseTest, DeserializeBooleanHistogram) {
96b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* histogram = BooleanHistogram::FactoryGet(
97b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      "TestHistogram", HistogramBase::kIPCSerializationSourceFlag);
98b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
99b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  Pickle pickle;
100b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ASSERT_TRUE(histogram->SerializeInfo(&pickle));
101b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
102b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter(pickle);
103b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* deserialized = DeserializeHistogramInfo(&iter);
104b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(histogram, deserialized);
105b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
106b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ResetStatisticsRecorder();
107b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
108b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter2(pickle);
109b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  deserialized = DeserializeHistogramInfo(&iter2);
110b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized);
111b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_NE(histogram, deserialized);
112b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ("TestHistogram", deserialized->histogram_name());
113b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized->HasConstructionArguments(1, 2, 3));
114b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(0, deserialized->flags());
115b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
116b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
117b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(HistogramBaseTest, DeserializeCustomHistogram) {
118b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  std::vector<HistogramBase::Sample> ranges;
119b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ranges.push_back(13);
120b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ranges.push_back(5);
121b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ranges.push_back(9);
122b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
123b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* histogram = CustomHistogram::FactoryGet(
124b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      "TestHistogram", ranges, HistogramBase::kIPCSerializationSourceFlag);
125b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
126b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  Pickle pickle;
127b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ASSERT_TRUE(histogram->SerializeInfo(&pickle));
128b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
129b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter(pickle);
130b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* deserialized = DeserializeHistogramInfo(&iter);
131b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(histogram, deserialized);
132b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
133b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ResetStatisticsRecorder();
134b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
135b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter2(pickle);
136b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  deserialized = DeserializeHistogramInfo(&iter2);
137b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized);
138b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_NE(histogram, deserialized);
139b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ("TestHistogram", deserialized->histogram_name());
140b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized->HasConstructionArguments(5, 13, 4));
141b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(0, deserialized->flags());
142b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
143b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
144b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(HistogramBaseTest, DeserializeSparseHistogram) {
145b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* histogram = SparseHistogram::FactoryGet(
146b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      "TestHistogram", HistogramBase::kIPCSerializationSourceFlag);
147b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
148b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  Pickle pickle;
149b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ASSERT_TRUE(histogram->SerializeInfo(&pickle));
150b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
151b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter(pickle);
152b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  HistogramBase* deserialized = DeserializeHistogramInfo(&iter);
153b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(histogram, deserialized);
154b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
155b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  ResetStatisticsRecorder();
156b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
157b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  PickleIterator iter2(pickle);
158b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  deserialized = DeserializeHistogramInfo(&iter2);
159b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_TRUE(deserialized);
160b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_NE(histogram, deserialized);
161b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ("TestHistogram", deserialized->histogram_name());
162b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  EXPECT_EQ(0, deserialized->flags());
163b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
164b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
16545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex VakulenkoTEST_F(HistogramBaseTest, CreationReportHistogram) {
16645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  // Enabled creation report. Itself is not included in the report.
16745779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  HistogramBase* report = GetCreationReportHistogram("CreationReportTest");
16845779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  ASSERT_TRUE(report);
16945779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko
17045779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  std::vector<HistogramBase::Sample> ranges;
17145779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  ranges.push_back(1);
17245779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  ranges.push_back(2);
17345779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  ranges.push_back(4);
17445779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  ranges.push_back(8);
17545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  ranges.push_back(10);
17645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko
17745779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  // Create all histogram types and verify counts.
17845779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  Histogram::FactoryGet("CRH-Histogram", 1, 10, 5, 0);
17945779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  LinearHistogram::FactoryGet("CRH-Linear", 1, 10, 5, 0);
18045779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  BooleanHistogram::FactoryGet("CRH-Boolean", 0);
18145779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  CustomHistogram::FactoryGet("CRH-Custom", ranges, 0);
18245779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  SparseHistogram::FactoryGet("CRH-Sparse", 0);
18345779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko
18494ffa55491333f3dcc701befd0d2652922916d99Luis Hector Chavez  std::unique_ptr<HistogramSamples> samples = report->SnapshotSamples();
18545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_CREATED));
18645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(5, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_CREATED));
18745779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(0, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_LOOKUP));
18845779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_LOGARITHMIC));
18945779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_LINEAR));
19045779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_BOOLEAN));
19145779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_CUSTOM));
19245779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_TYPE_SPARSE));
19345779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko
19445779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  // Create all flag types and verify counts.
19545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  Histogram::FactoryGet("CRH-Histogram-UMA-Targeted", 1, 10, 5,
19645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko                        HistogramBase::kUmaTargetedHistogramFlag);
19745779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  Histogram::FactoryGet("CRH-Histogram-UMA-Stability", 1, 10, 5,
19845779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko                        HistogramBase::kUmaStabilityHistogramFlag);
19945779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  SparseHistogram::FactoryGet("CRH-Sparse-UMA-Targeted",
20045779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko                              HistogramBase::kUmaTargetedHistogramFlag);
20145779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  SparseHistogram::FactoryGet("CRH-Sparse-UMA-Stability",
20245779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko                              HistogramBase::kUmaStabilityHistogramFlag);
20345779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  samples = report->SnapshotSamples();
20445779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_CREATED));
20545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(9, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_CREATED));
20645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(0, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_LOOKUP));
20745779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(2, samples->GetCount(HISTOGRAM_REPORT_FLAG_UMA_TARGETED));
20845779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(2, samples->GetCount(HISTOGRAM_REPORT_FLAG_UMA_STABILITY));
20945779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko
21045779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  // Do lookup of existing histograms and verify counts.
21145779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  Histogram::FactoryGet("CRH-Histogram", 1, 10, 5, 0);
21245779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  LinearHistogram::FactoryGet("CRH-Linear", 1, 10, 5, 0);
21345779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  BooleanHistogram::FactoryGet("CRH-Boolean", 0);
21445779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  CustomHistogram::FactoryGet("CRH-Custom", ranges, 0);
21545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  SparseHistogram::FactoryGet("CRH-Sparse", 0);
21645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  samples = report->SnapshotSamples();
21745779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(1, samples->GetCount(HISTOGRAM_REPORT_CREATED));
21845779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(9, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_CREATED));
21945779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko  EXPECT_EQ(5, samples->GetCount(HISTOGRAM_REPORT_HISTOGRAM_LOOKUP));
22045779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko}
22145779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko
222b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}  // namespace base
223