From 1fe912e2ecdffe8101dc9c7bd83c46afe136ac3a Mon Sep 17 00:00:00 2001 From: JW Wang Date: Sun, 7 Jun 2015 16:29:56 +0800 Subject: [PATCH] Bug 1173289 - Remove WakeDecoderRunnable from MDSM. r=roc. --- dom/media/MediaDecoderStateMachine.cpp | 29 ------------------ dom/media/MediaDecoderStateMachine.h | 42 -------------------------- 2 files changed, 71 deletions(-) diff --git a/dom/media/MediaDecoderStateMachine.cpp b/dom/media/MediaDecoderStateMachine.cpp index 7567cfea052e..cbcbf66c70e8 100644 --- a/dom/media/MediaDecoderStateMachine.cpp +++ b/dom/media/MediaDecoderStateMachine.cpp @@ -286,8 +286,6 @@ MediaDecoderStateMachine::~MediaDecoderStateMachine() { MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread."); MOZ_COUNT_DTOR(MediaDecoderStateMachine); - NS_ASSERTION(!mPendingWakeDecoder.get(), - "WakeDecoder should have been revoked already"); mReader = nullptr; @@ -458,8 +456,6 @@ void MediaDecoderStateMachine::SendStreamData() AudioSegment* audio = new AudioSegment(); mediaStream->AddAudioTrack(audioTrackId, mInfo.mAudio.mRate, 0, audio, SourceMediaStream::ADDTRACK_QUEUED); - stream->mStream->DispatchWhenNotEnoughBuffered(audioTrackId, - TaskQueue(), GetWakeDecoderRunnable()); stream->mNextAudioTime = mStreamStartTime; } if (mInfo.HasVideo()) { @@ -467,9 +463,6 @@ void MediaDecoderStateMachine::SendStreamData() VideoSegment* video = new VideoSegment(); mediaStream->AddTrack(videoTrackId, 0, video, SourceMediaStream::ADDTRACK_QUEUED); - stream->mStream->DispatchWhenNotEnoughBuffered(videoTrackId, - TaskQueue(), GetWakeDecoderRunnable()); - stream->mNextVideoTime = mStreamStartTime; } mediaStream->FinishAddTracks(); @@ -607,18 +600,6 @@ void MediaDecoderStateMachine::SendStreamData() } } -MediaDecoderStateMachine::WakeDecoderRunnable* -MediaDecoderStateMachine::GetWakeDecoderRunnable() -{ - MOZ_ASSERT(OnTaskQueue()); - AssertCurrentThreadInMonitor(); - - if (!mPendingWakeDecoder.get()) { - mPendingWakeDecoder = new WakeDecoderRunnable(this); - } - return mPendingWakeDecoder.get(); -} - bool MediaDecoderStateMachine::HaveEnoughDecodedAudio(int64_t aAmpleAudioUSecs) { MOZ_ASSERT(OnTaskQueue()); @@ -640,8 +621,6 @@ bool MediaDecoderStateMachine::HaveEnoughDecodedAudio(int64_t aAmpleAudioUSecs) if (!stream->mStream->HaveEnoughBuffered(audioTrackId)) { return false; } - stream->mStream->DispatchWhenNotEnoughBuffered(audioTrackId, - TaskQueue(), GetWakeDecoderRunnable()); } return true; @@ -664,8 +643,6 @@ bool MediaDecoderStateMachine::HaveEnoughDecodedVideo() if (!stream->mStream->HaveEnoughBuffered(videoTrackId)) { return false; } - stream->mStream->DispatchWhenNotEnoughBuffered(videoTrackId, - TaskQueue(), GetWakeDecoderRunnable()); } return true; @@ -1556,8 +1533,6 @@ void MediaDecoderStateMachine::SetDormant(bool aDormant) // it here as well. nsCOMPtr r = NS_NewRunnableMethod(mReader, &MediaDecoderReader::ReleaseMediaResources); DecodeTaskQueue()->Dispatch(r.forget()); - // There's now no possibility of mPendingWakeDecoder being needed again. Revoke it. - mPendingWakeDecoder = nullptr; mDecoder->GetReentrantMonitor().NotifyAll(); } else if ((aDormant != true) && (mState == DECODER_STATE_DORMANT)) { mDecodingFrozenAtStateDecoding = true; @@ -2520,10 +2495,6 @@ MediaDecoderStateMachine::FinishShutdown() AudioQueue().ClearListeners(); VideoQueue().ClearListeners(); - // Now that those threads are stopped, there's no possibility of - // mPendingWakeDecoder being needed again. Revoke it. - mPendingWakeDecoder = nullptr; - // Disconnect canonicals and mirrors before shutting down our task queue. mEstimatedDuration.DisconnectIfConnected(); mExplicitDuration.DisconnectIfConnected(); diff --git a/dom/media/MediaDecoderStateMachine.h b/dom/media/MediaDecoderStateMachine.h index f9f4ac6ffb73..dd04fd1c666e 100644 --- a/dom/media/MediaDecoderStateMachine.h +++ b/dom/media/MediaDecoderStateMachine.h @@ -427,41 +427,6 @@ protected: void LogicalPlaybackRateChanged(); void PreservesPitchChanged(); - class WakeDecoderRunnable : public nsRunnable { - public: - explicit WakeDecoderRunnable(MediaDecoderStateMachine* aSM) - : mMutex("WakeDecoderRunnable"), mStateMachine(aSM) {} - NS_IMETHOD Run() override - { - nsRefPtr stateMachine; - { - // Don't let Run() (called by media stream graph thread) race with - // Revoke() (called by decoder state machine thread) - MutexAutoLock lock(mMutex); - if (!mStateMachine) - return NS_OK; - stateMachine = mStateMachine; - } - stateMachine->ScheduleStateMachineWithLockAndWakeDecoder(); - return NS_OK; - } - void Revoke() - { - MutexAutoLock lock(mMutex); - mStateMachine = nullptr; - } - - Mutex mMutex; - // Protected by mMutex. - // We don't use an owning pointer here, because keeping mStateMachine alive - // would mean in some cases we'd have to destroy mStateMachine from this - // object, which would be problematic since MediaDecoderStateMachine can - // only be destroyed on the main thread whereas this object can be destroyed - // on the media stream graph thread. - MediaDecoderStateMachine* mStateMachine; - }; - WakeDecoderRunnable* GetWakeDecoderRunnable(); - MediaQueue& AudioQueue() { return mAudioQueue; } MediaQueue& VideoQueue() { return mVideoQueue; } @@ -976,13 +941,6 @@ protected: // This is created in the state machine's constructor. nsRefPtr mReader; - // Accessed only on the state machine thread. - // Not an nsRevocableEventPtr since we must Revoke() it well before - // this object is destroyed, anyway. - // Protected by decoder monitor except during the SHUTDOWN state after the - // decoder thread has been stopped. - nsRevocableEventPtr mPendingWakeDecoder; - // The time of the current frame in microseconds, corresponding to the "current // playback position" in HTML5. This is referenced from 0, which is the initial // playback position.