Bug 1965992 Add some logging of MediaFormatReader drain progress r=media-playback-reviewers,padenot

Differential Revision: https://phabricator.services.mozilla.com/D249203
This commit is contained in:
Karl Tomlinson
2025-05-15 03:01:15 +00:00
committed by ktomlinson@mozilla.com
parent 684f118472
commit 377b91d30b
2 changed files with 17 additions and 7 deletions

View File

@@ -207,6 +207,12 @@ void MediaFormatReader::DecoderData::Flush() {
mFlushed = true; mFlushed = true;
} }
void MediaFormatReader::DecoderData::RequestDrain() {
LOG("");
MOZ_RELEASE_ASSERT(mDrainState == DrainState::None);
mDrainState = DrainState::DrainRequested;
}
class MediaFormatReader::DecoderFactory { class MediaFormatReader::DecoderFactory {
using InitPromise = MediaDataDecoder::InitPromise; using InitPromise = MediaDataDecoder::InitPromise;
using TokenPromise = AllocPolicy::Promise; using TokenPromise = AllocPolicy::Promise;
@@ -2330,17 +2336,19 @@ void MediaFormatReader::DrainDecoder(TrackType aTrack) {
decoder.mDecoder->Drain() decoder.mDecoder->Drain()
->Then( ->Then(
mTaskQueue, __func__, mTaskQueue, __func__,
[self, aTrack, &decoder](MediaDataDecoder::DecodedData&& aResults) { [this, self, aTrack,
&decoder](MediaDataDecoder::DecodedData&& aResults) {
decoder.mDrainRequest.Complete(); decoder.mDrainRequest.Complete();
DDLOGEX(self.get(), DDLogCategory::Log, "drained", DDNoValue{}); DDLOGEX(self.get(), DDLogCategory::Log, "drained", DDNoValue{});
if (aResults.IsEmpty()) { if (aResults.IsEmpty()) {
LOG("DrainDecoder drained");
decoder.mDrainState = DrainState::DrainCompleted; decoder.mDrainState = DrainState::DrainCompleted;
} else { } else {
self->NotifyNewOutput(aTrack, std::move(aResults)); NotifyNewOutput(aTrack, std::move(aResults));
// Let's see if we have any more data available to drain. // Let's see if we have any more data available to drain.
decoder.mDrainState = DrainState::PartialDrainPending; decoder.mDrainState = DrainState::PartialDrainPending;
} }
self->ScheduleUpdate(aTrack); ScheduleUpdate(aTrack);
}, },
[self, aTrack, &decoder](const MediaResult& aError) { [self, aTrack, &decoder](const MediaResult& aError) {
decoder.mDrainRequest.Complete(); decoder.mDrainRequest.Complete();

View File

@@ -254,6 +254,9 @@ class MediaFormatReader final
return mTrackInfoUpdatedEvent; return mTrackInfoUpdatedEvent;
} }
template <typename T>
friend struct DDLoggedTypeTraits; // For DecoderData
private: private:
bool HasVideo() const { return mVideo.mTrackDemuxer; } bool HasVideo() const { return mVideo.mTrackDemuxer; }
bool HasAudio() const { return mAudio.mTrackDemuxer; } bool HasAudio() const { return mAudio.mTrackDemuxer; }
@@ -469,10 +472,7 @@ class MediaFormatReader final
return mDrainState == DrainState::DrainCompleted || return mDrainState == DrainState::DrainCompleted ||
mDrainState == DrainState::DrainAborted; mDrainState == DrainState::DrainAborted;
} }
void RequestDrain() { void RequestDrain();
MOZ_RELEASE_ASSERT(mDrainState == DrainState::None);
mDrainState = DrainState::DrainRequested;
}
void StartRecordDecodingPerf(const TrackType aTrack, void StartRecordDecodingPerf(const TrackType aTrack,
const MediaRawData* aSample); const MediaRawData* aSample);
@@ -907,6 +907,8 @@ class MediaFormatReader final
Atomic<bool> mEncryptedCustomIdent; Atomic<bool> mEncryptedCustomIdent;
}; };
DDLoggedTypeCustomName(MediaFormatReader::DecoderData, DecoderData);
} // namespace mozilla } // namespace mozilla
#endif #endif