The new constructor introduces two new changes:
* Support specifying thread priority at construction time.
- Moving forward, the SetPriority() method will be removed.
* New thread function type.
- The new type has 'void' as a return type and a polling loop
inside PlatformThread, is not used.
The old function type is still supported until all places have been moved over.
In this CL, the first steps towards deprecating the old mechanism are taken
by moving parts of the code that were simple to move, over to the new callback
type.
BUG=webrtc:7187
Review-Url: https://codereview.webrtc.org/2708723003
Cr-Commit-Position: refs/heads/master@{#16779}
This CL fixes a crash that could happen when JSON event tracing is
shutting down. The cause of the crash was the fact that the logger
thread function was returning 'true', causing the platform thread to run
it repeatedly even though that wasn't the intention.
Usually the EventLogger::Stop() function would set the event requesting
the logging thread to clean up and close the file, and then immediately
call PlatformThread::Stop() which would stop the outer loop. The Log()
function would only run once and everything behaves as expected.
However, if a context switch happens between the shutdown_event_.Set()
and logging_thread_.Stop() calls in EventLogger::Stop(), the logger
thread function would close the file and exit the Log() method, while
PlatformThread will rerun it again. So the Log() function runs twice,
and the second time output_file_ is NULL which either causes the DCHECK
to fail (in debug builds) or the fprintf() to crash with SIGSEGV (in
release builds).
The fix simply changes the return value of the thread function to false
so it never runs twice.
R=pthatcher@webrtc.org
Review URL: https://codereview.webrtc.org/2168283002 .
Cr-Commit-Position: refs/heads/master@{#13510}
Lowers risk of the event-tracing thread affecting measurements (and
performance of device). Entirely speculative, but shouldn't hurt.
Timings are still done on the thread that calls the trace macros.
BUG=
R=tommi@webrtc.org
Review URL: https://codereview.webrtc.org/2013363002 .
Cr-Commit-Position: refs/heads/master@{#12943}
Permits measuring times from start of recording (usually start of a
call), and not time from first event that occurs after tracing starts.
BUG=
R=tommi@webrtc.org
Review URL: https://codereview.webrtc.org/1746693002 .
Cr-Commit-Position: refs/heads/master@{#11815}
Incorrect argument order, also added unittest which should've been there
in the first place.
Also renames AtomicLoadPtr to AcquireLoadPtr to match non-ptr version.
BUG=
R=tommi@webrtc.org
Review URL: https://codereview.webrtc.org/1537923003 .
Cr-Commit-Position: refs/heads/master@{#11086}
rtc::PlatformThreadId is pid_t (32-bit signed int) on Linux and Mac,
but DWORD (32-bit unsigned int) on Windows.
Using the %d printf specifier is therefore not correct on Windows,
and Clang would warn about it:
..\..\third_party\webrtc\base\event_tracer.cc(124,46) : error: format specifies
type 'int' but the argument has type 'rtc::PlatformThreadId' (aka 'unsigned
long') [-Werror,-Wformat]
e.phase, e.timestamp, e.pid, e.tid);
^~~~~
This commit fixes the problem by explicitly casting to int before printing.
BUG=82385
Review URL: https://codereview.webrtc.org/1514253002 .
Cr-Commit-Position: refs/heads/master@{#10982}
Logs tracing events (TRACE_EVENT0 and friends) to storage in a format
compatible with chrome://tracing which can be used for performance
evaluation, finding lock contention and other sweet things). Tracing is
still basic and doesn't contain thread metadata or logging of tracing
arguments.
BUG=webrtc:5158
R=tommi@webrtc.org
Review URL: https://codereview.webrtc.org/1457383002 .
Cr-Commit-Position: refs/heads/master@{#10921}