Activate event tracing for unit tests. For good!

The --trace_event=file.json option allows to log events,
for further inspection in chromium event viewer.

Previous handling of this option was broken,
closing the logger before the tests were even run.

Bug: webrtc:10926
Change-Id: I9123d12666b5f254feeaef685def96eb8ba1c7f8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167720
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Commit-Queue: Yves Gerey <yvesg@google.com>
Cr-Commit-Position: refs/heads/master@{#30401}
diff --git a/test/test_main_lib.cc b/test/test_main_lib.cc
index df74182..efa1128 100644
--- a/test/test_main_lib.cc
+++ b/test/test_main_lib.cc
@@ -122,13 +122,6 @@
     rtc::LogMessage::SetLogToStderr(absl::GetFlag(FLAGS_logs) ||
                                     absl::GetFlag(FLAGS_verbose));
 
-    std::string trace_event_path = absl::GetFlag(FLAGS_trace_event);
-    const bool capture_events = !trace_event_path.empty();
-    if (capture_events) {
-      rtc::tracing::SetupInternalTracer();
-      rtc::tracing::StartInternalCapture(trace_event_path.c_str());
-    }
-
     // InitFieldTrialsFromString stores the char*, so the char array must
     // outlive the application.
     field_trials_ = absl::GetFlag(FLAGS_force_fieldtrials);
@@ -152,18 +145,22 @@
     rtc::ThreadManager::Instance()->WrapCurrentThread();
     RTC_CHECK(rtc::Thread::Current());
 
-    if (capture_events) {
-      rtc::tracing::StopInternalCapture();
-    }
     return 0;
   }
 
   int Run(int argc, char* argv[]) override {
+    std::string trace_event_path = absl::GetFlag(FLAGS_trace_event);
+    const bool capture_events = !trace_event_path.empty();
+    if (capture_events) {
+      rtc::tracing::SetupInternalTracer();
+      rtc::tracing::StartInternalCapture(trace_event_path.c_str());
+    }
+
 #if defined(WEBRTC_IOS)
     rtc::test::InitTestSuite(RUN_ALL_TESTS, argc, argv,
                              absl::GetFlag(FLAGS_save_chartjson_result));
     rtc::test::RunTestsFromIOSApp();
-    return 0;
+    int exit_code = 0;
 #else
     int exit_code = RUN_ALL_TESTS();
 
@@ -188,17 +185,21 @@
       result_file << "{\"version\": 3}";
       result_file.close();
     }
+#endif
+
+    if (capture_events) {
+      rtc::tracing::StopInternalCapture();
+    }
 
 #if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) ||  \
     defined(MEMORY_SANITIZER) || defined(THREAD_SANITIZER) || \
     defined(UNDEFINED_SANITIZER)
     // We want the test flagged as failed only for sanitizer defects,
     // in which case the sanitizer will override exit code with 66.
-    return 0;
+    exit_code = 0;
 #endif
 
     return exit_code;
-#endif
   }
 
   ~TestMainImpl() override = default;