Bug 1173289 - Remove WakeDecoderRunnable from MDSM. r=roc.

This commit is contained in:
JW Wang 2015-06-07 16:29:56 +08:00
parent 3d74d0b549
commit 1fe912e2ec
2 changed files with 0 additions and 71 deletions

View File

@ -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<nsIRunnable> 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();

View File

@ -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<MediaDecoderStateMachine> 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<AudioData>& AudioQueue() { return mAudioQueue; }
MediaQueue<VideoData>& VideoQueue() { return mVideoQueue; }
@ -976,13 +941,6 @@ protected:
// This is created in the state machine's constructor.
nsRefPtr<MediaDecoderReader> 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<WakeDecoderRunnable> 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.