blob: 7491a2f513b60ee7108d1b72aacf71783028279c [file] [log] [blame]
asapersson01d70a32016-05-20 06:29:46 -07001/*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "system_wrappers/include/metrics_default.h"
Karl Wiberg79eb1d92017-11-08 12:26:07 +010012#include "system_wrappers/include/metrics.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "test/gtest.h"
asapersson01d70a32016-05-20 06:29:46 -070014
15namespace webrtc {
16
17namespace {
18const int kSample = 22;
19const char kName[] = "Name";
20
21int NumSamples(
22 const std::string& name,
23 const std::map<std::string, std::unique_ptr<metrics::SampleInfo>>&
24 histograms) {
25 const auto it = histograms.find(name);
26 if (it == histograms.end())
27 return 0;
28
29 int num_samples = 0;
30 for (const auto& sample : it->second->samples)
31 num_samples += sample.second;
32
33 return num_samples;
34}
35
36int NumEvents(const std::string& name,
37 int sample,
38 const std::map<std::string, std::unique_ptr<metrics::SampleInfo>>&
39 histograms) {
40 const auto it = histograms.find(name);
41 if (it == histograms.end())
42 return 0;
43
44 const auto it_sample = it->second->samples.find(sample);
45 if (it_sample == it->second->samples.end())
46 return 0;
47
48 return it_sample->second;
49}
50} // namespace
51
52class MetricsDefaultTest : public ::testing::Test {
53 public:
54 MetricsDefaultTest() {}
55
56 protected:
Mirko Bonadeic14d9bb2018-07-16 15:44:28 +020057 void SetUp() override { metrics::Reset(); }
asapersson01d70a32016-05-20 06:29:46 -070058};
59
60TEST_F(MetricsDefaultTest, Reset) {
61 RTC_HISTOGRAM_PERCENTAGE(kName, kSample);
62 EXPECT_EQ(1, metrics::NumSamples(kName));
63 metrics::Reset();
64 EXPECT_EQ(0, metrics::NumSamples(kName));
65}
66
67TEST_F(MetricsDefaultTest, NumSamples) {
68 RTC_HISTOGRAM_PERCENTAGE(kName, 5);
69 RTC_HISTOGRAM_PERCENTAGE(kName, 5);
70 RTC_HISTOGRAM_PERCENTAGE(kName, 10);
71 EXPECT_EQ(3, metrics::NumSamples(kName));
72 EXPECT_EQ(0, metrics::NumSamples("NonExisting"));
73}
74
75TEST_F(MetricsDefaultTest, NumEvents) {
76 RTC_HISTOGRAM_PERCENTAGE(kName, 5);
77 RTC_HISTOGRAM_PERCENTAGE(kName, 5);
78 RTC_HISTOGRAM_PERCENTAGE(kName, 10);
79 EXPECT_EQ(2, metrics::NumEvents(kName, 5));
80 EXPECT_EQ(1, metrics::NumEvents(kName, 10));
81 EXPECT_EQ(0, metrics::NumEvents(kName, 11));
82 EXPECT_EQ(0, metrics::NumEvents("NonExisting", 5));
83}
84
85TEST_F(MetricsDefaultTest, MinSample) {
86 RTC_HISTOGRAM_PERCENTAGE(kName, kSample);
87 RTC_HISTOGRAM_PERCENTAGE(kName, kSample + 1);
88 EXPECT_EQ(kSample, metrics::MinSample(kName));
89 EXPECT_EQ(-1, metrics::MinSample("NonExisting"));
90}
91
92TEST_F(MetricsDefaultTest, Overflow) {
93 const std::string kName = "Overflow";
94 // Samples should end up in overflow bucket.
95 RTC_HISTOGRAM_PERCENTAGE(kName, 101);
96 EXPECT_EQ(1, metrics::NumSamples(kName));
97 EXPECT_EQ(1, metrics::NumEvents(kName, 101));
98 RTC_HISTOGRAM_PERCENTAGE(kName, 102);
99 EXPECT_EQ(2, metrics::NumSamples(kName));
100 EXPECT_EQ(2, metrics::NumEvents(kName, 101));
101}
102
103TEST_F(MetricsDefaultTest, Underflow) {
104 const std::string kName = "Underflow";
105 // Samples should end up in underflow bucket.
106 RTC_HISTOGRAM_COUNTS_10000(kName, 0);
107 EXPECT_EQ(1, metrics::NumSamples(kName));
108 EXPECT_EQ(1, metrics::NumEvents(kName, 0));
109 RTC_HISTOGRAM_COUNTS_10000(kName, -1);
110 EXPECT_EQ(2, metrics::NumSamples(kName));
111 EXPECT_EQ(2, metrics::NumEvents(kName, 0));
112}
113
114TEST_F(MetricsDefaultTest, GetAndReset) {
115 std::map<std::string, std::unique_ptr<metrics::SampleInfo>> histograms;
116 metrics::GetAndReset(&histograms);
117 EXPECT_EQ(0u, histograms.size());
118 RTC_HISTOGRAM_PERCENTAGE("Histogram1", 4);
119 RTC_HISTOGRAM_PERCENTAGE("Histogram1", 5);
120 RTC_HISTOGRAM_PERCENTAGE("Histogram1", 5);
121 RTC_HISTOGRAM_PERCENTAGE("Histogram2", 10);
122 EXPECT_EQ(3, metrics::NumSamples("Histogram1"));
123 EXPECT_EQ(1, metrics::NumSamples("Histogram2"));
124
125 metrics::GetAndReset(&histograms);
126 EXPECT_EQ(2u, histograms.size());
127 EXPECT_EQ(0, metrics::NumSamples("Histogram1"));
128 EXPECT_EQ(0, metrics::NumSamples("Histogram2"));
129
130 EXPECT_EQ(3, NumSamples("Histogram1", histograms));
131 EXPECT_EQ(1, NumSamples("Histogram2", histograms));
132 EXPECT_EQ(1, NumEvents("Histogram1", 4, histograms));
133 EXPECT_EQ(2, NumEvents("Histogram1", 5, histograms));
134 EXPECT_EQ(1, NumEvents("Histogram2", 10, histograms));
asapersson1731c9c2016-11-30 00:29:09 -0800135
136 // Add samples after reset.
137 metrics::GetAndReset(&histograms);
138 EXPECT_EQ(0u, histograms.size());
139 RTC_HISTOGRAM_PERCENTAGE("Histogram1", 50);
140 RTC_HISTOGRAM_PERCENTAGE("Histogram2", 8);
141 EXPECT_EQ(1, metrics::NumSamples("Histogram1"));
142 EXPECT_EQ(1, metrics::NumSamples("Histogram2"));
143 EXPECT_EQ(1, metrics::NumEvents("Histogram1", 50));
144 EXPECT_EQ(1, metrics::NumEvents("Histogram2", 8));
asapersson01d70a32016-05-20 06:29:46 -0700145}
146
147TEST_F(MetricsDefaultTest, TestMinMaxBucket) {
148 const std::string kName = "MinMaxCounts100";
149 RTC_HISTOGRAM_COUNTS_100(kName, 4);
150
151 std::map<std::string, std::unique_ptr<metrics::SampleInfo>> histograms;
152 metrics::GetAndReset(&histograms);
153 EXPECT_EQ(1u, histograms.size());
154 EXPECT_EQ(kName, histograms.begin()->second->name);
155 EXPECT_EQ(1, histograms.begin()->second->min);
156 EXPECT_EQ(100, histograms.begin()->second->max);
157 EXPECT_EQ(50u, histograms.begin()->second->bucket_count);
158 EXPECT_EQ(1u, histograms.begin()->second->samples.size());
159}
160
161} // namespace webrtc