Bug 1295893 - Add entry/exit actions to state transitions of MDSM.
MozReview-Commit-ID: Ak17K7kEigC
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1056,31 +1056,56 @@ MediaDecoderStateMachine::ToStateStr(Sta
const char*
MediaDecoderStateMachine::ToStateStr()
{
MOZ_ASSERT(OnTaskQueue());
return ToStateStr(mState);
}
-void MediaDecoderStateMachine::SetState(State aState)
+void
+MediaDecoderStateMachine::SetState(State aState)
{
MOZ_ASSERT(OnTaskQueue());
if (mState == aState) {
return;
}
- DECODER_LOG("Change machine state from %s to %s",
- ToStateStr(), ToStateStr(aState));
-
+
+ DECODER_LOG("MDSM state: %s -> %s", ToStateStr(), ToStateStr(aState));
+
+ ExitState(mState);
mState = aState;
-
- mIsShutdown = mState == DECODER_STATE_ERROR || mState == DECODER_STATE_SHUTDOWN;
-
- // Clear state-scoped state.
- mSentPlaybackEndedEvent = false;
+ EnterState(mState);
+}
+
+void
+MediaDecoderStateMachine::ExitState(State aState)
+{
+ MOZ_ASSERT(OnTaskQueue());
+ switch (aState) {
+ case DECODER_STATE_COMPLETED:
+ mSentPlaybackEndedEvent = false;
+ break;
+ default:
+ break;
+ }
+}
+
+void
+MediaDecoderStateMachine::EnterState(State aState)
+{
+ MOZ_ASSERT(OnTaskQueue());
+ switch (aState) {
+ case DECODER_STATE_ERROR:
+ case DECODER_STATE_SHUTDOWN:
+ mIsShutdown = true;
+ break;
+ default:
+ break;
+ }
}
void MediaDecoderStateMachine::VolumeChanged()
{
MOZ_ASSERT(OnTaskQueue());
mMediaSink->SetVolume(mVolume);
}
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -363,16 +363,18 @@ private:
// and aborting all pending operations on the decode task queue.
void Reset(TrackSet aTracks = TrackSet(TrackInfo::kAudioTrack,
TrackInfo::kVideoTrack));
protected:
virtual ~MediaDecoderStateMachine();
void SetState(State aState);
+ void ExitState(State aState);
+ void EnterState(State aState);
void BufferedRangeUpdated();
void ReaderSuspendedChanged();
// Inserts MediaData* samples into their respective MediaQueues.
// aSample must not be null.