Merge system_wrappers:metrics and system_wrappers:metrics_default.
After this CL, WebRTC clients will be able to exclude the default
metrics implementation by defining the preprocessor macro
WEBRTC_EXCLUDE_METRICS_DEFAULT (if GN is used, it will be enough
to set rtc_exclude_metrics_default to true).
Bug: webrtc:9631
Change-Id: Id6db23cc4b6c292d9f97372a8014c0c467ed0538
No-Try: True
Reviewed-on: https://webrtc-review.googlesource.com/98102
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24747}
diff --git a/system_wrappers/BUILD.gn b/system_wrappers/BUILD.gn
index a926147..2cd2509 100644
--- a/system_wrappers/BUILD.gn
+++ b/system_wrappers/BUILD.gn
@@ -110,18 +110,6 @@
]
}
-rtc_source_set("metrics_api") {
- visibility = [ "*" ]
- sources = [
- "include/metrics.h",
- ]
- deps = [
- "..:webrtc_common",
- "../rtc_base:checks",
- "../rtc_base:rtc_base_approved",
- ]
-}
-
rtc_source_set("field_trial_default") {
visibility = [ "*" ]
sources = [
@@ -145,15 +133,40 @@
]
}
+rtc_source_set("metrics") {
+ visibility = [ "*" ]
+ public = [
+ "include/metrics.h",
+ "include/metrics_default.h",
+ ]
+ sources = [
+ "source/metrics.cc",
+ ]
+ if (rtc_exclude_metrics_default) {
+ defines = [ "WEBRTC_EXCLUDE_METRICS_DEFAULT" ]
+ }
+ deps = [
+ "..:webrtc_common",
+ "../rtc_base:checks",
+ "../rtc_base:rtc_base_approved",
+ ]
+}
+
+# TODO(bugs.webrtc.org/9631): Remove this as soon as Chromium stops depending
+# on it.
+rtc_source_set("metrics_api") {
+ visibility = [ "*" ]
+ public_deps = [ # no-presubmit-check TODO(webrtc:8603)
+ ":metrics",
+ ]
+}
+
+# TODO(bugs.webrtc.org/9631): Remove this as soon as Chromium stops depending
+# on it.
rtc_source_set("metrics_default") {
visibility = [ "*" ]
- sources = [
- "include/metrics_default.h",
- "source/metrics_default.cc",
- ]
- deps = [
- ":metrics_api",
- "../rtc_base:rtc_base_approved",
+ public_deps = [ # no-presubmit-check TODO(webrtc:8603)
+ ":metrics",
]
}
diff --git a/system_wrappers/include/metrics.h b/system_wrappers/include/metrics.h
index 99b8194..2a2cda0 100644
--- a/system_wrappers/include/metrics.h
+++ b/system_wrappers/include/metrics.h
@@ -11,6 +11,8 @@
#ifndef SYSTEM_WRAPPERS_INCLUDE_METRICS_H_
#define SYSTEM_WRAPPERS_INCLUDE_METRICS_H_
+#include <map>
+#include <memory>
#include <string>
#include "common_types.h" // NOLINT(build/include)
@@ -31,20 +33,21 @@
// The macros use the methods HistogramFactoryGetCounts,
// HistogramFactoryGetEnumeration and HistogramAdd.
//
-// Therefore, WebRTC clients must either:
+// By default WebRTC provides implementations of the aforementioned methods
+// that can be found in system_wrappers/source/metrics.cc. If clients want to
+// provide a custom version, they will have to:
//
-// - provide implementations of
-// Histogram* webrtc::metrics::HistogramFactoryGetCounts(
-// const std::string& name, int sample, int min, int max,
-// int bucket_count);
-// Histogram* webrtc::metrics::HistogramFactoryGetEnumeration(
-// const std::string& name, int sample, int boundary);
-// void webrtc::metrics::HistogramAdd(
-// Histogram* histogram_pointer, const std::string& name, int sample);
-//
-// - or link with the default implementations (i.e.
-// system_wrappers:metrics_default).
-//
+// 1. Compile WebRTC defining the preprocessor macro
+// WEBRTC_EXCLUDE_METRICS_DEFAULT (if GN is used this can be achieved
+// by setting the GN arg rtc_exclude_metrics_default to true).
+// 2. Provide implementations of:
+// Histogram* webrtc::metrics::HistogramFactoryGetCounts(
+// const std::string& name, int sample, int min, int max,
+// int bucket_count);
+// Histogram* webrtc::metrics::HistogramFactoryGetEnumeration(
+// const std::string& name, int sample, int boundary);
+// void webrtc::metrics::HistogramAdd(
+// Histogram* histogram_pointer, const std::string& name, int sample);
//
// Example usage:
//
@@ -274,6 +277,39 @@
// Function for adding a |sample| to a histogram.
void HistogramAdd(Histogram* histogram_pointer, int sample);
+struct SampleInfo {
+ SampleInfo(const std::string& name, int min, int max, size_t bucket_count);
+ ~SampleInfo();
+
+ const std::string name;
+ const int min;
+ const int max;
+ const size_t bucket_count;
+ std::map<int, int> samples; // <value, # of events>
+};
+
+// Enables collection of samples.
+// This method should be called before any other call into webrtc.
+void Enable();
+
+// Gets histograms and clears all samples.
+void GetAndReset(
+ std::map<std::string, std::unique_ptr<SampleInfo>>* histograms);
+
+// Functions below are mainly for testing.
+
+// Clears all samples.
+void Reset();
+
+// Returns the number of times the |sample| has been added to the histogram.
+int NumEvents(const std::string& name, int sample);
+
+// Returns the total number of added samples to the histogram.
+int NumSamples(const std::string& name);
+
+// Returns the minimum sample value (or -1 if the histogram has no samples).
+int MinSample(const std::string& name);
+
} // namespace metrics
} // namespace webrtc
diff --git a/system_wrappers/include/metrics_default.h b/system_wrappers/include/metrics_default.h
index 5ce3582..5311587 100644
--- a/system_wrappers/include/metrics_default.h
+++ b/system_wrappers/include/metrics_default.h
@@ -11,51 +11,6 @@
#ifndef SYSTEM_WRAPPERS_INCLUDE_METRICS_DEFAULT_H_
#define SYSTEM_WRAPPERS_INCLUDE_METRICS_DEFAULT_H_
-#include <map>
-#include <memory>
-#include <string>
-
-namespace webrtc {
-namespace metrics {
-
-// This class does not actually exist. It is casted to an implementation defined
-// pointer inside the functions.
-class Histogram;
-
-struct SampleInfo {
- SampleInfo(const std::string& name, int min, int max, size_t bucket_count);
- ~SampleInfo();
-
- const std::string name;
- const int min;
- const int max;
- const size_t bucket_count;
- std::map<int, int> samples; // <value, # of events>
-};
-
-// Enables collection of samples.
-// This method should be called before any other call into webrtc.
-void Enable();
-
-// Gets histograms and clears all samples.
-void GetAndReset(
- std::map<std::string, std::unique_ptr<SampleInfo>>* histograms);
-
-// Functions below are mainly for testing.
-
-// Clears all samples.
-void Reset();
-
-// Returns the number of times the |sample| has been added to the histogram.
-int NumEvents(const std::string& name, int sample);
-
-// Returns the total number of added samples to the histogram.
-int NumSamples(const std::string& name);
-
-// Returns the minimum sample value (or -1 if the histogram has no samples).
-int MinSample(const std::string& name);
-
-} // namespace metrics
-} // namespace webrtc
+#include "system_wrappers/include/metrics.h"
#endif // SYSTEM_WRAPPERS_INCLUDE_METRICS_DEFAULT_H_
diff --git a/system_wrappers/source/metrics_default.cc b/system_wrappers/source/metrics.cc
similarity index 98%
rename from system_wrappers/source/metrics_default.cc
rename to system_wrappers/source/metrics.cc
index 7b62c81..662e64e 100644
--- a/system_wrappers/source/metrics_default.cc
+++ b/system_wrappers/source/metrics.cc
@@ -7,13 +7,12 @@
// be found in the AUTHORS file in the root of the source tree.
//
-#include "system_wrappers/include/metrics_default.h"
+#include "system_wrappers/include/metrics.h"
#include <algorithm>
#include "rtc_base/criticalsection.h"
#include "rtc_base/thread_annotations.h"
-#include "system_wrappers/include/metrics.h"
// Default implementation of histogram methods for WebRTC clients that do not
// want to provide their own implementation.
@@ -203,6 +202,7 @@
}
} // namespace
+#ifndef WEBRTC_EXCLUDE_METRICS_DEFAULT
// Implementation of histogram methods in
// webrtc/system_wrappers/interface/metrics.h.
@@ -259,6 +259,8 @@
ptr->Add(sample);
}
+#endif // WEBRTC_EXCLUDE_METRICS_DEFAULT
+
SampleInfo::SampleInfo(const std::string& name,
int min,
int max,