[tsan] Guard TestStatictics against concurrent access.

This CL quiets ThreadSanitizer for EventTracerTest.ScopedTraceEvent unit test.

Bug: webrtc:10943
Change-Id: Ifaec1ab37b85f091872f55e630189387f8df4401
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/151309
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Yves Gerey <yvesg@google.com>
Cr-Commit-Position: refs/heads/master@{#29090}
diff --git a/rtc_base/event_tracer_unittest.cc b/rtc_base/event_tracer_unittest.cc
index 27248e7..2556d24 100644
--- a/rtc_base/event_tracer_unittest.cc
+++ b/rtc_base/event_tracer_unittest.cc
@@ -10,6 +10,8 @@
 
 #include "rtc_base/event_tracer.h"
 
+#include "rtc_base/critical_section.h"
+#include "rtc_base/thread_annotations.h"
 #include "rtc_base/trace_event.h"
 #include "test/gtest.h"
 
@@ -17,38 +19,45 @@
 
 class TestStatistics {
  public:
-  TestStatistics() : events_logged_(0) {}
+  void Reset() {
+    rtc::CritScope cs(&crit_);
+    events_logged_ = 0;
+  }
 
-  void Reset() { events_logged_ = 0; }
+  void Increment() {
+    rtc::CritScope cs(&crit_);
+    ++events_logged_;
+  }
 
-  void Increment() { ++events_logged_; }
-
-  int Count() const { return events_logged_; }
+  int Count() const {
+    rtc::CritScope cs(&crit_);
+    return events_logged_;
+  }
 
   static TestStatistics* Get() {
-    static TestStatistics* test_stats = nullptr;
-    if (!test_stats)
-      test_stats = new TestStatistics();
-    return test_stats;
+    // google.github.io/styleguide/cppguide.html#Static_and_Global_Variables
+    static auto& test_stats = *new TestStatistics();
+    return &test_stats;
   }
 
  private:
-  int events_logged_;
+  rtc::CriticalSection crit_;
+  int events_logged_ RTC_GUARDED_BY(crit_) = 0;
 };
 
-static const unsigned char* GetCategoryEnabledHandler(const char* name) {
+const unsigned char* GetCategoryEnabledHandler(const char* /*name*/) {
   return reinterpret_cast<const unsigned char*>("test");
 }
 
-static void AddTraceEventHandler(char phase,
-                                 const unsigned char* category_enabled,
-                                 const char* name,
-                                 unsigned long long id,
-                                 int num_args,
-                                 const char** arg_names,
-                                 const unsigned char* arg_types,
-                                 const unsigned long long* arg_values,
-                                 unsigned char flags) {
+void TraceEventHandler(char /*phase*/,
+                       const unsigned char* /*category_enabled*/,
+                       const char* /*name*/,
+                       unsigned long long /*id*/,
+                       int /*num_args*/,
+                       const char** /*arg_names*/,
+                       const unsigned char* /*arg_types*/,
+                       const unsigned long long* /*arg_values*/,
+                       unsigned char /*flags*/) {
   TestStatistics::Get()->Increment();
 }
 
@@ -63,7 +72,7 @@
 }
 
 TEST(EventTracerTest, ScopedTraceEvent) {
-  SetupEventTracer(&GetCategoryEnabledHandler, &AddTraceEventHandler);
+  SetupEventTracer(&GetCategoryEnabledHandler, &TraceEventHandler);
   { TRACE_EVENT0("test", "ScopedTraceEvent"); }
   EXPECT_EQ(2, TestStatistics::Get()->Count());
   TestStatistics::Get()->Reset();