Bug 1307699. Part 8 - move mCurrentSeek into SeekingState. draft
authorJW Wang <jwwang@mozilla.com>
Wed, 05 Oct 2016 15:25:56 +0800
changeset 421420 cd716e04e07d818808f5a04bcf42bd67c01a9f66
parent 421419 8a70a9d5a4447acadde0ea1b3086e4d20d17bf63
child 421421 80d36879f55b36b36503c1b4d66e33fd208660ca
push id31488
push userjwwang@mozilla.com
push dateThu, 06 Oct 2016 02:31:05 +0000
bugs1307699
milestone52.0a1
Bug 1307699. Part 8 - move mCurrentSeek into SeekingState. MozReview-Commit-ID: LXzyK4U01VG
dom/media/MediaDecoderStateMachine.cpp
dom/media/MediaDecoderStateMachine.h
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -721,24 +721,23 @@ public:
              [this] (const SeekTaskResolveValue& aValue) {
                OnSeekTaskResolved(aValue);
              },
              [this] (const SeekTaskRejectValue& aValue) {
                OnSeekTaskRejected(aValue);
              }));
 
     MOZ_ASSERT(!mMaster->mQueuedSeek.Exists());
-    MOZ_ASSERT(!mMaster->mCurrentSeek.Exists());
-    mMaster->mCurrentSeek = Move(mSeekJob);
+    mCurrentSeek = Move(mSeekJob);
   }
 
   void Exit() override
   {
     mSeekTaskRequest.DisconnectIfExists();
-    mMaster->mCurrentSeek.RejectIfExists(__func__);
+    mCurrentSeek.RejectIfExists(__func__);
     mSeekTask->Discard();
 
     // Reset the MediaDecoderReaderWrapper's callbask.
     mMaster->SetMediaDecoderReaderWrapperCallback();
   }
 
   State GetState() const override
   {
@@ -746,26 +745,26 @@ public:
   }
 
   bool HandleDormant(bool aDormant) override
   {
     if (!aDormant) {
       return true;
     }
     MOZ_ASSERT(!mMaster->mQueuedSeek.Exists());
-    MOZ_ASSERT(mMaster->mCurrentSeek.Exists());
+    MOZ_ASSERT(mCurrentSeek.Exists());
     // Because both audio and video decoders are going to be reset in this
     // method later, we treat a VideoOnly seek task as a normal Accurate
     // seek task so that while it is resumed, both audio and video playback
     // are handled.
-    if (mMaster->mCurrentSeek.mTarget.IsVideoOnly()) {
-      mMaster->mCurrentSeek.mTarget.SetType(SeekTarget::Accurate);
-      mMaster->mCurrentSeek.mTarget.SetVideoOnly(false);
+    if (mCurrentSeek.mTarget.IsVideoOnly()) {
+      mCurrentSeek.mTarget.SetType(SeekTarget::Accurate);
+      mCurrentSeek.mTarget.SetVideoOnly(false);
     }
-    mMaster->mQueuedSeek = Move(mMaster->mCurrentSeek);
+    mMaster->mQueuedSeek = Move(mCurrentSeek);
     SetState(DECODER_STATE_DORMANT);
     return true;
   }
 
   bool HandleAudioDecoded(MediaData* aAudio) override
   {
     MOZ_ASSERT(false);
     return true;
@@ -871,17 +870,17 @@ private:
       // we report playback ended to the media element.
       nextState = DECODER_STATE_COMPLETED;
     } else {
       nextState = DECODER_STATE_DECODING;
     }
 
     // We want to resolve the seek request prior finishing the first frame
     // to ensure that the seeked event is fired prior loadeded.
-    mMaster->mCurrentSeek.Resolve(nextState == DECODER_STATE_COMPLETED, __func__);
+    mCurrentSeek.Resolve(nextState == DECODER_STATE_COMPLETED, __func__);
 
     // Notify FirstFrameLoaded now if we haven't since we've decoded some data
     // for readyState to transition to HAVE_CURRENT_DATA and fire 'loadeddata'.
     if (!mMaster->mSentFirstFrameLoadedEvent) {
       // Only MSE can start seeking before finishing decoding first frames.
       MOZ_ASSERT(Reader()->ForceZeroStartTime());
       mMaster->FinishDecodeFirstFrame();
     }
@@ -898,16 +897,17 @@ private:
     }
 
     SetState(nextState);
   }
 
   SeekJob mSeekJob;
   MozPromiseRequestHolder<SeekTask::SeekTaskPromise> mSeekTaskRequest;
   RefPtr<SeekTask> mSeekTask;
+  SeekJob mCurrentSeek;
 };
 
 class MediaDecoderStateMachine::BufferingState
   : public MediaDecoderStateMachine::StateObject
 {
 public:
   explicit BufferingState(Master* aPtr) : StateObject(aPtr) {}
 
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -612,17 +612,16 @@ private:
   {
     MOZ_ASSERT(OnTaskQueue());
     return mPlayState == MediaDecoder::PLAY_STATE_PLAYING ||
            mNextPlayState == MediaDecoder::PLAY_STATE_PLAYING;
   }
 
   // Queued seek - moves to mCurrentSeek when DecodeFirstFrame completes.
   SeekJob mQueuedSeek;
-  SeekJob mCurrentSeek;
 
   // Media Fragment end time in microseconds. Access controlled by decoder monitor.
   int64_t mFragmentEndTime;
 
   // The media sink resource.  Used on the state machine thread.
   RefPtr<media::MediaSink> mMediaSink;
 
   const RefPtr<MediaDecoderReaderWrapper> mReader;