blob: 7de6f5e6ee8bfc2a0bed01a52fc9a8b520a487eb [file] [log] [blame]
asapersson1fe48a52016-01-07 01:02:42 -08001/*
2 * Copyright (c) 2015 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
11#include "testing/gtest/include/gtest/gtest.h"
12
13#include "webrtc/system_wrappers/include/metrics.h"
14#include "webrtc/test/histogram.h"
15
16namespace webrtc {
17namespace {
18const int kSample = 22;
19const std::string kName = "Name";
20
21void AddSparseSample(const std::string& name, int sample) {
22 RTC_HISTOGRAM_COUNTS_SPARSE_100(name, sample);
23}
asapersson040b79f2016-02-02 07:13:01 -080024void AddSampleWithVaryingName(int index, const std::string& name, int sample) {
25 RTC_HISTOGRAMS_COUNTS_100(index, name, sample);
26}
asapersson1fe48a52016-01-07 01:02:42 -080027#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
28void AddSample(const std::string& name, int sample) {
29 RTC_HISTOGRAM_COUNTS_100(name, sample);
30}
31#endif // GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
32} // namespace
33
34TEST(MetricsTest, InitiallyNoSamples) {
35 test::ClearHistograms();
36 EXPECT_EQ(0, test::NumHistogramSamples(kName));
37 EXPECT_EQ(-1, test::LastHistogramSample(kName));
38}
39
40TEST(MetricsTest, RtcHistogramPercent_AddSample) {
41 test::ClearHistograms();
42 RTC_HISTOGRAM_PERCENTAGE(kName, kSample);
43 EXPECT_EQ(1, test::NumHistogramSamples(kName));
44 EXPECT_EQ(kSample, test::LastHistogramSample(kName));
45}
46
47TEST(MetricsTest, RtcHistogramEnumeration_AddSample) {
48 test::ClearHistograms();
49 RTC_HISTOGRAM_ENUMERATION(kName, kSample, kSample + 1);
50 EXPECT_EQ(1, test::NumHistogramSamples(kName));
51 EXPECT_EQ(kSample, test::LastHistogramSample(kName));
52}
53
54TEST(MetricsTest, RtcHistogramCountsSparse_AddSample) {
55 test::ClearHistograms();
56 RTC_HISTOGRAM_COUNTS_SPARSE_100(kName, kSample);
57 EXPECT_EQ(1, test::NumHistogramSamples(kName));
58 EXPECT_EQ(kSample, test::LastHistogramSample(kName));
59}
60
61TEST(MetricsTest, RtcHistogramCounts_AddSample) {
62 test::ClearHistograms();
63 RTC_HISTOGRAM_COUNTS_100(kName, kSample);
64 EXPECT_EQ(1, test::NumHistogramSamples(kName));
65 EXPECT_EQ(kSample, test::LastHistogramSample(kName));
66}
67
68TEST(MetricsTest, RtcHistogramCounts_AddMultipleSamples) {
69 test::ClearHistograms();
70 const int kNumSamples = 10;
71 for (int i = 0; i < kNumSamples; ++i) {
72 RTC_HISTOGRAM_COUNTS_100(kName, i);
73 }
74 EXPECT_EQ(kNumSamples, test::NumHistogramSamples(kName));
75 EXPECT_EQ(kNumSamples - 1, test::LastHistogramSample(kName));
76}
77
asapersson040b79f2016-02-02 07:13:01 -080078TEST(MetricsTest, RtcHistogramsCounts_AddSample) {
79 test::ClearHistograms();
80 AddSampleWithVaryingName(0, "Name1", kSample);
81 AddSampleWithVaryingName(1, "Name2", kSample + 1);
82 AddSampleWithVaryingName(2, "Name3", kSample + 2);
83 EXPECT_EQ(1, test::NumHistogramSamples("Name1"));
84 EXPECT_EQ(1, test::NumHistogramSamples("Name2"));
85 EXPECT_EQ(1, test::NumHistogramSamples("Name3"));
86 EXPECT_EQ(kSample + 0, test::LastHistogramSample("Name1"));
87 EXPECT_EQ(kSample + 1, test::LastHistogramSample("Name2"));
88 EXPECT_EQ(kSample + 2, test::LastHistogramSample("Name3"));
89}
90
91#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
92TEST(MetricsTest, RtcHistogramsCounts_InvalidIndex) {
93 EXPECT_DEATH(RTC_HISTOGRAMS_COUNTS_1000(-1, kName, kSample), "");
94 EXPECT_DEATH(RTC_HISTOGRAMS_COUNTS_1000(3, kName, kSample), "");
95 EXPECT_DEATH(RTC_HISTOGRAMS_COUNTS_1000(3u, kName, kSample), "");
96}
97#endif
98
asapersson1fe48a52016-01-07 01:02:42 -080099TEST(MetricsTest, RtcHistogramSparse_NonConstantNameWorks) {
100 test::ClearHistograms();
101 AddSparseSample("Name1", kSample);
102 AddSparseSample("Name2", kSample);
103 EXPECT_EQ(1, test::NumHistogramSamples("Name1"));
104 EXPECT_EQ(1, test::NumHistogramSamples("Name2"));
105}
106
107#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
108TEST(MetricsTest, RtcHistogram_FailsForNonConstantName) {
109 test::ClearHistograms();
110 AddSample("Name1", kSample);
111 EXPECT_DEATH(AddSample("Name2", kSample), "");
112}
113#endif // GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
114
115} // namespace webrtc