mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-27 12:15:33 +00:00
Bug 1173289 - Remove WakeDecoderRunnable from MDSM. r=roc.
This commit is contained in:
parent
3d74d0b549
commit
1fe912e2ec
@ -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();
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user