blob: 2893e4389ad61c7c79980d979f06d78fa02ed4b7 [file] [log] [blame]
Åsa Persson352b2d72015-04-15 18:00:40 +02001/*
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 "webrtc/test/histogram.h"
12
13#include <map>
14
asapersson1fe48a52016-01-07 01:02:42 -080015#include "webrtc/base/checks.h"
Åsa Perssona96f02b2015-04-24 08:52:11 +020016#include "webrtc/base/criticalsection.h"
17#include "webrtc/base/thread_annotations.h"
Henrik Kjellander98f53512015-10-28 18:17:40 +010018#include "webrtc/system_wrappers/include/metrics.h"
Åsa Persson352b2d72015-04-15 18:00:40 +020019
20// Test implementation of histogram methods in
Henrik Kjellander98f53512015-10-28 18:17:40 +010021// webrtc/system_wrappers/include/metrics.h.
Åsa Persson352b2d72015-04-15 18:00:40 +020022
23namespace webrtc {
24namespace {
Åsa Perssona96f02b2015-04-24 08:52:11 +020025struct SampleInfo {
asapersson1fe48a52016-01-07 01:02:42 -080026 SampleInfo(const std::string& name) : name_(name), last_(-1), total_(0) {}
27 const std::string name_;
28 int last_; // Last added sample.
29 int total_; // Total number of added samples.
Åsa Perssona96f02b2015-04-24 08:52:11 +020030};
31
32rtc::CriticalSection histogram_crit_;
33// Map holding info about added samples to a histogram (mapped by the histogram
34// name).
35std::map<std::string, SampleInfo> histograms_ GUARDED_BY(histogram_crit_);
Åsa Persson352b2d72015-04-15 18:00:40 +020036} // namespace
37
38namespace metrics {
39Histogram* HistogramFactoryGetCounts(const std::string& name, int min, int max,
asapersson1fe48a52016-01-07 01:02:42 -080040 int bucket_count) {
41 rtc::CritScope cs(&histogram_crit_);
42 if (histograms_.find(name) == histograms_.end()) {
43 histograms_.insert(std::make_pair(name, SampleInfo(name)));
44 }
45 auto it = histograms_.find(name);
46 return reinterpret_cast<Histogram*>(&it->second);
47}
Åsa Persson352b2d72015-04-15 18:00:40 +020048
49Histogram* HistogramFactoryGetEnumeration(const std::string& name,
asapersson1fe48a52016-01-07 01:02:42 -080050 int boundary) {
51 rtc::CritScope cs(&histogram_crit_);
52 if (histograms_.find(name) == histograms_.end()) {
53 histograms_.insert(std::make_pair(name, SampleInfo(name)));
54 }
55 auto it = histograms_.find(name);
56 return reinterpret_cast<Histogram*>(&it->second);
57}
Åsa Persson352b2d72015-04-15 18:00:40 +020058
59void HistogramAdd(
60 Histogram* histogram_pointer, const std::string& name, int sample) {
Åsa Perssona96f02b2015-04-24 08:52:11 +020061 rtc::CritScope cs(&histogram_crit_);
asapersson1fe48a52016-01-07 01:02:42 -080062 SampleInfo* ptr = reinterpret_cast<SampleInfo*>(histogram_pointer);
63 // The name should not vary.
64 RTC_CHECK(ptr->name_ == name);
65 ptr->last_ = sample;
66 ++ptr->total_;
Åsa Persson352b2d72015-04-15 18:00:40 +020067}
68} // namespace metrics
69
70namespace test {
71int LastHistogramSample(const std::string& name) {
Åsa Perssona96f02b2015-04-24 08:52:11 +020072 rtc::CritScope cs(&histogram_crit_);
73 const auto it = histograms_.find(name);
Åsa Persson352b2d72015-04-15 18:00:40 +020074 if (it == histograms_.end()) {
75 return -1;
76 }
asapersson1fe48a52016-01-07 01:02:42 -080077 return it->second.last_;
Åsa Perssona96f02b2015-04-24 08:52:11 +020078}
79
80int NumHistogramSamples(const std::string& name) {
81 rtc::CritScope cs(&histogram_crit_);
82 const auto it = histograms_.find(name);
83 if (it == histograms_.end()) {
84 return 0;
85 }
asapersson1fe48a52016-01-07 01:02:42 -080086 return it->second.total_;
Åsa Perssona96f02b2015-04-24 08:52:11 +020087}
88
89void ClearHistograms() {
90 rtc::CritScope cs(&histogram_crit_);
asapersson1fe48a52016-01-07 01:02:42 -080091 for (auto& it : histograms_) {
92 it.second.last_ = -1;
93 it.second.total_ = 0;
94 }
Åsa Persson352b2d72015-04-15 18:00:40 +020095}
96} // namespace test
97} // namespace webrtc