DescriptionRevert of media: Introduce Renderer interface and RendererImpl. (patchset #11 of https://codereview.chromium.org/418143005/)
Reason for revert:
http://build.chromium.org/p/chromium.memory.fyi/builders/Linux%20Tests%20%28TSan%20v2%29%281%29/builds/13061/steps/media_unittests/logs/stdio
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=13728)
Cycle in lock order graph: M2073 (0x7d4400009808) => M2054 (0x7d480000bb98) => M2073
Mutex M2054 acquired here while holding mutex M2073 in main thread:
#0 pthread_mutex_lock <null>:0 (media_unittests+0x00000016d3b0)
#1 base::internal::LockImpl::Lock() base/synchronization/lock_impl_posix.cc:45:12 (media_unittests+0x0000008a7029)
#2 Acquire base/synchronization/lock.h:23:20 (media_unittests+0x00000073537e)
#3 AutoLock base/synchronization/lock.h:99 (media_unittests+0x00000073537e)
#4 media::Pipeline::GetMediaDuration() const media/base/pipeline.cc:167 (media_unittests+0x00000073537e)
#5 Run base/bind_internal.h:153:12 (media_unittests+0x0000007384c2)
#6 MakeItSo base/bind_internal.h:863 (media_unittests+0x0000007384c2)
#7 base::internal::Invoker<1, base::internal::BindState<base::internal::RunnableAdapter<base::TimeDelta (media::Pipeline::*)() const>, base::TimeDelta (media::Pipeline const*), void (base::internal::UnretainedWrapper<media::Pipeline>)>, base::TimeDelta (media::Pipeline const*)>::Run(base::internal::BindStateBase*) base/bind_internal.h:1166 (media_unittests+0x0000007384c2)
#8 Run base/callback.h:401:12 (media_unittests+0x0000007a3bc5)
#9 media::RendererImpl::StartPlayback() media/filters/renderer_impl.cc:461 (media_unittests+0x0000007a3bc5)
#10 media::RendererImpl::OnBufferingStateChanged(media::BufferingState*, media::BufferingState) media/filters/renderer_impl.cc:418:5 (media_unittests+0x0000007a28d9)
#11 Run base/bind_internal.h:248:12 (media_unittests+0x0000007a423e)
#12 MakeItSo base/bind_internal.h:938 (media_unittests+0x0000007a423e)
#13 base::internal::Invoker<2, base::internal::BindState<base::internal::RunnableAdapter<void (media::RendererImpl::*)(media::BufferingState*, media::BufferingState)>, void (media::RendererImpl*, media::BufferingState*, media::BufferingState), void (base::WeakPtr<media::RendererImpl>, media::BufferingState*)>, void (media::RendererImpl*, media::BufferingState*, media::BufferingState)>::Run(base::internal::BindStateBase*, media::BufferingState const&) base/bind_internal.h:1343 (media_unittests+0x0000007a423e)
#14 Run base/callback.h:441:12 (media_unittests+0x0000007bdc96)
#15 media::VideoRendererImpl::TransitionToHaveEnough_Locked() media/filters/video_renderer_impl.cc:385 (media_unittests+0x0000007bdc96)
#16 media::VideoRendererImpl::FrameReady(media::DecoderStream<(media::DemuxerStream::Type)2>::Status, scoped_refptr<media::VideoFrame> const&) media/filters/video_renderer_impl.cc:343:5 (media_unittests+0x0000007bda19)
Mutex M2073 previously acquired by the same thread here:
#0 pthread_mutex_lock <null>:0 (media_unittests+0x00000016d3b0)
#1 base::internal::LockImpl::Lock() base/synchronization/lock_impl_posix.cc:45:12 (media_unittests+0x0000008a7029)
#2 Acquire base/synchronization/lock.h:23:20 (media_unittests+0x0000007a3b3e)
#3 AutoLock base/synchronization/lock.h:99 (media_unittests+0x0000007a3b3e)
#4 media::RendererImpl::StartPlayback() media/filters/renderer_impl.cc:459 (media_unittests+0x0000007a3b3e)
#5 media::RendererImpl::OnBufferingStateChanged(media::BufferingState*, media::BufferingState) media/filters/renderer_impl.cc:418:5 (media_unittests+0x0000007a28d9)
#6 Run base/bind_internal.h:248:12 (media_unittests+0x0000007a423e)
#7 MakeItSo base/bind_internal.h:938 (media_unittests+0x0000007a423e)
#8 base::internal::Invoker<2, base::internal::BindState<base::internal::RunnableAdapter<void (media::RendererImpl::*)(media::BufferingState*, media::BufferingState)>, void (media::RendererImpl*, media::BufferingState*, media::BufferingState), void (base::WeakPtr<media::RendererImpl>, media::BufferingState*)>, void (media::RendererImpl*, media::BufferingState*, media::BufferingState)>::Run(base::internal::BindStateBase*, media::BufferingState const&) base/bind_internal.h:1343 (media_unittests+0x0000007a423e)
#9 Run base/callback.h:441:12 (media_unittests+0x0000007bdc96)
#10 media::VideoRendererImpl::TransitionToHaveEnough_Locked() media/filters/video_renderer_impl.cc:385 (media_unittests+0x0000007bdc96)
#11 media::VideoRendererImpl::FrameReady(media::DecoderStream<(media::DemuxerStream::Type)2>::Status, scoped_refptr<media::VideoFrame> const&) media/filters/video_renderer_impl.cc:343:5 (media_unittests+0x0000007bda19)
#12 Run base/bind_internal.h:248:12 (media_unittests+0x0000007bdfe8)
#13 MakeItSo base/bind_internal.h:938 (media_unittests+0x0000007bdfe8)
#14 base::internal::Invoker<1, base::internal::BindState<base::internal::RunnableAdapter<void (media::VideoRendererImpl::*)(media::DecoderStream<(media::DemuxerStream::Type)2>::Status, scoped_refptr<media::VideoFrame> const&)>, void (media::VideoRendererImpl*, media::DecoderStream<(media::DemuxerStream::Type)2>::Status, scoped_refptr<media::VideoFrame> const&), void (base::WeakPtr<media::VideoRendererImpl>)>, void (media::VideoRendererImpl*, media::DecoderStream<(media::DemuxerStream::Type)2>::Status, scoped_refptr<media::VideoFrame> const&)>::Run(base::internal::BindStateBase*, media::DecoderStream<(media::DemuxerStream::Type)2>::Status const&, scoped_refptr<media::VideoFrame> const&) base/bind_internal.h:1310 (media_unittests+0x0000007bdfe8)
#15 Run base/callback.h:483:12 (media_unittests+0x000000774657)
#16 SatisfyRead media/filters/decoder_stream.cc:248 (media_unittests+0x000000774657)
#17 media::DecoderStream<(media::DemuxerStream::Type)2>::OnDecodeOutputReady(scoped_refptr<media::VideoFrame> const&) media/filters/decoder_stream.cc:369 (media_unittests+0x000000774657)
Mutex M2073 acquired here while holding mutex M2054 in main thread:
#0 pthread_mutex_lock <null>:0 (media_unittests+0x00000016d3b0)
#1 base::internal::LockImpl::Lock() base/synchronization/lock_impl_posix.cc:45:12 (media_unittests+0x0000008a7029)
#2 Acquire base/synchronization/lock.h:23:20 (media_unittests+0x0000007a22f1)
#3 AutoLock base/synchronization/lock.h:99 (media_unittests+0x0000007a22f1)
#4 media::RendererImpl::GetMediaTime() media/filters/renderer_impl.cc:147 (media_unittests+0x0000007a22f1)
#5 media::Pipeline::GetMediaTime() const media/base/pipeline.cc:157:31 (media_unittests+0x0000007350d1)
#6 media::PipelineIntegrationTestBase::QuitAfterCurrentTimeTask(base::TimeDelta const&) media/filters/pipeline_integration_test_base.cc:186:7 (media_unittests+0x0000005f01e9)
Mutex M2054 previously acquired by the same thread here:
#0 pthread_mutex_lock <null>:0 (media_unittests+0x00000016d3b0)
#1 base::internal::LockImpl::Lock() base/synchronization/lock_impl_posix.cc:45:12 (media_unittests+0x0000008a7029)
#2 Acquire base/synchronization/lock.h:23:20 (media_unittests+0x0000007350a5)
#3 AutoLock base/synchronization/lock.h:99 (media_unittests+0x0000007350a5)
#4 media::Pipeline::GetMediaTime() const media/base/pipeline.cc:156 (media_unittests+0x0000007350a5)
#5 media::PipelineIntegrationTestBase::QuitAfterCurrentTimeTask(base::TimeDelta const&) media/filters/pipeline_integration_test_base.cc:186:7 (media_unittests+0x0000005f01e9)
SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) ??:0 pthread_mutex_lock
Original issue's description:
> media: Introduce Renderer interface and RendererImpl.
>
> Add a Renderer interface to manage all audio/video (and in the future text) rendering. With Renderer, Pipeline only needs to manage a Demuxer and a Renderer, which helps move a lot of complicated logic out of Pipeline.
>
> On Desktop Chrome, we use RendererImpl, which manages AudioRendererImpl and VideoRendererImpl.
>
> On other platforms, we could add different Renderer implementation. For example, we could support Browser side decoding/rendering.
>
> BUG=392259
>
> Committed: https://chromium.googlesource.com/chromium/src/+/2e9a1db9628266155c228cc6003b51157fda60c2
TBR=scherkus@chromium.org,damienv@chromium.org,gunsch@chromium.org,tim@chromium.org,xhwang@chromium.org
BUG=392259
Patch Set 1 #
Created: 6 years, 4 months ago
(Patch set is too large to download)
Messages
Total messages: 4 (0 generated)
|