Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Issue 503053007: Revert of media: Introduce Renderer interface and RendererImpl. (Closed)

Created:
6 years, 4 months ago by Jeffrey Yasskin
Modified:
6 years, 4 months ago
CC:
chromium-reviews, feature-media-reviews_chromium.org
Project:
chromium
Visibility:
Public.

Description

Revert 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 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+857 lines, -1768 lines) Patch
M content/renderer/media/webmediaplayer_impl.h View 1 chunk +0 lines, -3 lines 0 comments Download
M content/renderer/media/webmediaplayer_impl.cc View 4 chunks +41 lines, -53 lines 0 comments Download
M media/BUILD.gn View 2 chunks +0 lines, -3 lines 0 comments Download
M media/base/BUILD.gn View 1 chunk +0 lines, -2 lines 0 comments Download
M media/base/filter_collection.h View 2 chunks +13 lines, -8 lines 0 comments Download
M media/base/filter_collection.cc View 2 chunks +18 lines, -6 lines 0 comments Download
M media/base/media_log.cc View 1 chunk +4 lines, -2 lines 0 comments Download
M media/base/media_log_event.h View 1 chunk +3 lines, -4 lines 0 comments Download
M media/base/mock_filters.h View 2 chunks +0 lines, -26 lines 0 comments Download
M media/base/mock_filters.cc View 1 chunk +0 lines, -4 lines 0 comments Download
M media/base/pipeline.h View 12 chunks +84 lines, -10 lines 0 comments Download
M media/base/pipeline.cc View 20 chunks +315 lines, -61 lines 0 comments Download
M media/base/pipeline_unittest.cc View 30 chunks +347 lines, -114 lines 0 comments Download
D media/base/renderer.h View 1 chunk +0 lines, -75 lines 0 comments Download
D media/base/renderer.cc View 1 chunk +0 lines, -13 lines 0 comments Download
M media/filters/audio_renderer_impl.cc View 2 chunks +2 lines, -4 lines 0 comments Download
M media/filters/pipeline_integration_test_base.cc View 7 chunks +14 lines, -21 lines 0 comments Download
D media/filters/renderer_impl.h View 1 chunk +0 lines, -201 lines 0 comments Download
D media/filters/renderer_impl.cc View 1 chunk +0 lines, -572 lines 0 comments Download
D media/filters/renderer_impl_unittest.cc View 1 chunk +0 lines, -554 lines 0 comments Download
M media/filters/video_renderer_impl.cc View 4 chunks +2 lines, -7 lines 0 comments Download
M media/filters/video_renderer_impl_unittest.cc View 2 chunks +1 line, -2 lines 0 comments Download
M media/media.gyp View 3 chunks +0 lines, -5 lines 0 comments Download
M media/tools/player_x11/player_x11.cc View 3 chunks +13 lines, -18 lines 0 comments Download

Messages

Total messages: 4 (0 generated)
Jeffrey Yasskin
Created Revert of media: Introduce Renderer interface and RendererImpl.
6 years, 4 months ago (2014-08-26 00:42:54 UTC) #1
Jeffrey Yasskin
The CQ bit was checked by jyasskin@chromium.org
6 years, 4 months ago (2014-08-26 00:47:09 UTC) #2
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-status.appspot.com/cq/jyasskin@chromium.org/503053007/1
6 years, 4 months ago (2014-08-26 00:49:00 UTC) #3
Jeffrey Yasskin
6 years, 4 months ago (2014-08-26 01:20:59 UTC) #4
The revert didn't work, so I've filed http://crbug.com/407452 instead and will
suppress the error.

Powered by Google App Engine
This is Rietveld 408576698