Bug 1314219. Part 2 - remove unused watchables and fix some comments.
MozReview-Commit-ID: 6F6WSq3aE2w
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1679,29 +1679,26 @@ MediaDecoderStateMachine::MediaDecoderSt
mFrameStats(&aDecoder->GetFrameStatistics()),
mVideoFrameContainer(aDecoder->GetVideoFrameContainer()),
mAudioChannel(aDecoder->GetAudioChannel()),
mTaskQueue(new TaskQueue(GetMediaThreadPool(MediaThreadType::PLAYBACK),
/* aSupportsTailDispatch = */ true)),
mWatchManager(this, mTaskQueue),
mDispatchedStateMachine(false),
mDelayedScheduler(mTaskQueue),
- INIT_WATCHABLE(mState, DECODER_STATE_DECODING_METADATA),
mCurrentFrameID(0),
INIT_WATCHABLE(mObservedDuration, TimeUnit()),
mFragmentEndTime(-1),
mReader(new MediaDecoderReaderWrapper(mTaskQueue, aReader)),
mDecodedAudioEndTime(0),
mDecodedVideoEndTime(0),
mPlaybackRate(1.0),
mLowAudioThresholdUsecs(detail::LOW_AUDIO_USECS),
mAmpleAudioThresholdUsecs(detail::AMPLE_AUDIO_USECS),
mAudioCaptured(false),
- INIT_WATCHABLE(mAudioCompleted, false),
- INIT_WATCHABLE(mVideoCompleted, false),
mNotifyMetadataBeforeFirstFrame(false),
mMinimizePreroll(false),
mSentLoadedMetadataEvent(false),
mSentFirstFrameLoadedEvent(false),
mVideoDecodeSuspended(false),
mVideoDecodeSuspendTimer(mTaskQueue),
mOutputStreamManager(new OutputStreamManager()),
mResource(aDecoder->GetResource()),
@@ -3232,17 +3229,17 @@ MediaDecoderStateMachine::DumpDebugInfo(
DUMP_LOG(
"GetMediaTime=%lld GetClock=%lld mMediaSink=%p "
"mState=%s mPlayState=%d mSentFirstFrameLoadedEvent=%d IsPlaying=%d "
"mAudioStatus=%s mVideoStatus=%s mDecodedAudioEndTime=%lld mDecodedVideoEndTime=%lld "
"mAudioCompleted=%d mVideoCompleted=%d",
GetMediaTime(), mMediaSink->IsStarted() ? GetClock() : -1, mMediaSink.get(),
ToStateStr(), mPlayState.Ref(), mSentFirstFrameLoadedEvent, IsPlaying(),
AudioRequestStatus(), VideoRequestStatus(), mDecodedAudioEndTime, mDecodedVideoEndTime,
- mAudioCompleted.Ref(), mVideoCompleted.Ref());
+ mAudioCompleted, mVideoCompleted);
});
// Since the task is run asynchronously, it is possible other tasks get first
// and change the object states before we print them. Therefore we want to
// dispatch this task immediately without waiting for the tail dispatching
// phase so object states are less likely to change before being printed.
OwnerThread()->Dispatch(r.forget(),
AbstractThread::AssertDispatchSuccess, AbstractThread::TailDispatch);
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -557,19 +557,17 @@ private:
// Queue of audio frames. This queue is threadsafe, and is accessed from
// the audio, decoder, state machine, and main threads.
MediaQueue<MediaData> mAudioQueue;
// Queue of video frames. This queue is threadsafe, and is accessed from
// the decoder, state machine, and main threads.
MediaQueue<MediaData> mVideoQueue;
- // The decoder monitor must be obtained before modifying this state.
- // Accessed on state machine, audio, main, and AV thread.
- Watchable<State> mState;
+ State mState = DECODER_STATE_DECODING_METADATA;
UniquePtr<StateObject> mStateObj;
media::TimeUnit Duration() const { MOZ_ASSERT(OnTaskQueue()); return mDuration.Ref().ref(); }
// Recomputes the canonical duration from various sources.
void RecomputeDuration();
@@ -676,27 +674,21 @@ private:
void OnSuspendTimerResolved();
void OnSuspendTimerRejected();
// True if we shouldn't play our audio (but still write it to any capturing
// streams). When this is true, the audio thread will never start again after
// it has stopped.
bool mAudioCaptured;
- // True if the audio playback thread has finished. It is finished
- // when either all the audio frames have completed playing, or we've moved
- // into shutdown state, and the threads are to be
- // destroyed. Written by the audio playback thread and read and written by
- // the state machine thread. Synchronised via decoder monitor.
- // When data is being sent to a MediaStream, this is true when all data has
- // been written to the MediaStream.
- Watchable<bool> mAudioCompleted;
+ // True if all audio frames are already rendered.
+ bool mAudioCompleted = false;
// True if all video frames are already rendered.
- Watchable<bool> mVideoCompleted;
+ bool mVideoCompleted = false;
// Flag whether we notify metadata before decoding the first frame or after.
//
// Note that the odd semantics here are designed to replicate the current
// behavior where we notify the decoder each time we come out of dormant, but
// send suppressed event visibility for those cases. This code can probably be
// simplified.
bool mNotifyMetadataBeforeFirstFrame;