| Index: webrtc/system_wrappers/source/metrics_default.cc
|
| diff --git a/webrtc/system_wrappers/source/metrics_default.cc b/webrtc/system_wrappers/source/metrics_default.cc
|
| index 6ca90dafdc84933c8805f0f550809c1ceb36fe66..e1e4e807b3487ffe9902b63329ab498ea7c121e9 100644
|
| --- a/webrtc/system_wrappers/source/metrics_default.cc
|
| +++ b/webrtc/system_wrappers/source/metrics_default.cc
|
| @@ -253,6 +253,18 @@ const std::string& GetHistogramName(Histogram* histogram_pointer) {
|
|
|
| // Fast path. Adds |sample| to cached |histogram_pointer|.
|
| void HistogramAdd(Histogram* histogram_pointer, int sample) {
|
| + if (g_rtc_histogram_map == nullptr) {
|
| + // Histograms are disabled, so the pointer is invalid. Check on this instead
|
| + // of histogram_pointer being NULL so that we don't accidentally miss
|
| + // instances where HistogramAdd(histogram_, sample) is called with
|
| + // histogram_ uninitialized.
|
| + //
|
| + // This doesn't happen in Chromium since base::Histogram::FactoryGet and
|
| + // base::LinearHistogram::FactoryGet always return valid base::HistogramBase
|
| + // pointers. We could consider returning a null object, but having
|
| + // RtcHistogram virtual makes function calls to it slower.
|
| + return;
|
| + }
|
| RtcHistogram* ptr = reinterpret_cast<RtcHistogram*>(histogram_pointer);
|
| ptr->Add(sample);
|
| }
|
| @@ -267,6 +279,8 @@ SampleInfo::~SampleInfo() {}
|
|
|
| // Implementation of global functions in metrics_default.h.
|
| void Enable() {
|
| + // TODO(pbos): Make sure that no callers have called HistogramFactoryGet*,
|
| + // HistogramAdd or GetMap() at this point.
|
| RTC_DCHECK(g_rtc_histogram_map == nullptr);
|
| #if RTC_DCHECK_IS_ON
|
| RTC_DCHECK_EQ(0, rtc::AtomicOps::AcquireLoad(&g_rtc_histogram_called));
|
|
|