Bug 1329110. Part 6 - remove StateObject::HandleWaitingForData(). draft
authorJW Wang <jwwang@mozilla.com>
Mon, 09 Jan 2017 13:06:55 +0800
changeset 458396 06f59c551e95e929c9e8c667b4082fecfeee8f3b
parent 458395 c53970e1f83b83e90ad1efb4c081c83def5c3368
child 458397 f6dfd1c187265a9ad005a35a76a599f1e60b1150
push id40941
push userjwwang@mozilla.com
push dateTue, 10 Jan 2017 07:42:53 +0000
bugs1329110
milestone53.0a1
Bug 1329110. Part 6 - remove StateObject::HandleWaitingForData(). Since DecodingState is the only one that overrides the function, we will let it just override HandleWaitingFor{Audio,Video}. We also reduce the code complexity because it is hard to trace the code when one virtual function calls another virtual function. MozReview-Commit-ID: AdLXpDgvOyx
dom/media/MediaDecoderStateMachine.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -193,40 +193,37 @@ public:
   // Event handlers for various events.
   virtual void HandleCDMProxyReady() {}
   virtual void HandleAudioDecoded(MediaData* aAudio) {}
   virtual void HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) {}
   virtual void HandleAudioWaited(MediaData::Type aType);
   virtual void HandleVideoWaited(MediaData::Type aType);
   virtual void HandleNotWaited(const WaitForDataRejectValue& aRejection);
   virtual void HandleEndOfStream() {}
-  virtual void HandleWaitingForData() {}
   virtual void HandleAudioCaptured() {}
 
   virtual void HandleWaitingForAudio()
   {
     mMaster->WaitForData(MediaData::AUDIO_DATA);
-    HandleWaitingForData();
   }
 
   virtual void HandleAudioCanceled()
   {
     mMaster->EnsureAudioDecodeTaskQueued();
   }
 
   virtual void HandleEndOfAudio()
   {
     AudioQueue().Finish();
     HandleEndOfStream();
   }
 
   virtual void HandleWaitingForVideo()
   {
     mMaster->WaitForData(MediaData::VIDEO_DATA);
-    HandleWaitingForData();
   }
 
   virtual void HandleVideoCanceled()
   {
     mMaster->EnsureVideoDecodeTaskQueued();
   }
 
   virtual void HandleEndOfVideo()
@@ -662,18 +659,25 @@ public:
     mMaster->PushVideo(aVideo);
     DispatchDecodeTasksIfNeeded();
     MaybeStopPrerolling();
     CheckSlowDecoding(aDecodeStart);
   }
 
   void HandleEndOfStream() override;
 
-  void HandleWaitingForData() override
+  void HandleWaitingForAudio() override
   {
+    mMaster->WaitForData(MediaData::AUDIO_DATA);
+    MaybeStopPrerolling();
+  }
+
+  void HandleWaitingForVideo() override
+  {
+    mMaster->WaitForData(MediaData::VIDEO_DATA);
     MaybeStopPrerolling();
   }
 
   void HandleAudioCaptured() override
   {
     MaybeStopPrerolling();
     // MediaSink is changed. Schedule Step() to check if we can start playback.
     mMaster->ScheduleStateMachine();