New issue
Advanced search Search tips

Issue 659815 link

Starred by 1 user

Issue metadata

Status: Duplicate
Merged: issue 656231
Owner: ----
Closed: Oct 2016
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 3
Type: Bug



Sign in to add a comment

Debug assert in media::VideoRendererAlgorithm::OnLastFrameDropped() when resuming from suspend

Project Member Reported by stanisc@chromium.org, Oct 26 2016

Issue description

Version: 56.0.2900.0 (private 32-bit DEBUG build)
OS: Windows 10

What steps will reproduce the problem?
(1) Rendered an HTML5 video from mpeg-4 source on Dell XPS laptop
(2) Closed the laptop lid
(3) Resumed the laptop - noticed that the renderer process crashed

This happened only once out of multiple repeated suspend/resume cycles (I was testing something else).

What is the expected output?
No crash.

What do you see instead?
1) A small error popup without any text
2) Renderer process crashed and crash dump has been generated.

Here is the crash location:

void VideoRendererAlgorithm::OnLastFrameDropped() {
  // Since compositing is disconnected from the algorithm, the algorithm may be
  // Reset() in between ticks of the compositor, so discard notifications which
  // are invalid.
  //
  // If frames were expired by RemoveExpiredFrames() this count may be zero when
  // the OnLastFrameDropped() call comes in.
  if (!have_rendered_frames_ || frame_queue_.empty() ||
      !frame_queue_[last_frame_index_].render_count) {
    return;
  }

  ++frame_queue_[last_frame_index_].drop_count;
crash here >>> DCHECK_LE(frame_queue_[last_frame_index_].drop_count,
            frame_queue_[last_frame_index_].render_count);
  UpdateEffectiveFramesQueued();
}

Call stack:
 	base.dll!base::debug::BreakDebugger() Line 21	C++
 	base.dll!logging::LogMessage::~LogMessage() Line 751	C++
>	media.dll!media::VideoRendererAlgorithm::OnLastFrameDropped() Line 318	C++
 	media.dll!media::VideoRendererImpl::OnFrameDropped() Line 227	C++
 	media_blink.dll!media::VideoFrameCompositor::CallRender(base::TimeTicks deadline_min, base::TimeTicks deadline_max, bool background_rendering) Line 239	C++
 	media_blink.dll!media::VideoFrameCompositor::UpdateCurrentFrame(base::TimeTicks deadline_min, base::TimeTicks deadline_max) Line 113	C++
 	cc.dll!cc::VideoFrameProviderClientImpl::OnBeginFrame(const cc::BeginFrameArgs & args) Line 154	C++
 	cc.dll!cc::LayerTreeHostImpl::WillBeginImplFrame(const cc::BeginFrameArgs & args) Line 1845	C++
 	cc.dll!cc::ProxyImpl::WillBeginImplFrame(const cc::BeginFrameArgs & args) Line 426	C++
 	cc.dll!cc::Scheduler::BeginImplFrame(const cc::BeginFrameArgs & args) Line 444	C++
 	cc.dll!cc::Scheduler::BeginImplFrameWithDeadline(const cc::BeginFrameArgs & args) Line 400	C++
 	cc.dll!cc::Scheduler::OnBeginFrameDerivedImpl(const cc::BeginFrameArgs & args) Line 289	C++
 	cc.dll!cc::BeginFrameObserverBase::OnBeginFrame(const cc::BeginFrameArgs & args) Line 39	C++
 	cc.dll!cc::ExternalBeginFrameSource::OnBeginFrame(const cc::BeginFrameArgs & args) Line 250	C++
 	content.dll!content::CompositorExternalBeginFrameSource::OnBeginFrame(const cc::BeginFrameArgs & args) Line 86	C++
 	content.dll!base::DispatchToMethodImpl<content::CompositorExternalBeginFrameSource *,void (__thiscall content::CompositorExternalBeginFrameSource::*)(cc::BeginFrameArgs const &),std::tuple<cc::BeginFrameArgs> const &,0>(content::CompositorExternalBeginFrameSource * const & obj, void(content::CompositorExternalBeginFrameSource::*)(const cc::BeginFrameArgs &) method, const std::tuple<cc::BeginFrameArgs> & args, base::IndexSequence<0> __formal) Line 145	C++
 	content.dll!base::DispatchToMethod<content::CompositorExternalBeginFrameSource *,void (__thiscall content::CompositorExternalBeginFrameSource::*)(cc::BeginFrameArgs const &),std::tuple<cc::BeginFrameArgs> const &>(content::CompositorExternalBeginFrameSource * const & obj, void(content::CompositorExternalBeginFrameSource::*)(const cc::BeginFrameArgs &) method, const std::tuple<cc::BeginFrameArgs> & args) Line 151	C++
 	content.dll!IPC::DispatchToMethod<content::CompositorExternalBeginFrameSource,void (__thiscall content::CompositorExternalBeginFrameSource::*)(cc::BeginFrameArgs const &),void,std::tuple<cc::BeginFrameArgs> >(content::CompositorExternalBeginFrameSource * obj, void(content::CompositorExternalBeginFrameSource::*)(const cc::BeginFrameArgs &) method, void * __formal, const std::tuple<cc::BeginFrameArgs> & tuple) Line 26	C++
 	content.dll!IPC::MessageT<ViewMsg_BeginFrame_Meta,std::tuple<cc::BeginFrameArgs>,void>::Dispatch<content::CompositorExternalBeginFrameSource,content::CompositorExternalBeginFrameSource,void,void (__thiscall content::CompositorExternalBeginFrameSource::*)(cc::BeginFrameArgs const &)>(const IPC::Message * msg, content::CompositorExternalBeginFrameSource * obj, content::CompositorExternalBeginFrameSource * sender, void * parameter, void(content::CompositorExternalBeginFrameSource::*)(const cc::BeginFrameArgs &) func) Line 121	C++
 	content.dll!content::CompositorExternalBeginFrameSource::OnMessageReceived(const IPC::Message & message) Line 74	C++
 	content.dll!content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::OnMessageReceived(const IPC::Message & message) Line 64	C++
 	content.dll!base::internal::FunctorTraits<void (__thiscall content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*)(IPC::Message const &),void>::Invoke<scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> const &,IPC::Message const &>(void(content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*)(const IPC::Message &) method, const scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> & receiver_ptr, const IPC::Message & <args_0>) Line 215	C++
 	content.dll!base::internal::InvokeHelper<0,void>::MakeItSo<void (__thiscall content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*const &)(IPC::Message const &),scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> const &,IPC::Message const &>(void(content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*)(const IPC::Message &) & functor, const scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> & <args_0>, const IPC::Message & <args_1>) Line 285	C++
 	content.dll!base::internal::Invoker<base::internal::BindState<void (__thiscall content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*)(IPC::Message const &),scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> >,void __cdecl(IPC::Message const &)>::RunImpl<void (__thiscall content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*const &)(IPC::Message const &),std::tuple<scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> > const &,0>(void(content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*)(const IPC::Message &) & functor, const std::tuple<scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> > & bound, base::IndexSequence<0> __formal, const IPC::Message & <unbound_args_0>) Line 361	C++
 	content.dll!base::internal::Invoker<base::internal::BindState<void (__thiscall content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*)(IPC::Message const &),scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> >,void __cdecl(IPC::Message const &)>::Run(base::internal::BindStateBase * base, const IPC::Message & <unbound_args_0>) Line 339	C++
 	content.dll!base::internal::RunMixin<base::Callback<void __cdecl(IPC::Message const &),1,1> >::Run(const IPC::Message & <args_0>) Line 64	C++
 	content.dll!content::CompositorForwardingMessageFilter::ProcessMessageOnCompositorThread(const IPC::Message & message) Line 75	C++
 	content.dll!base::internal::FunctorTraits<void (__thiscall content::CompositorForwardingMessageFilter::*)(IPC::Message const &),void>::Invoke<scoped_refptr<content::CompositorForwardingMessageFilter> const &,IPC::Message const &>(void(content::CompositorForwardingMessageFilter::*)(const IPC::Message &) method, const scoped_refptr<content::CompositorForwardingMessageFilter> & receiver_ptr, const IPC::Message & <args_0>) Line 215	C++
 	content.dll!base::internal::InvokeHelper<0,void>::MakeItSo<void (__thiscall content::CompositorForwardingMessageFilter::*const &)(IPC::Message const &),scoped_refptr<content::CompositorForwardingMessageFilter> const &,IPC::Message const &>(void(content::CompositorForwardingMessageFilter::*)(const IPC::Message &) & functor, const scoped_refptr<content::CompositorForwardingMessageFilter> & <args_0>, const IPC::Message & <args_1>) Line 285	C++
 	content.dll!base::internal::Invoker<base::internal::BindState<void (__thiscall content::CompositorForwardingMessageFilter::*)(IPC::Message const &),scoped_refptr<content::CompositorForwardingMessageFilter>,IPC::Message>,void __cdecl(void)>::RunImpl<void (__thiscall content::CompositorForwardingMessageFilter::*const &)(IPC::Message const &),std::tuple<scoped_refptr<content::CompositorForwardingMessageFilter>,IPC::Message> const &,0,1>(void(content::CompositorForwardingMessageFilter::*)(const IPC::Message &) & functor, const std::tuple<scoped_refptr<content::CompositorForwardingMessageFilter>,IPC::Message> & bound, base::IndexSequence<0,1> __formal) Line 361	C++
 	content.dll!base::internal::Invoker<base::internal::BindState<void (__thiscall content::CompositorForwardingMessageFilter::*)(IPC::Message const &),scoped_refptr<content::CompositorForwardingMessageFilter>,IPC::Message>,void __cdecl(void)>::Run(base::internal::BindStateBase * base) Line 339	C++
 	base.dll!base::internal::RunMixin<base::Callback<void __cdecl(void),0,0> >::Run() Line 47	C++
 	base.dll!base::debug::TaskAnnotator::RunTask(const char * queue_function, base::PendingTask * pending_task) Line 54	C++
 	base.dll!base::MessageLoop::RunTask(base::PendingTask * pending_task) Line 414	C++
 	base.dll!base::MessageLoop::DeferOrRunPendingTask(base::PendingTask pending_task) Line 425	C++
 	base.dll!base::MessageLoop::DoWork() Line 515	C++
 	base.dll!base::MessagePumpDefault::Run(base::MessagePump::Delegate * delegate) Line 35	C++
 	base.dll!base::MessageLoop::RunHandler() Line 379	C++
 	base.dll!base::RunLoop::Run() Line 36	C++
 	base.dll!base::Thread::Run(base::RunLoop * run_loop) Line 246	C++
 	base.dll!base::Thread::ThreadMain() Line 336	C++
 	base.dll!base::`anonymous namespace'::ThreadFunc(void * params) Line 86	C++
 	KERNEL32.DLL!@BaseThreadInitThunk@12()	Unknown



 
Mergedinto: 656231
Status: Duplicate (was: Untriaged)
Sorry for the trouble. Fix already on the way.

Sign in to add a comment