Bug 1444976 - Another type of logging to be converted later or maybe removed. draft
authorPaul Adenot <paul@paul.cx>
Tue, 20 Mar 2018 18:24:19 +0100
changeset 770065 f9af0e1376e098d6210eadd8913c440dc30845b9
parent 770064 43d5fdea158011c2dade855b381e84a0a6f887ab
child 770066 8930776bdae783e491d60fed3bef767827e067cc
push id103306
push userpaul@paul.cx
push dateTue, 20 Mar 2018 17:27:46 +0000
bugs1444976
milestone60.0a1
Bug 1444976 - Another type of logging to be converted later or maybe removed. MozReview-Commit-ID: LdKQZ4zagxV
dom/media/GraphDriver.cpp
--- 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;
   }