author | JW Wang <jwwang@mozilla.com> |
Thu, 05 Jan 2017 17:59:19 +0800 | |
changeset 328521 | 1e65a894efcc158e4e0ad57d1f1d246c639526cd |
parent 328489 | b1576b5adad1ca5a1e3ad8c6c8cfb951de19087e |
child 328522 | 70bec73165a55eefba3e3fac07bf613508010b97 |
push id | 31178 |
push user | kwierso@gmail.com |
push date | Tue, 10 Jan 2017 00:30:08 +0000 |
treeherder | mozilla-central@6bcc24319ba5 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | kaku |
bugs | 1328836 |
milestone | 53.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/media/MediaDecoder.cpp +++ b/dom/media/MediaDecoder.cpp @@ -628,19 +628,16 @@ MediaDecoder::InitializeStateMachine() return NS_OK; } void MediaDecoder::SetStateMachineParameters() { MOZ_ASSERT(NS_IsMainThread()); - if (mMinimizePreroll) { - mDecoderStateMachine->DispatchMinimizePrerollUntilPlaybackStarts(); - } if (mPlaybackRate != 1 && mPlaybackRate != 0) { mDecoderStateMachine->DispatchSetPlaybackRate(mPlaybackRate); } mTimedMetadataListener = mDecoderStateMachine->TimedMetadataEvent().Connect( AbstractThread::MainThread(), this, &MediaDecoder::OnMetadataUpdate); mMetadataLoadedListener = mDecoderStateMachine->MetadataLoadedEvent().Connect( AbstractThread::MainThread(), this, &MediaDecoder::MetadataLoaded); mFirstFrameLoadedListener = mDecoderStateMachine->FirstFrameLoadedEvent().Connect(
--- a/dom/media/MediaDecoder.h +++ b/dom/media/MediaDecoder.h @@ -187,16 +187,18 @@ public: virtual void SetPlaybackRate(double aPlaybackRate); void SetPreservesPitch(bool aPreservesPitch); // Directs the decoder to not preroll extra samples until the media is // played. This reduces the memory overhead of media elements that may // not be played. Note that seeking also doesn't cause us start prerolling. void SetMinimizePrerollUntilPlaybackStarts(); + bool GetMinimizePreroll() const { return mMinimizePreroll; } + // All MediaStream-related data is protected by mReentrantMonitor. // We have at most one DecodedStreamData per MediaDecoder. Its stream // is used as the input for each ProcessedMediaStream created by calls to // captureStream(UntilEnded). Seeking creates a new source stream, as does // replaying after the input as ended. In the latter case, the new source is // not connected to streams created by captureStreamUntilEnded. // Add an output stream. All decoder output will be sent to the stream.
--- a/dom/media/MediaDecoderStateMachine.cpp +++ b/dom/media/MediaDecoderStateMachine.cpp @@ -2354,17 +2354,17 @@ MediaDecoderStateMachine::MediaDecoderSt mFragmentEndTime(-1), mReader(new MediaDecoderReaderWrapper(mTaskQueue, aReader)), mDecodedAudioEndTime(0), mDecodedVideoEndTime(0), mPlaybackRate(1.0), mLowAudioThresholdUsecs(detail::LOW_AUDIO_USECS), mAmpleAudioThresholdUsecs(detail::AMPLE_AUDIO_USECS), mAudioCaptured(false), - mMinimizePreroll(false), + mMinimizePreroll(aDecoder->GetMinimizePreroll()), mSentLoadedMetadataEvent(false), mSentFirstFrameLoadedEvent(false), mVideoDecodeSuspended(false), mVideoDecodeSuspendTimer(mTaskQueue), mOutputStreamManager(new OutputStreamManager()), mResource(aDecoder->GetResource()), INIT_MIRROR(mBuffered, TimeIntervals()), INIT_MIRROR(mEstimatedDuration, NullableTimeUnit()),
--- a/dom/media/MediaDecoderStateMachine.h +++ b/dom/media/MediaDecoderStateMachine.h @@ -173,36 +173,16 @@ public: void DispatchSetPlaybackRate(double aPlaybackRate) { OwnerThread()->DispatchStateChange(NewRunnableMethod<double>( this, &MediaDecoderStateMachine::SetPlaybackRate, aPlaybackRate)); } RefPtr<ShutdownPromise> BeginShutdown(); - // Notifies the state machine that should minimize the number of samples - // decoded we preroll, until playback starts. The first time playback starts - // the state machine is free to return to prerolling normally. Note - // "prerolling" in this context refers to when we decode and buffer decoded - // samples in advance of when they're needed for playback. - void DispatchMinimizePrerollUntilPlaybackStarts() - { - RefPtr<MediaDecoderStateMachine> self = this; - nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction([self] () -> void - { - MOZ_ASSERT(self->OnTaskQueue()); - self->mMinimizePreroll = true; - - // Make sure that this arrives before playback starts, otherwise this won't - // have the intended effect. - MOZ_DIAGNOSTIC_ASSERT(self->mPlayState == MediaDecoder::PLAY_STATE_LOADING); - }); - OwnerThread()->Dispatch(r.forget()); - } - // Set the media fragment end time. aEndTime is in microseconds. void DispatchSetFragmentEndTime(int64_t aEndTime) { RefPtr<MediaDecoderStateMachine> self = this; nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction([self, aEndTime] () { self->mFragmentEndTime = aEndTime; }); OwnerThread()->Dispatch(r.forget());