Bug 1584522 - Change the audio callback trace logger to be more ergonomic. r=pehrsons

Differential Revision: https://phabricator.services.mozilla.com/D47430

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Paul Adenot 2019-10-02 12:16:22 +00:00
parent d579352ba8
commit bc71a97b2f
3 changed files with 34 additions and 24 deletions

View File

@ -43,8 +43,6 @@ using namespace mozilla::dom;
using namespace mozilla::gfx;
using namespace mozilla::media;
mozilla::AsyncLogger gMTGTraceLogger("MTGTracing");
namespace mozilla {
LazyLogModule gMediaTrackGraphLog("MediaTrackGraph");
@ -66,10 +64,6 @@ MediaTrackGraphImpl::~MediaTrackGraphImpl() {
"thread");
LOG(LogLevel::Debug, ("MediaTrackGraph %p destroyed", this));
LOG(LogLevel::Debug, ("MediaTrackGraphImpl::~MediaTrackGraphImpl"));
#ifdef TRACING
gMTGTraceLogger.Stop();
#endif
}
void MediaTrackGraphImpl::AddTrackGraphThread(MediaTrack* aTrack) {
@ -2849,18 +2843,14 @@ MediaTrackGraphImpl::MediaTrackGraphImpl(GraphDriverType aDriverRequested,
} else {
mDriver = new SystemClockDriver(this);
}
#ifdef TRACING
// This is a noop if the logger has not been enabled.
gMTGTraceLogger.Start();
gMTGTraceLogger.Log("[");
#endif
} else {
mDriver = new OfflineClockDriver(this, MEDIA_GRAPH_TARGET_PERIOD_MS);
}
mLastMainThreadUpdate = TimeStamp::Now();
StartAudioCallbackTracing();
RegisterWeakAsyncMemoryReporter(this);
}

View File

@ -12,6 +12,21 @@
using namespace mozilla;
mozilla::AsyncLogger gAudioCallbackTraceLogger("AudioCallbackTracing");
static Atomic<bool> gTracingStarted(false);
void StartAudioCallbackTracing() {
#ifdef TRACING
if (gTracingStarted) {
return;
}
// This is a noop if the logger has not been enabled.
gAudioCallbackTraceLogger.Start();
gAudioCallbackTraceLogger.Log("[");
gTracingStarted = true;
#endif
}
uint64_t AutoTracer::NowInUs() {
static TimeStamp base = TimeStamp::Now();
return (TimeStamp::Now() - base).ToMicroseconds();

View File

@ -31,6 +31,11 @@
# define FUNCTION_SIGNATURE __PRETTY_FUNCTION__
#endif
extern mozilla::AsyncLogger gAudioCallbackTraceLogger;
// This is no-op if tracing is not enabled, and is idempotent.
void StartAudioCallbackTracing();
#ifdef TRACING
/* TRACE is for use in the real-time audio rendering thread.
* It would be better to always pass in the thread id. However, the thread an
@ -42,20 +47,20 @@
* displaying those elements in two separate lanes.
* The other thread have "normal" tid. Hashing allows being able to get a
* string representation that is unique and guaranteed to be portable. */
# define TRACE_AUDIO_CALLBACK() \
AutoTracer trace(gMTGTraceLogger, FUNCTION_SIGNATURE, getpid(), 0);
# define TRACE_AUDIO_CALLBACK_BUDGET(aFrames, aSampleRate) \
AutoTracer budget(gMTGTraceLogger, "Real-time budget", getpid(), 1, \
AutoTracer::EventType::BUDGET, aFrames, aSampleRate);
# define TRACE_AUDIO_CALLBACK_COMMENT(aFmt, ...) \
AutoTracer trace(gMTGTraceLogger, FUNCTION_SIGNATURE, getpid(), 0, \
AutoTracer::EventType::DURATION, aFmt, ##__VA_ARGS__);
# define TRACE() \
AutoTracer trace( \
gMTGTraceLogger, FUNCTION_SIGNATURE, getpid(), \
# define TRACE_AUDIO_CALLBACK() \
AutoTracer trace(gAudioCallbackTraceLogger, FUNCTION_SIGNATURE, getpid(), \
0);
# define TRACE_AUDIO_CALLBACK_BUDGET(aFrames, aSampleRate) \
AutoTracer budget(gAudioCallbackTraceLogger, "Real-time budget", getpid(), \
1, AutoTracer::EventType::BUDGET, aFrames, aSampleRate);
# define TRACE_AUDIO_CALLBACK_COMMENT(aFmt, ...) \
AutoTracer trace(gAudioCallbackTraceLogger, FUNCTION_SIGNATURE, getpid(), \
0, AutoTracer::EventType::DURATION, aFmt, ## __VA_ARGS__);
# define TRACE() \
AutoTracer trace(gAudioCallbackTraceLogger, FUNCTION_SIGNATURE, getpid(),\
std::hash<std::thread::id>{}(std::this_thread::get_id()));
# define TRACE_COMMENT(aFmt, ...) \
AutoTracer trace(gMTGTraceLogger, FUNCTION_SIGNATURE, getpid(), \
AutoTracer trace(gAudioCallbackTraceLogger, FUNCTION_SIGNATURE, getpid(), \
std::hash<std::thread::id>{}(std::this_thread::get_id()), \
AutoTracer::EventType::DURATION, aFmt, ##__VA_ARGS__);
#else