Bug 1411476. P4 - rewrite GetDebugInfo() functions to make string concatenation easier. draft
authorJW Wang <jwwang@mozilla.com>
Wed, 25 Oct 2017 13:13:30 +0800
changeset 685971 c1cef06c4218a3501448c3b538dca15ff9d26e15
parent 685970 12e0997b462ee62ada7a5bc06ce968ba5bfdba62
child 685972 e8db574aec2cd769e10bb18fe926f2e11540a7c4
push id86052
push userjwwang@mozilla.com
push dateWed, 25 Oct 2017 07:20:26 +0000
bugs1411476
milestone58.0a1
Bug 1411476. P4 - rewrite GetDebugInfo() functions to make string concatenation easier. MozReview-Commit-ID: V9cxIZGl8M
dom/media/MediaDecoderStateMachine.cpp
dom/media/VideoUtils.h
dom/media/mediasink/DecodedStream.cpp
dom/media/mediasink/VideoSink.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -3691,40 +3691,43 @@ uint32_t MediaDecoderStateMachine::GetAm
 }
 
 nsCString
 MediaDecoderStateMachine::GetDebugInfo()
 {
   MOZ_ASSERT(OnTaskQueue());
   int64_t duration =
     mDuration.Ref() ? mDuration.Ref().ref().ToMicroseconds() : -1;
-  return nsPrintfCString(
-           "MediaDecoderStateMachine State: duration=%" PRId64
-           " GetMediaTime=%" PRId64 " GetClock="
-           "%" PRId64 " mMediaSink=%p state=%s mPlayState=%d "
-           "mSentFirstFrameLoadedEvent=%d IsPlaying=%d mAudioStatus=%s "
-           "mVideoStatus=%s mDecodedAudioEndTime=%" PRId64
-           " mDecodedVideoEndTime=%" PRId64 " mAudioCompleted=%d "
-           "mVideoCompleted=%d",
-           duration,
-           GetMediaTime().ToMicroseconds(),
-           mMediaSink->IsStarted() ? GetClock().ToMicroseconds() : -1,
-           mMediaSink.get(),
-           ToStateStr(),
-           mPlayState.Ref(),
-           mSentFirstFrameLoadedEvent,
-           IsPlaying(),
-           AudioRequestStatus(),
-           VideoRequestStatus(),
-           mDecodedAudioEndTime.ToMicroseconds(),
-           mDecodedVideoEndTime.ToMicroseconds(),
-           mAudioCompleted,
-           mVideoCompleted) +
-         mStateObj->GetDebugInfo() + nsCString("\n") +
-         mMediaSink->GetDebugInfo();
+  auto str = nsPrintfCString(
+    "MediaDecoderStateMachine State: duration=%" PRId64 " GetMediaTime=%" PRId64
+    " GetClock="
+    "%" PRId64 " mMediaSink=%p state=%s mPlayState=%d "
+    "mSentFirstFrameLoadedEvent=%d IsPlaying=%d mAudioStatus=%s "
+    "mVideoStatus=%s mDecodedAudioEndTime=%" PRId64
+    " mDecodedVideoEndTime=%" PRId64 " mAudioCompleted=%d "
+    "mVideoCompleted=%d %s",
+    duration,
+    GetMediaTime().ToMicroseconds(),
+    mMediaSink->IsStarted() ? GetClock().ToMicroseconds() : -1,
+    mMediaSink.get(),
+    ToStateStr(),
+    mPlayState.Ref(),
+    mSentFirstFrameLoadedEvent,
+    IsPlaying(),
+    AudioRequestStatus(),
+    VideoRequestStatus(),
+    mDecodedAudioEndTime.ToMicroseconds(),
+    mDecodedVideoEndTime.ToMicroseconds(),
+    mAudioCompleted,
+    mVideoCompleted,
+    mStateObj->GetDebugInfo().get());
+
+  AppendStringIfNotEmpty(str, mMediaSink->GetDebugInfo());
+
+  return str;
 }
 
 RefPtr<MediaDecoder::DebugInfoPromise>
 MediaDecoderStateMachine::RequestDebugInfo()
 {
   using PromiseType = MediaDecoder::DebugInfoPromise;
   RefPtr<PromiseType::Private> p = new PromiseType::Private(__func__);
   RefPtr<MediaDecoderStateMachine> self = this;
--- a/dom/media/VideoUtils.h
+++ b/dom/media/VideoUtils.h
@@ -586,11 +586,20 @@ StringListContains(const ListString& aLi
   for (const auto& listItem : MakeStringListRange<empties>(aList)) {
     if (listItem.Equals(aItem)) {
       return true;
     }
   }
   return false;
 }
 
+inline void
+AppendStringIfNotEmpty(nsACString& aDest, nsACString&& aSrc)
+{
+  if (!aSrc.IsEmpty()) {
+    aDest.Append(NS_LITERAL_CSTRING("\n"));
+    aDest.Append(aSrc);
+  }
+}
+
 } // end namespace mozilla
 
 #endif
--- a/dom/media/mediasink/DecodedStream.cpp
+++ b/dom/media/mediasink/DecodedStream.cpp
@@ -786,15 +786,23 @@ DecodedStream::DisconnectListener()
   mVideoFinishListener.Disconnect();
 }
 
 nsCString
 DecodedStream::GetDebugInfo()
 {
   AssertOwnerThread();
   int64_t startTime = mStartTime.isSome() ? mStartTime->ToMicroseconds() : -1;
-  return nsPrintfCString(
-    "DecodedStream=%p mStartTime=%" PRId64 " mLastOutputTime=%" PRId64 " mPlaying=%d mData=%p",
-    this, startTime, mLastOutputTime.ToMicroseconds(), mPlaying, mData.get())
-    + (mData ? nsCString("\n") + mData->GetDebugInfo() : nsCString());
+  auto str =
+    nsPrintfCString("DecodedStream=%p mStartTime=%" PRId64
+                    " mLastOutputTime=%" PRId64 " mPlaying=%d mData=%p",
+                    this,
+                    startTime,
+                    mLastOutputTime.ToMicroseconds(),
+                    mPlaying,
+                    mData.get());
+  if (mData) {
+    AppendStringIfNotEmpty(str, mData->GetDebugInfo());
+  }
+  return str;
 }
 
 } // namespace mozilla
--- a/dom/media/mediasink/VideoSink.cpp
+++ b/dom/media/mediasink/VideoSink.cpp
@@ -503,20 +503,26 @@ VideoSink::MaybeResolveEndPromise()
     mEndPromiseHolder.ResolveIfExists(true, __func__);
   }
 }
 
 nsCString
 VideoSink::GetDebugInfo()
 {
   AssertOwnerThread();
-  return nsPrintfCString(
+  auto str = nsPrintfCString(
     "VideoSink Status: IsStarted=%d IsPlaying=%d VideoQueue(finished=%d "
     "size=%zu) mVideoFrameEndTime=%" PRId64 " mHasVideo=%d "
-    "mVideoSinkEndRequest.Exists()=%d mEndPromiseHolder.IsEmpty()=%d\n",
-    IsStarted(), IsPlaying(), VideoQueue().IsFinished(),
-    VideoQueue().GetSize(), mVideoFrameEndTime.ToMicroseconds(), mHasVideo,
-    mVideoSinkEndRequest.Exists(), mEndPromiseHolder.IsEmpty())
-    + mAudioSink->GetDebugInfo();
+    "mVideoSinkEndRequest.Exists()=%d mEndPromiseHolder.IsEmpty()=%d",
+    IsStarted(),
+    IsPlaying(),
+    VideoQueue().IsFinished(),
+    VideoQueue().GetSize(),
+    mVideoFrameEndTime.ToMicroseconds(),
+    mHasVideo,
+    mVideoSinkEndRequest.Exists(),
+    mEndPromiseHolder.IsEmpty());
+  AppendStringIfNotEmpty(str, mAudioSink->GetDebugInfo());
+  return str;
 }
 
 } // namespace media
 } // namespace mozilla