Bug 1300956. Part 10 - Remove null-checks for mStateObj. draft
authorJW Wang <jwwang@mozilla.com>
Tue, 06 Sep 2016 11:42:28 +0800
changeset 411529 2558c786d881ce69d50a6a62ae8833b8c42a1637
parent 411528 43e4388b5af7aab57d689a37ad7aa1e73bf0b6dc
child 411594 8d6939c2d80e114b3583411a01084c2a7e48f7c3
child 412049 8c7a489337a14d500f19512827084ca1e6e2de5d
push id28915
push userjwwang@mozilla.com
push dateThu, 08 Sep 2016 07:23:46 +0000
bugs1300956
milestone51.0a1
Bug 1300956. Part 10 - Remove null-checks for mStateObj. MozReview-Commit-ID: 6SRx1QqRXC8
dom/media/MediaDecoderStateMachine.cpp
dom/media/MediaDecoderStateMachine.h
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1059,18 +1059,20 @@ nsresult MediaDecoderStateMachine::Init(
     OwnerThread(), __func__, this,
     &MediaDecoderStateMachine::OnCDMProxyReady,
     &MediaDecoderStateMachine::OnCDMProxyNotReady));
 #endif
 
   nsresult rv = mReader->Init();
   NS_ENSURE_SUCCESS(rv, rv);
 
-  OwnerThread()->Dispatch(
-    NewRunnableMethod(this, &MediaDecoderStateMachine::EnterState));
+  RefPtr<MediaDecoderStateMachine> self = this;
+  OwnerThread()->Dispatch(NS_NewRunnableFunction([self] () {
+    self->mStateObj->Enter();
+  }));
 
   return NS_OK;
 }
 
 void
 MediaDecoderStateMachine::SetMediaDecoderReaderWrapperCallback()
 {
   MOZ_ASSERT(OnTaskQueue());
@@ -1250,17 +1252,18 @@ MediaDecoderStateMachine::SetState(State
 {
   MOZ_ASSERT(OnTaskQueue());
   if (mState == aState) {
     return;
   }
 
   DECODER_LOG("MDSM state: %s -> %s", ToStateStr(), ToStateStr(aState));
 
-  ExitState();
+  MOZ_ASSERT(mState == mStateObj->GetState());
+  mStateObj->Exit();
   mState = aState;
 
   switch (mState) {
     case DECODER_STATE_DECODING_METADATA:
       mStateObj = MakeUnique<DecodeMetadataState>(this);
       break;
     case DECODER_STATE_WAIT_FOR_CDM:
       mStateObj = MakeUnique<WaitForCDMState>(this);
@@ -1282,45 +1285,22 @@ MediaDecoderStateMachine::SetState(State
       break;
     case DECODER_STATE_COMPLETED:
       mStateObj = MakeUnique<CompletedState>(this);
       break;
     case DECODER_STATE_SHUTDOWN:
       mStateObj = MakeUnique<ShutdownState>(this);
       break;
     default:
-      mStateObj = nullptr;
+      MOZ_ASSERT_UNREACHABLE("Invalid state.");
       break;
   }
 
-  EnterState();
-}
-
-void
-MediaDecoderStateMachine::ExitState()
-{
-  MOZ_ASSERT(OnTaskQueue());
-
-  if (mStateObj) {
-    MOZ_ASSERT(mState == mStateObj->GetState());
-    mStateObj->Exit();
-    return;
-  }
-}
-
-void
-MediaDecoderStateMachine::EnterState()
-{
-  MOZ_ASSERT(OnTaskQueue());
-
-  if (mStateObj) {
-    MOZ_ASSERT(mState == mStateObj->GetState());
-    mStateObj->Enter();
-    return;
-  }
+  MOZ_ASSERT(mState == mStateObj->GetState());
+  mStateObj->Enter();
 }
 
 void MediaDecoderStateMachine::VolumeChanged()
 {
   MOZ_ASSERT(OnTaskQueue());
   mMediaSink->SetVolume(mVolume);
 }
 
@@ -2455,21 +2435,17 @@ MediaDecoderStateMachine::FinishShutdown
 
 void
 MediaDecoderStateMachine::RunStateMachine()
 {
   MOZ_ASSERT(OnTaskQueue());
 
   mDelayedScheduler.Reset(); // Must happen on state machine task queue.
   mDispatchedStateMachine = false;
-
-  if (mStateObj) {
-    mStateObj->Step();
-    return;
-  }
+  mStateObj->Step();
 }
 
 void
 MediaDecoderStateMachine::StepDecoding()
 {
   MOZ_ASSERT(OnTaskQueue());
 
   if (mPlayState != MediaDecoder::PLAY_STATE_PLAYING && IsPlaying()) {
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -352,18 +352,16 @@ 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();
-  void EnterState();
 
   void BufferedRangeUpdated();
 
   void ReaderSuspendedChanged();
 
   // Inserts MediaData* samples into their respective MediaQueues.
   // aSample must not be null.