Bug 1412212. P3 - also dump debug info of AudioSink. draft
authorJW Wang <jwwang@mozilla.com>
Fri, 27 Oct 2017 15:36:24 +0800
changeset 687379 44276de00cb7ffbda59be38b55af56e7b485904d
parent 687378 71334712e9464a9d5fe0bc880ffa07a304990c06
child 737636 d807212188e80a1a559f0b24feb85ee270f7aa8e
push id86483
push userjwwang@mozilla.com
push dateFri, 27 Oct 2017 07:41:56 +0000
bugs1412212
milestone58.0a1
Bug 1412212. P3 - also dump debug info of AudioSink. MozReview-Commit-ID: AnvlXrhdoI5
dom/media/mediasink/AudioSink.cpp
dom/media/mediasink/AudioSink.h
dom/media/mediasink/AudioSinkWrapper.cpp
dom/media/mediasink/AudioSinkWrapper.h
--- a/dom/media/mediasink/AudioSink.cpp
+++ b/dom/media/mediasink/AudioSink.cpp
@@ -530,10 +530,27 @@ AudioSink::DrainConverter(uint32_t aMaxF
     CreateAudioFromBuffer(Move(convertedData), lastPacket);
   if (!data) {
     return 0;
   }
   mProcessedQueue.Push(data);
   return data->mFrames;
 }
 
+nsCString
+AudioSink::GetDebugInfo()
+{
+  MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
+  return nsPrintfCString("AudioSink: StartTime=%" PRId64
+                         " LastGoodPosition=%" PRId64
+                         " Playing=%d  OutputRate=%u Written=%" PRId64
+                         " Errored=%d PlaybackComplete=%d",
+                         mStartTime.ToMicroseconds(),
+                         mLastGoodPosition.ToMicroseconds(),
+                         mPlaying,
+                         mOutputRate,
+                         mWritten,
+                         bool(mErrored),
+                         bool(mPlaybackComplete));
+}
+
 } // namespace media
 } // namespace mozilla
--- a/dom/media/mediasink/AudioSink.h
+++ b/dom/media/mediasink/AudioSink.h
@@ -58,16 +58,18 @@ public:
   void SetPlaybackRate(double aPlaybackRate);
   void SetPreservesPitch(bool aPreservesPitch);
   void SetPlaying(bool aPlaying);
 
   MediaEventSource<bool>& AudibleEvent() {
     return mAudibleEvent;
   }
 
+  nsCString GetDebugInfo();
+
 private:
   // Allocate and initialize mAudioStream. Returns NS_OK on success.
   nsresult InitializeAudioStream(const PlaybackParams& aParams);
 
   // Interface of AudioStream::DataSource.
   // Called on the callback thread of cubeb.
   UniquePtr<AudioStream::Chunk> PopFrames(uint32_t aFrames) override;
   bool Ended() const override;
--- a/dom/media/mediasink/AudioSinkWrapper.cpp
+++ b/dom/media/mediasink/AudioSinkWrapper.cpp
@@ -239,11 +239,26 @@ AudioSinkWrapper::OnAudioEnded()
   mAudioSinkPromise.Complete();
   mPlayDuration = GetPosition();
   if (!mPlayStartTime.IsNull()) {
     mPlayStartTime = TimeStamp::Now();
   }
   mAudioEnded = true;
 }
 
+nsCString
+AudioSinkWrapper::GetDebugInfo()
+{
+  AssertOwnerThread();
+  auto str =
+    nsPrintfCString("AudioSinkWrapper: IsStarted=%d IsPlaying=%d AudioEnded=%d",
+                    IsStarted(),
+                    IsPlaying(),
+                    mAudioEnded);
+  if (mAudioSink) {
+    AppendStringIfNotEmpty(str, mAudioSink->GetDebugInfo());
+  }
+  return str;
+}
+
 } // namespace media
 } // namespace mozilla
 
--- a/dom/media/mediasink/AudioSinkWrapper.h
+++ b/dom/media/mediasink/AudioSinkWrapper.h
@@ -69,16 +69,18 @@ public:
 
   void Start(const TimeUnit& aStartTime, const MediaInfo& aInfo) override;
   void Stop() override;
   bool IsStarted() const override;
   bool IsPlaying() const override;
 
   void Shutdown() override;
 
+  nsCString GetDebugInfo() override;
+
 private:
   virtual ~AudioSinkWrapper();
 
   void AssertOwnerThread() const {
     MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
   }
 
   TimeUnit GetVideoPosition(TimeStamp aNow) const;