Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: webrtc/base/event_tracer.cc

Issue 2708723003: Introduce new constructor to PlatformThread. (Closed)
Patch Set: Disable RTC_DCHECK in channel_proxy + add TODO Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/base/platform_thread.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include "webrtc/base/event_tracer.h" 10 #include "webrtc/base/event_tracer.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 flags); 73 flags);
74 } 74 }
75 } 75 }
76 76
77 } // namespace webrtc 77 } // namespace webrtc
78 78
79 namespace rtc { 79 namespace rtc {
80 namespace tracing { 80 namespace tracing {
81 namespace { 81 namespace {
82 82
83 static bool EventTracingThreadFunc(void* params); 83 static void EventTracingThreadFunc(void* params);
84 84
85 // Atomic-int fast path for avoiding logging when disabled. 85 // Atomic-int fast path for avoiding logging when disabled.
86 static volatile int g_event_logging_active = 0; 86 static volatile int g_event_logging_active = 0;
87 87
88 // TODO(pbos): Log metadata for all threads, etc. 88 // TODO(pbos): Log metadata for all threads, etc.
89 class EventLogger final { 89 class EventLogger final {
90 public: 90 public:
91 EventLogger() 91 EventLogger()
92 : logging_thread_(EventTracingThreadFunc, this, "EventTracingThread"), 92 : logging_thread_(EventTracingThreadFunc,
93 this,
94 "EventTracingThread",
95 kLowPriority),
93 shutdown_event_(false, false) {} 96 shutdown_event_(false, false) {}
94 ~EventLogger() { RTC_DCHECK(thread_checker_.CalledOnValidThread()); } 97 ~EventLogger() { RTC_DCHECK(thread_checker_.CalledOnValidThread()); }
95 98
96 void AddTraceEvent(const char* name, 99 void AddTraceEvent(const char* name,
97 const unsigned char* category_enabled, 100 const unsigned char* category_enabled,
98 char phase, 101 char phase,
99 int num_args, 102 int num_args,
100 const char** arg_names, 103 const char** arg_names,
101 const unsigned char* arg_types, 104 const unsigned char* arg_types,
102 const unsigned long long* arg_values, 105 const unsigned long long* arg_values,
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 trace_events_.clear(); 206 trace_events_.clear();
204 } 207 }
205 // Enable event logging (fast-path). This should be disabled since starting 208 // Enable event logging (fast-path). This should be disabled since starting
206 // shouldn't be done twice. 209 // shouldn't be done twice.
207 RTC_CHECK_EQ(0, 210 RTC_CHECK_EQ(0,
208 rtc::AtomicOps::CompareAndSwap(&g_event_logging_active, 0, 1)); 211 rtc::AtomicOps::CompareAndSwap(&g_event_logging_active, 0, 1));
209 212
210 // Finally start, everything should be set up now. 213 // Finally start, everything should be set up now.
211 logging_thread_.Start(); 214 logging_thread_.Start();
212 TRACE_EVENT_INSTANT0("webrtc", "EventLogger::Start"); 215 TRACE_EVENT_INSTANT0("webrtc", "EventLogger::Start");
213 logging_thread_.SetPriority(kLowPriority);
214 } 216 }
215 217
216 void Stop() { 218 void Stop() {
217 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 219 RTC_DCHECK(thread_checker_.CalledOnValidThread());
218 TRACE_EVENT_INSTANT0("webrtc", "EventLogger::Stop"); 220 TRACE_EVENT_INSTANT0("webrtc", "EventLogger::Stop");
219 // Try to stop. Abort if we're not currently logging. 221 // Try to stop. Abort if we're not currently logging.
220 if (rtc::AtomicOps::CompareAndSwap(&g_event_logging_active, 1, 0) == 0) 222 if (rtc::AtomicOps::CompareAndSwap(&g_event_logging_active, 1, 0) == 0)
221 return; 223 return;
222 224
223 // Wake up logging thread to finish writing. 225 // Wake up logging thread to finish writing.
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 321
320 rtc::CriticalSection crit_; 322 rtc::CriticalSection crit_;
321 std::vector<TraceEvent> trace_events_ GUARDED_BY(crit_); 323 std::vector<TraceEvent> trace_events_ GUARDED_BY(crit_);
322 rtc::PlatformThread logging_thread_; 324 rtc::PlatformThread logging_thread_;
323 rtc::Event shutdown_event_; 325 rtc::Event shutdown_event_;
324 rtc::ThreadChecker thread_checker_; 326 rtc::ThreadChecker thread_checker_;
325 FILE* output_file_ = nullptr; 327 FILE* output_file_ = nullptr;
326 bool output_file_owned_ = false; 328 bool output_file_owned_ = false;
327 }; 329 };
328 330
329 static bool EventTracingThreadFunc(void* params) { 331 static void EventTracingThreadFunc(void* params) {
330 static_cast<EventLogger*>(params)->Log(); 332 static_cast<EventLogger*>(params)->Log();
331 // False indicates that the thread function has done its job and doesn't need
332 // to be restarted again. Log() runs its own internal loop.
333 return false;
334 } 333 }
335 334
336 static EventLogger* volatile g_event_logger = nullptr; 335 static EventLogger* volatile g_event_logger = nullptr;
337 static const char* const kDisabledTracePrefix = TRACE_DISABLED_BY_DEFAULT(""); 336 static const char* const kDisabledTracePrefix = TRACE_DISABLED_BY_DEFAULT("");
338 const unsigned char* InternalGetCategoryEnabled(const char* name) { 337 const unsigned char* InternalGetCategoryEnabled(const char* name) {
339 const char* prefix_ptr = &kDisabledTracePrefix[0]; 338 const char* prefix_ptr = &kDisabledTracePrefix[0];
340 const char* name_ptr = name; 339 const char* name_ptr = name;
341 // Check whether name contains the default-disabled prefix. 340 // Check whether name contains the default-disabled prefix.
342 while (*prefix_ptr == *name_ptr && *prefix_ptr != '\0') { 341 while (*prefix_ptr == *name_ptr && *prefix_ptr != '\0') {
343 ++prefix_ptr; 342 ++prefix_ptr;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 RTC_DCHECK(old_logger); 398 RTC_DCHECK(old_logger);
400 RTC_CHECK(rtc::AtomicOps::CompareAndSwapPtr( 399 RTC_CHECK(rtc::AtomicOps::CompareAndSwapPtr(
401 &g_event_logger, old_logger, 400 &g_event_logger, old_logger,
402 static_cast<EventLogger*>(nullptr)) == old_logger); 401 static_cast<EventLogger*>(nullptr)) == old_logger);
403 delete old_logger; 402 delete old_logger;
404 webrtc::SetupEventTracer(nullptr, nullptr); 403 webrtc::SetupEventTracer(nullptr, nullptr);
405 } 404 }
406 405
407 } // namespace tracing 406 } // namespace tracing
408 } // namespace rtc 407 } // namespace rtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/base/platform_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698