Bug 1444976 - Another type of logging to be converted later or maybe removed.
MozReview-Commit-ID: LdKQZ4zagxV
--- a/dom/media/GraphDriver.cpp
+++ b/dom/media/GraphDriver.cpp
@@ -868,20 +868,51 @@ AudioCallbackDriver::AutoInCallback::Aut
{
mDriver->mInCallback = true;
}
AudioCallbackDriver::AutoInCallback::~AutoInCallback() {
mDriver->mInCallback = false;
}
+template<typename CallbackPtr>
+class MOZ_RAII LoadMonitor
+{
+public:
+ LoadMonitor(uint32_t aFrames, uint32_t aSamplerate, CallbackPtr aCallback)
+ : mFrames(aFrames)
+ , mSamplerate(aSamplerate)
+ , mCallback(aCallback)
+ , mStart(TimeStamp::Now())
+ {}
+ ~LoadMonitor()
+ {
+ float theoreticalBudget = static_cast<float>(mFrames) / mSamplerate;
+ float iterationDuration = (TimeStamp::Now() - mStart).ToSeconds();
+
+ mCallback(mFrames, iterationDuration, iterationDuration / theoreticalBudget);
+ }
+private:
+ uint32_t mFrames;
+ uint32_t mSamplerate;
+ CallbackPtr mCallback;
+ TimeStamp mStart;
+};
+
+void PrintLoad(uint32_t aFrames, float aSeconds, float aLoad)
+{
+ // XXX this needs to use a lock free ring buffer and a print thread like in cubeb
+ printf("#load-trace,%u,%f,%f\n", aFrames, aSeconds * 1000, aLoad);
+}
+
long
AudioCallbackDriver::DataCallback(const AudioDataValue* aInputBuffer,
AudioDataValue* aOutputBuffer, long aFrames)
{
+ // LoadMonitor<void(*)(uint32_t, float, float)> monitor(aFrames, mSampleRate, PrintLoad);
TRACE_BUDGET(GraphImpl()->TraceLogger(), static_cast<float>(aFrames) / mSampleRate * 1e6);
TRACE(GraphImpl()->TraceLogger());
// Don't add the callback until we're inited and ready
if (!mAddedMixer) {
mGraphImpl->mMixer.AddCallback(this);
mAddedMixer = true;
}