Bug 1307699. Part 2 - move mSeekTaskRequest into SeekingState. draft
authorJW Wang <jwwang@mozilla.com>
Wed, 05 Oct 2016 14:28:26 +0800
changeset 421414 a4d026103b43fbdcac2ebb4f171a16fbaf1d4c0f
parent 421413 fbecdc8bb017ce660597d3a0210f4e69989a8355
child 421415 df02e79b13ac2b90b604b32da6fbc043bcc36cbe
push id31488
push userjwwang@mozilla.com
push dateThu, 06 Oct 2016 02:31:05 +0000
bugs1307699
milestone52.0a1
Bug 1307699. Part 2 - move mSeekTaskRequest into SeekingState. MozReview-Commit-ID: 8FrGqEDgclk
dom/media/MediaDecoderStateMachine.cpp
dom/media/MediaDecoderStateMachine.h
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -670,18 +670,16 @@ public:
   explicit SeekingState(Master* aPtr, SeekJob aSeekJob)
     : StateObject(aPtr), mSeekJob(Move(aSeekJob)) {}
 
   void Enter() override
   {
     // Discard the existing seek task.
     mMaster->DiscardSeekTaskIfExist();
 
-    mMaster->mSeekTaskRequest.DisconnectIfExists();
-
     // SeekTask will register its callbacks to MediaDecoderReaderWrapper.
     mMaster->CancelMediaDecoderReaderWrapperCallback();
 
     // Create a new SeekTask instance for the incoming seek task.
     if (mSeekJob.mTarget.IsAccurate() ||
         mSeekJob.mTarget.IsFast()) {
       mMaster->mSeekTask = new AccurateSeekTask(
         mMaster->mDecoderID, OwnerThread(), Reader(), mSeekJob.mTarget,
@@ -717,33 +715,33 @@ public:
       if (mSeekJob.mTarget.IsVideoOnly()) {
         mMaster->Reset(TrackInfo::kVideoTrack);
       } else {
         mMaster->Reset();
       }
     }
 
     // Do the seek.
-    mMaster->mSeekTaskRequest.Begin(mMaster->mSeekTask->Seek(mMaster->Duration())
+    mSeekTaskRequest.Begin(mMaster->mSeekTask->Seek(mMaster->Duration())
       ->Then(OwnerThread(), __func__,
              [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);
   }
 
   void Exit() override
   {
-    mMaster->mSeekTaskRequest.DisconnectIfExists();
+    mSeekTaskRequest.DisconnectIfExists();
   }
 
   State GetState() const override
   {
     return DECODER_STATE_SEEKING;
   }
 
   bool HandleDormant(bool aDormant) override
@@ -787,17 +785,17 @@ public:
     RefPtr<MediaDecoder::SeekPromise> p = seekJob.mPromise.Ensure(__func__);
     mMaster->InitiateSeek(Move(seekJob));
     return p.forget();
   }
 
 private:
   void OnSeekTaskResolved(const SeekTaskResolveValue& aValue)
   {
-    mMaster->mSeekTaskRequest.Complete();
+    mSeekTaskRequest.Complete();
 
     if (aValue.mSeekedAudioData) {
       mMaster->Push(aValue.mSeekedAudioData, MediaData::AUDIO_DATA);
       mMaster->mDecodedAudioEndTime = std::max(
         aValue.mSeekedAudioData->GetEndTime(), mMaster->mDecodedAudioEndTime);
     }
 
     if (aValue.mSeekedVideoData) {
@@ -814,32 +812,33 @@ private:
       mMaster->VideoQueue().Finish();
     }
 
     mMaster->SeekCompleted();
   }
 
   void OnSeekTaskRejected(const SeekTaskRejectValue& aValue)
   {
-    mMaster->mSeekTaskRequest.Complete();
+    mSeekTaskRequest.Complete();
 
     if (aValue.mIsAudioQueueFinished) {
       mMaster->AudioQueue().Finish();
     }
 
     if (aValue.mIsVideoQueueFinished) {
       mMaster->VideoQueue().Finish();
     }
 
     mMaster->DecodeError(aValue.mError);
 
     mMaster->DiscardSeekTaskIfExist();
   }
 
   SeekJob mSeekJob;
+  MozPromiseRequestHolder<SeekTask::SeekTaskPromise> mSeekTaskRequest;
 };
 
 class MediaDecoderStateMachine::BufferingState
   : public MediaDecoderStateMachine::StateObject
 {
 public:
   explicit BufferingState(Master* aPtr) : StateObject(aPtr) {}
 
@@ -2687,18 +2686,16 @@ MediaDecoderStateMachine::Reset(TrackSet
   }
 
   if (aTracks.contains(TrackInfo::kAudioTrack)) {
     mDecodedAudioEndTime = 0;
     mAudioCompleted = false;
     AudioQueue().Reset();
   }
 
-  mSeekTaskRequest.DisconnectIfExists();
-
   mPlaybackOffset = 0;
 
   mReader->ResetDecode(aTracks);
 }
 
 int64_t
 MediaDecoderStateMachine::GetClock(TimeStamp* aTimeStamp) const
 {
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -619,17 +619,16 @@ private:
   }
 
   // Queued seek - moves to mCurrentSeek when DecodeFirstFrame completes.
   SeekJob mQueuedSeek;
   SeekJob mCurrentSeek;
 
   // mSeekTask is responsible for executing the current seek request.
   RefPtr<SeekTask> mSeekTask;
-  MozPromiseRequestHolder<SeekTask::SeekTaskPromise> mSeekTaskRequest;
 
   // This method discards the seek task and then get the ownership of
   // MedaiDecoderReaderWarpper back via registering MDSM's callback into it.
   void DiscardSeekTaskIfExist();
 
   // Media Fragment end time in microseconds. Access controlled by decoder monitor.
   int64_t mFragmentEndTime;