Closed Bug 991208 Opened 11 years ago Closed 6 years ago

B2G Assertion !(mMediaSeekable && mTransportSeekable) for IE fishtank benchmark.

Categories

(Core :: Audio/Video: Playback, defect)

x86
macOS
defect
Not set
normal

Tracking

()

RESOLVED WONTFIX
tracking-b2g backlog

People

(Reporter: gwagner, Unassigned)

Details

Seen on current b2g trunk with --enable-debug gecko build on nexus 4. STR: Visit http://ie.microsoft.com/testdrive/performance/fishbowl/ [Switching to Thread 1303.1430] 0xb56c2700 in mozilla::MediaDecoderStateMachine::DecodeMetadata (this=0xb3c4ae80) at ../../../content/media/MediaDecoderStateMachine.cpp:1879 1879 MOZ_ASSERT(!(mMediaSeekable && mTransportSeekable) || (gdb) bt #0 0xb56c2700 in mozilla::MediaDecoderStateMachine::DecodeMetadata (this=0xb3c4ae80) at ../../../content/media/MediaDecoderStateMachine.cpp:1879 #1 0xb56c27c4 in mozilla::MediaDecoderStateMachine::CallDecodeMetadata (this=0xb3c4ae80) at ../../../content/media/MediaDecoderStateMachine.cpp:1826 #2 0xb4b556f0 in nsRunnableMethodImpl<tag_nsresult (nsMemoryReporterManager::*)(), void, true>::Run (this=<optimized out>) at ../../dist/include/nsThreadUtils.h:383 #3 0xb56d2418 in mozilla::MediaTaskQueue::Runner::Run (this=0xb21746d0) at ../../../content/media/MediaTaskQueue.cpp:127 #4 0xb4b85582 in nsThreadPool::Run (this=0xb219bca0) at ../../../xpcom/threads/nsThreadPool.cpp:211 #5 0xb4b83952 in ProcessNextEvent (result=0xb3d56e1f, mayWait=true, this=0xb2194500) at ../../../xpcom/threads/nsThread.cpp:694 #6 nsThread::ProcessNextEvent (this=0xb2194500, mayWait=<optimized out>, result=0xb3d56e1f) at ../../../xpcom/threads/nsThread.cpp:618 #7 0xb4b3c5d8 in NS_ProcessNextEvent (thread=0xb2194500, mayWait=<optimized out>) at ../../../xpcom/glue/nsThreadUtils.cpp:263 #8 0xb4d320c4 in mozilla::ipc::MessagePumpForNonMainThreads::Run (this=0xb21a0130, aDelegate=0xb25bffa0) at ../../../ipc/glue/MessagePump.cpp:336 #9 0xb4d1f742 in MessageLoop::RunInternal (this=0xb25bffa0) at ../../../ipc/chromium/src/base/message_loop.cc:226 #10 0xb4d1f75a in RunHandler (this=0xb25bffa0) at ../../../ipc/chromium/src/base/message_loop.cc:219 #11 MessageLoop::Run (this=0xb25bffa0) at ../../../ipc/chromium/src/base/message_loop.cc:193 #12 0xb4b83316 in nsThread::ThreadFunc (arg=0xb2194500) at ../../../xpcom/threads/nsThread.cpp:308 #13 0xb476ca5c in _pt_root (arg=0xb2194580) at ../../../../../nsprpub/pr/src/pthreads/ptthread.c:212 #14 0xb6eb9a5c in __thread_entry (func=0xb476c9b5 <_pt_root>, arg=0xb2194580, tls=0xb3d56f00) at bionic/libc/bionic/pthread_create.cpp:92 #15 0xb6eb9bd8 in pthread_create (thread_out=0xb3d76af4, attr=<optimized out>, start_routine=0x78, arg=0xb2194580) at bionic/libc/bionic/pthread_create.cpp:201 #16 0x00000000 in ?? () (gdb) p *this $1 = {mRefCnt = {static isThreadSafe = true, mValue = {<mozilla::detail::AtomicBaseIncDec<unsigned int, (mozilla::MemoryOrdering)2>> = {<mozilla::detail::AtomicBase<unsigned int, (mozilla::MemoryOrdering)2>> = { mValue = 2}, <No data fields>}, <No data fields>}}, mDecoder = {mRawPtr = 0xb2d91200}, mState = mozilla::MediaDecoderStateMachine::DECODER_STATE_DECODING_METADATA, mAudioThread = {mRawPtr = 0x0}, mDecodeTaskQueue = {ptr = 0xb219bd60}, mStateMachineThreadPool = {ptr = 0xb2138980}, mTimer = {mRawPtr = 0xb21602e0}, mTimeout = {mValue = 0}, mInRunningStateMachine = {value = false}, mPlayStartTime = { mValue = 0}, mSyncPointInMediaStream = -1, mSyncPointInDecodedStream = -1, mResetPlayStartTime = false, mPlayDuration = 0, mBufferingStart = {mValue = 0}, mStartTime = 0, mEndTime = -1, mSeekTarget = { mTime = -1, mType = mozilla::SeekTarget::Invalid}, mFragmentEndTime = -1, mAudioStream = {mRawPtr = 0x0}, mReader = {mRawPtr = 0xb2f8e790}, mPendingWakeDecoder = {mEvent = {mRawPtr = 0x0}}, mCurrentFrameTime = 0, mAudioStartTime = 0, mAudioEndTime = -1, mVideoFrameEndTime = -1, mVolume = 1, mPlaybackRate = 1, mPreservesPitch = true, mBasePosition = 0, mDecodeStartTime = {mValue = 0}, mBufferingWait = 30, mLowDataThresholdUsecs = 5000000, mAmpleVideoFrames = 3, mLowAudioThresholdUsecs = 300000, mAmpleAudioThresholdUsecs = 1000000, mAudioPrerollUsecs = 600000, mVideoPrerollFrames = 1, mIsAudioPrerolling = 165, mIsVideoPrerolling = 165, mIsAudioDecoding = 165, mIsVideoDecoding = 165, mDispatchedAudioDecodeTask = false, mDispatchedVideoDecodeTask = false, mIsReaderIdle = false, mSkipToNextKeyFrame = 165, mAudioCaptured = false, mTransportSeekable = true, mMediaSeekable = true, mPositionChangeQueued = false, mAudioCompleted = false, mGotDurationFromMetaData = false, mDispatchedEventToDecode = false, mStopAudioThread = true, mQuickBuffering = false, mMinimizePreroll = false, mDecodeThreadWaiting = false, mRealTime = false, mEventManager = {mDecoder = 0xb2d91200, mSamplesPerSecond = -2.87351825e-16, mSignalBuffer = {mRawPtr = 0xb3c1e568}, mSignalBufferLength = 0, mNewSignalBufferLength = 0, mSignalBufferPosition = 0, mPendingEvents = {<nsTArray_Impl<nsCOMPtr<nsIRunnable>, nsTArrayInfallibleAllocator>> = {<nsTArray_base<nsTArrayInfallibleAllocator, nsTArray_CopyWithMemutils>> = { mHdr = 0xb6d227cc}, <nsTArray_TypedBase<nsCOMPtr<nsIRunnable>, nsTArray_Impl<nsCOMPtr<nsIRunnable>, nsTArrayInfallibleAllocator> >> = {<nsTArray_SafeElementAtHelper<nsCOMPtr<nsIRunnable>, nsTArray_Impl<nsCOMPtr<nsIRunnable>, nsTArrayInfallibleAllocator> >> = {<nsTArray_SafeElementAtSmartPtrHelper<nsIRunnable, nsTArray_Impl<nsCOMPtr<nsIRunnable>, nsTArrayInfallibleAllocator> >> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, mReentrantMonitor = {<mozilla::BlockingResourceBase> = {static kResourceTypeName = 0xb6ad9090, mChainPrev = 0x0, mDDEntry = 0xb21744d0, static sCallOnce = {initialized = 1, inProgress = 1, status = PR_SUCCESS}, static sResourceAcqnChainFrontTPI = 1, static sDeadlockDetector = 0xb3c25160}, mReentrantMonitor = 0xb21388a0, mEntryCount = 0}, mHasListener = false}, mInfo = {mVideo = {mDisplay = {<mozilla::gfx::BaseSize<int, nsIntSize>> = {width = 0, height = 0}, <No data fields>}, mStereoMode = mozilla::MONO, mHasVideo = false}, mAudio = {mRate = 44100, mChannels = 2, mHasAudio = true}}, mMetadataManager = {mMetadataQueue = {sentinel = {next = 0xb3c4aff0, prev = 0xb3c4aff0, isSentinel = true}}}, mLastFrameStatus = mozilla::MediaDecoderOwner::NEXT_FRAME_UNINITIALIZED}
blocking-b2g: --- → 1.4?
What's the impact of this assertion firing?
Flags: needinfo?(anygregor)
Gregor, please describe the impact for triage.
Ralph, can you explain how bad this assertion is?
Flags: needinfo?(anygregor) → needinfo?(giles)
Maybe this is related to bug 991791? MemoryReporter is involved in both signatures.
This assertion means we can't actually seek in a file that we otherwise can seek in. This assertion is means the media stack failed to find a duration for a file, but it can still seek the media. Meaning it can't actually know the bounds in which it's safe to seek the media, so it can't actually seek. This is not an OMG WE'RE GOING TO DIE situation.
Pretty much what Chris said. The assertion fails because the stream is seekable, but mEndTime hasn't been set, so we can't calculate a duration. I can't tell why not from the stack trace, and obviously it's unintended behaviour, but it should not cause crashes. The duration should update when playback starts feeding data through the state machine.
Flags: needinfo?(giles)
per comment 5, moving to backlog
blocking-b2g: 1.4? → backlog
blocking-b2g: backlog → ---
Component: Audio/Video → Audio/Video: Playback
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.