Bug 1411476. P4 - rewrite GetDebugInfo() functions to make string concatenation easier.
MozReview-Commit-ID: V9cxIZGl8M
--- 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