Bug 1329554. Part 1 - let DecodingState decide whether to dispatch decoding tasks when mMinimizePreroll changes. draft
authorJW Wang <jwwang@mozilla.com>
Thu, 05 Jan 2017 18:12:06 +0800
changeset 457493 a2f4f69fde0ed8dd5a1b280713b6d462f407bb2e
parent 457492 83e09a0ac853259a991906d3928c64b3d987e179
child 457494 dd70f490ed45e3eb5b92f2ceb89fceaefc4aa304
push id40790
push userjwwang@mozilla.com
push dateMon, 09 Jan 2017 03:21:20 +0000
bugs1329554
milestone53.0a1
Bug 1329554. Part 1 - let DecodingState decide whether to dispatch decoding tasks when mMinimizePreroll changes. MozReview-Commit-ID: 6QnH2vOHid1
dom/media/MediaDecoderStateMachine.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -627,16 +627,18 @@ public:
     }
   }
 
   void HandlePlayStateChanged(MediaDecoder::PlayState aPlayState) override
   {
     if (aPlayState == MediaDecoder::PLAY_STATE_PLAYING) {
       // Schedule Step() to check if we can start playback.
       mMaster->ScheduleStateMachine();
+      // Try to dispatch decoding tasks for mMinimizePreroll might be reset.
+      mMaster->DispatchDecodeTasksIfNeeded();
     }
 
     if (aPlayState == MediaDecoder::PLAY_STATE_PAUSED) {
       StartDormantTimer();
     } else {
       mDormantTimer.Reset();
     }
   }
@@ -2827,17 +2829,16 @@ void MediaDecoderStateMachine::PlayState
 
   if (mPlayState != MediaDecoder::PLAY_STATE_PLAYING) {
     mVideoDecodeSuspendTimer.Reset();
   } else if (mMinimizePreroll) {
     // Once we start playing, we don't want to minimize our prerolling, as we
     // assume the user is likely to want to keep playing in future. This needs to
     // happen before we invoke StartDecoding().
     mMinimizePreroll = false;
-    DispatchDecodeTasksIfNeeded();
   }
 
   mStateObj->HandlePlayStateChanged(mPlayState);
 }
 
 void MediaDecoderStateMachine::VisibilityChanged()
 {
   MOZ_ASSERT(OnTaskQueue());