New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 748991 link

Starred by 8 users

Issue metadata

Status: Fixed
Owner:
Closed: Jan 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows , Mac
Pri: 1
Type: Bug



Sign in to add a comment

Renderer crash on DCHECK

Reported by apisa...@yandex-team.ru, Jul 26 2017

Issue description

UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 YaBrowser/17.7.1.550 (beta) Yowser/2.5 Safari/537.36

Steps to reproduce the problem:
1. Open https://music.yandex.ru in browser with DCHECK

What is the expected behavior?
All work, no crash

What went wrong?
Renderer crash with next stack:
[30707:16387:0725/122843.584532:FATAL:proxy_impl.cc(534)] Check failed: layer_tree_host_impl_->CanDraw(). 
0   libbase.dylib                       0x000000010507b39e base::debug::StackTrace::StackTrace(unsigned long) + 174
1   libbase.dylib                       0x000000010507b46d base::debug::StackTrace::StackTrace(unsigned long) + 29
2   libbase.dylib                       0x000000010507970c base::debug::StackTrace::StackTrace() + 28
3   libbase.dylib                       0x000000010511845f logging::LogMessage::~LogMessage() + 479
4   libbase.dylib                       0x0000000105115dd5 logging::LogMessage::~LogMessage() + 21
5   libcc.dylib                         0x000000010c796d01 cc::ProxyImpl::ScheduledActionDrawIfPossible() + 657
6   libcc.dylib                         0x000000010c54b3c2 cc::Scheduler::DrawIfPossible() + 210
7   libcc.dylib                         0x000000010c544feb cc::Scheduler::ProcessScheduledActions() + 1387
8   libcc.dylib                         0x000000010c5448e8 cc::Scheduler::OnBeginImplFrameDeadline() + 360
9   libcc.dylib                         0x000000010c5488b1 cc::Scheduler::BeginImplFrameWithDeadline(viz::BeginFrameArgs const&) + 257
10  libcc.dylib                         0x000000010c54822e cc::Scheduler::OnBeginFrameDerivedImpl(viz::BeginFrameArgs const&) + 1998
11  libcc.dylib                         0x000000010c526d2c cc::BeginFrameObserverBase::OnBeginFrame(viz::BeginFrameArgs const&) + 1532
12  libcc.dylib                         0x000000010c5321a0 cc::ExternalBeginFrameSource::OnBeginFrame(viz::BeginFrameArgs const&) + 1952
13  libcontent.dylib                    0x0000000128af50fa viz::ClientLayerTreeFrameSink::OnBeginFrame(viz::BeginFrameArgs const&) + 106
14  libcontent.dylib                    0x0000000125b7d2e1 cc::mojom::CompositorFrameSinkClientStubDispatch::Accept(cc::mojom::CompositorFrameSinkClient*, mojo::Message*) + 1297
15  libcontent.dylib                    0x0000000128af56d3 cc::mojom::CompositorFrameSinkClientStub<mojo::RawPtrImplRefTraits<cc::mojom::CompositorFrameSinkClient> >::Accept(mojo::Message*) + 83
16  libbindings.dylib                   0x00000001098d6e45 mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*) + 5733
17  libbindings.dylib                   0x00000001098d57d1 mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*) + 33
18  libbindings.dylib                   0x00000001098d3815 mojo::FilterChain::Accept(mojo::Message*) + 821
19  libbindings.dylib                   0x00000001098dab32 mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*) + 242
20  libbindings.dylib                   0x00000001098fbd6b mojo::internal::MultiplexRouter::ProcessIncomingMessage(mojo::Message*, mojo::internal::MultiplexRouter::ClientCallBehavior, base::SequencedTaskRunner*) + 1483
21  libbindings.dylib                   0x00000001098fb402 mojo::internal::MultiplexRouter::Accept(mojo::Message*) + 642
22  libbindings.dylib                   0x00000001098d3815 mojo::FilterChain::Accept(mojo::Message*) + 821
23  libbindings.dylib                   0x00000001098c3a75 mojo::Connector::ReadSingleMessage(unsigned int*) + 949
24  libbindings.dylib                   0x00000001098c4e4b mojo::Connector::ReadAllAvailableMessages() + 123
25  libbindings.dylib                   0x00000001098c4baf mojo::Connector::OnHandleReadyInternal(unsigned int) + 271
26  libbindings.dylib                   0x00000001098c4a8b mojo::Connector::OnWatcherHandleReady(unsigned int) + 27
27  libbindings.dylib                   0x00000001098c8b6f void base::internal::FunctorTraits<void (mojo::Connector::*)(unsigned int), void>::Invoke<mojo::Connector*, unsigned int>(void (mojo::Connector::*)(unsigned int), mojo::Connector*&&, unsigned int&&) + 143
28  libbindings.dylib                   0x00000001098c8a9f void base::internal::InvokeHelper<false, void>::MakeItSo<void (mojo::Connector::* const&)(unsigned int), mojo::Connector*, unsigned int>(void (mojo::Connector::* const&&&)(unsigned int), mojo::Connector*&&, unsigned int&&) + 95
29  libbindings.dylib                   0x00000001098c8a13 void base::internal::Invoker<base::internal::BindState<void (mojo::Connector::*)(unsigned int), base::internal::UnretainedWrapper<mojo::Connector> >, void (unsigned int)>::RunImpl<void (mojo::Connector::* const&)(unsigned int), std::__1::tuple<base::internal::UnretainedWrapper<mojo::Connector> > const&, 0ul>(void (mojo::Connector::* const&&&)(unsigned int), std::__1::tuple<base::internal::UnretainedWrapper<mojo::Connector> > const&&&, base::IndexSequence<0ul>, unsigned int&&) + 115
30  libbindings.dylib                   0x00000001098c8944 base::internal::Invoker<base::internal::BindState<void (mojo::Connector::*)(unsigned int), base::internal::UnretainedWrapper<mojo::Connector> >, void (unsigned int)>::Run(base::internal::BindStateBase*, unsigned int&&) + 68
31  libbindings.dylib                   0x00000001098bc787 base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1>::Run(unsigned int) const + 87
32  libbindings.dylib                   0x00000001098c730f mojo::SimpleWatcher::DiscardReadyState(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&) + 31
33  libbindings.dylib                   0x00000001098c75d4 void base::internal::FunctorTraits<void (*)(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&), void>::Invoke<base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&>(void (*)(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&), base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&&&, unsigned int&&, mojo::HandleSignalsState const&&&) + 68
34  libbindings.dylib                   0x00000001098c7580 void base::internal::InvokeHelper<false, void>::MakeItSo<void (* const&)(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&), base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&>(void (* const&&&)(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&), base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&&&, unsigned int&&, mojo::HandleSignalsState const&&&) + 80
35  libbindings.dylib                   0x00000001098c7520 void base::internal::Invoker<base::internal::BindState<void (*)(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&), base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> >, void (unsigned int, mojo::HandleSignalsState const&)>::RunImpl<void (* const&)(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&), std::__1::tuple<base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> > const&, 0ul>(void (* const&&&)(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&), std::__1::tuple<base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> > const&&&, base::IndexSequence<0ul>, unsigned int&&, mojo::HandleSignalsState const&) + 112
36  libbindings.dylib                   0x00000001098c7424 base::internal::Invoker<base::internal::BindState<void (*)(base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned int, mojo::HandleSignalsState const&), base::Callback<void (unsigned int), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> >, void (unsigned int, mojo::HandleSignalsState const&)>::Run(base::internal::BindStateBase*, unsigned int&&, mojo::HandleSignalsState const&) + 84
37  libmojo_public_system_cpp.dylib     0x0000000109a469ed base::Callback<void (unsigned int, mojo::HandleSignalsState const&), (base::internal::CopyMode)1, (base::internal::RepeatMode)1>::Run(unsigned int, mojo::HandleSignalsState const&) const + 109
38  libmojo_public_system_cpp.dylib     0x0000000109a4672b mojo::SimpleWatcher::OnHandleReady(int, unsigned int, mojo::HandleSignalsState const&) + 459
39  libmojo_public_system_cpp.dylib     0x0000000109a478f3 void base::internal::FunctorTraits<void (mojo::SimpleWatcher::*)(int, unsigned int, mojo::HandleSignalsState const&), void>::Invoke<base::WeakPtr<mojo::SimpleWatcher> const&, int const&, unsigned int const&, mojo::HandleSignalsState const&>(void (mojo::SimpleWatcher::*)(int, unsigned int, mojo::HandleSignalsState const&), base::WeakPtr<mojo::SimpleWatcher> const&&&, int const&&&, unsigned int const&&&, mojo::HandleSignalsState const&&&) + 179
40  libmojo_public_system_cpp.dylib     0x0000000109a47775 void base::internal::InvokeHelper<true, void>::MakeItSo<void (mojo::SimpleWatcher::* const&)(int, unsigned int, mojo::HandleSignalsState const&), base::WeakPtr<mojo::SimpleWatcher> const&, int const&, unsigned int const&, mojo::HandleSignalsState const&>(void (mojo::SimpleWatcher::* const&&&)(int, unsigned int, mojo::HandleSignalsState const&), base::WeakPtr<mojo::SimpleWatcher> const&&&, int const&&&, unsigned int const&&&, mojo::HandleSignalsState const&&&) + 149
41  libmojo_public_system_cpp.dylib     0x0000000109a476d2 void base::internal::Invoker<base::internal::BindState<void (mojo::SimpleWatcher::*)(int, unsigned int, mojo::HandleSignalsState const&), base::WeakPtr<mojo::SimpleWatcher>, int, unsigned int, mojo::HandleSignalsState>, void ()>::RunImpl<void (mojo::SimpleWatcher::* const&)(int, unsigned int, mojo::HandleSignalsState const&), std::__1::tuple<base::WeakPtr<mojo::SimpleWatcher>, int, unsigned int, mojo::HandleSignalsState> const&, 0ul, 1ul, 2ul, 3ul>(void (mojo::SimpleWatcher::* const&&&)(int, unsigned int, mojo::HandleSignalsState const&), std::__1::tuple<base::WeakPtr<mojo::SimpleWatcher>, int, unsigned int, mojo::HandleSignalsState> const&&&, base::IndexSequence<0ul, 1ul, 2ul, 3ul>) + 242
42  libmojo_public_system_cpp.dylib     0x0000000109a4751c base::internal::Invoker<base::internal::BindState<void (mojo::SimpleWatcher::*)(int, unsigned int, mojo::HandleSignalsState const&), base::WeakPtr<mojo::SimpleWatcher>, int, unsigned int, mojo::HandleSignalsState>, void ()>::Run(base::internal::BindStateBase*) + 44
43  libbase.dylib                       0x0000000105018b1f base::Callback<void (), (base::internal::CopyMode)0, (base::internal::RepeatMode)0>::Run() + 95
44  libbase.dylib                       0x000000010507d940 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) + 1040
45  libblink_platform.dylib             0x000000013efd5568 blink::scheduler::TaskQueueManager::ProcessTaskFromWorkQueue(blink::scheduler::internal::WorkQueue*, bool, blink::scheduler::LazyNow, base::TimeTicks*) + 2152
46  libblink_platform.dylib             0x000000013efcf955 blink::scheduler::TaskQueueManager::DoWork(bool) + 2085
47  libblink_platform.dylib             0x000000013efdec87 void base::internal::FunctorTraits<void (blink::scheduler::TaskQueueManager::*)(bool), void>::Invoke<base::WeakPtr<blink::scheduler::TaskQueueManager> const&, bool const&>(void (blink::scheduler::TaskQueueManager::*)(bool), base::WeakPtr<blink::scheduler::TaskQueueManager> const&&&, bool const&&&) + 151
48  libblink_platform.dylib             0x000000013efdeb85 void base::internal::InvokeHelper<true, void>::MakeItSo<void (blink::scheduler::TaskQueueManager::* const&)(bool), base::WeakPtr<blink::scheduler::TaskQueueManager> const&, bool const&>(void (blink::scheduler::TaskQueueManager::* const&&&)(bool), base::WeakPtr<blink::scheduler::TaskQueueManager> const&&&, bool const&&&) + 117
49  libblink_platform.dylib             0x000000013efdeafd void base::internal::Invoker<base::internal::BindState<void (blink::scheduler::TaskQueueManager::*)(bool), base::WeakPtr<blink::scheduler::TaskQueueManager>, bool>, void ()>::RunImpl<void (blink::scheduler::TaskQueueManager::* const&)(bool), std::__1::tuple<base::WeakPtr<blink::scheduler::TaskQueueManager>, bool> const&, 0ul, 1ul>(void (blink::scheduler::TaskQueueManager::* const&&&)(bool), std::__1::tuple<base::WeakPtr<blink::scheduler::TaskQueueManager>, bool> const&&&, base::IndexSequence<0ul, 1ul>) + 125
50  libblink_platform.dylib             0x000000013efdea0c base::internal::Invoker<base::internal::BindState<void (blink::scheduler::TaskQueueManager::*)(bool), base::WeakPtr<blink::scheduler::TaskQueueManager>, bool>, void ()>::Run(base::internal::BindStateBase*) + 44
51  libbase.dylib                       0x0000000105018b1f base::Callback<void (), (base::internal::CopyMode)0, (base::internal::RepeatMode)0>::Run() + 95
52  libbase.dylib                       0x000000010507d940 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) + 1040
53  libbase.dylib                       0x00000001051743be base::MessageLoop::RunTask(base::PendingTask*) + 894
54  libbase.dylib                       0x0000000105174917 base::MessageLoop::DeferOrRunPendingTask(base::PendingTask) + 71
55  libbase.dylib                       0x00000001051757fb base::MessageLoop::DoWork() + 715
56  libbase.dylib                       0x00000001051859df base::MessagePumpCFRunLoopBase::RunWork() + 95
57  libbase.dylib                       0x000000010518596c ___ZN4base24MessagePumpCFRunLoopBase13RunWorkSourceEPv_block_invoke + 28
58  libbase.dylib                       0x000000010512081a base::mac::CallWithEHFrame(void () block_pointer) + 10
59  libbase.dylib                       0x0000000105184e75 base::MessagePumpCFRunLoopBase::RunWorkSource(void*) + 101
60  CoreFoundation                      0x00007fff8117a321 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
61  CoreFoundation                      0x00007fff8115b21d __CFRunLoopDoSources0 + 557

Did this work before? N/A 

Chrome version: 62.0.3166.0  Channel: dev
OS Version: OS X 10.12.5
Flash Version: Shockwave Flash 26.0 r0
 

Comment 1 by danakj@chromium.org, Jul 26 2017

Cc: sunn...@chromium.org skyos...@chromium.org briander...@chromium.org
Labels: Needs-Feedback
Scheduler is drawing when CanDraw is false:

DrawResult ProxyImpl::ScheduledActionDrawIfPossible() {
  TRACE_EVENT0("cc", "ProxyImpl::ScheduledActionDraw");
  DCHECK(IsImplThread());

  // The scheduler should never generate this call when it can't draw.
  DCHECK(layer_tree_host_impl_->CanDraw());   <--------------- fails


The user agent says "YaBrowser/17.7.1.550". Is this a modified chromium build? Does this reproduce with upstream chromium?

I can't reproduce myself with ToTish chromium build.

Comment 2 by danakj@chromium.org, Jul 26 2017

(I tried on Linux. If someone has a mac they could try repro there)
I file this issue from another browser. The problem appears on self-build debug chromium master (day or two old) on MacOS 10.12.5.

Comment 4 by danakj@chromium.org, Jul 26 2017

Owner: sunn...@chromium.org
Status: Assigned (was: Unconfirmed)
sunny can you try to repro?
Cc: andr...@nvidia.com
Here's a repro of a crash with the same DCHECK failing. Please see crash1.html

I believe this happens in condition where GPU rasterization is switched to GPU rasterization with MSAA, and the frame deadline is forced before the resource eviction list has been marked as empty.

I think andreyf@nvidia.com has a (POC) fix. If you have an idea where and how you'd like the fix to be unittested, that would be appreciated. Of course, if it's easy for you fix this yourself that'd be appriciated too.
bbccrash.zip
355 KB Download

Comment 6 by andr...@nvidia.com, Oct 16 2017

Here is the fix 
https://chromium-review.googlesource.com/c/chromium/src/+/720962.
Could you please suggest a way how to unittest the crash because I cannot reduce crash scenario (posted by Kimmo) further.

The crash scenario is:
- cc::SchedulerStateMachine::WillActivate (FrameDealine will happen due to this)
- cc::LayerTreeHostImpl::CreateUIResource (for ex. by using painted scrollbar)
- switch from GpuRasterizationStatus::ON to GpuRasterizationStatus::MSAA_CONTENT
- cc::Scheduler::OnBeginImplFrameDeadline
- viz::ClientLayerTreeFrameSink::OnBeginFrame
- crash


Comment 7 by danakj@chromium.org, Oct 26 2017

Issue 775929 has been merged into this issue.

Comment 8 by danakj@chromium.org, Oct 26 2017

Components: Internals>Compositing
Labels: -Pri-2 Pri-1
775929 has 2 more repros:

1. badssl.com on mac

2. navigate to http://hforsten.com/heartbeat-detection-with-radar.html play the video under "Breathing and heartbeat detection"

Seems just about any interaction with either of the videos will aw-snap this page with dcheck_always_enabled, or running an Albatross build with chrome://flags/#dcheck-is-fatal enabled. See go/asan-optin for how to get these builds daily.


There's a proposed fix in #6. Sunny this has been assigned for a bit, did you have any thots or need to reassign?
sunnyps@: Will you be able to take a look at this?

This is preventing me from building with DCHECKs on my local build, which prevents me from catching other issues.
Issue 737466 has been merged into this issue.
Labels: OS-Linux OS-Windows
Duped bug's repro steps were:
(1) load http://www.crocs.com.sg/p/womens-crocs-isabella-sandal/202465.html?cgid=footwear&cid=62E#start=3
(2) DCHECK is hit


*ping*
sunnyps@: If you can't work on this, could you find someone else?

It's really annoying when my tab is constantly crashing during development.
Cc: vmp...@chromium.org danakj@chromium.org
Labels: -Needs-Feedback
I wasn't able to repro on a non-dcheck build but with the above DCHECK changed to a CHECK with any of the above URLs. But I can see why the bug may be happening.

#6: Your CL looks ok but the way it works is by deleting all UI resources, setting can draw to false, and asking for a new commit. A better solution would be to simply not evict or delete UI resources when switching from software raster to gpu raster. UI resources are just bitmaps that we upload to GL textures using ResourceProvider. We clear tiles because we want no artifacts at the seams. UI resources have the same upload path regardless of gpu raster and they aren't tiled so we needn't worry about seams.

danakj@ vmpstr@ WDYT?
Cc: enne@chromium.org
I had no luck reproducing this on Mac, Linux, or Windows, debug or release, with or without --enable-gpu-rasterization.

However, I have a fix (described above) here: https://chromium-review.googlesource.com/#/c/chromium/src/+/773785

If you can reproduce, please try that patch and let me know if it fixes the bug.

enne@: vmiura@ suggested you might have thoughts about what option to pick in #13

I tried my repro from #11 with a ToT Debug build, but it did not repro.
#13 sgtm
#15 you mean you tried a repro without my CL, right?
re #17, yes, it was a ToT build with no patches added.
Project Member

Comment 19 by bugdroid1@chromium.org, Nov 22 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/8595b0c2de57f2f42c4056d3a33ee81dfe99bd84

commit 8595b0c2de57f2f42c4056d3a33ee81dfe99bd84
Author: Sunny Sachanandani <sunnyps@chromium.org>
Date: Wed Nov 22 21:51:17 2017

cc: Do not evict UI resources when switching gpu rasterization mode.

We were marking UI resources as evicted when gpu rasterization mode
changed during commit. However, we don't update the scheduler's CanDraw
state or ask for a new commit to recreate the resources.

We don't need to evict UI resources for gpu rasterization because these
are just uploaded from bitmaps to a texture and have nothing to do with
tile manager or resource pool. The reasons for recreating tiles
e.g. artifacts at the seams don't apply to UI resources.

R=danakj,enne
BUG= 748991 

Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel
Change-Id: I59cd377719a27335e239459bf00ab6d9dabc70ef
Reviewed-on: https://chromium-review.googlesource.com/773785
Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#518761}
[modify] https://crrev.com/8595b0c2de57f2f42c4056d3a33ee81dfe99bd84/cc/trees/layer_tree_host_impl.cc
[modify] https://crrev.com/8595b0c2de57f2f42c4056d3a33ee81dfe99bd84/cc/trees/layer_tree_host_impl.h
[modify] https://crrev.com/8595b0c2de57f2f42c4056d3a33ee81dfe99bd84/cc/trees/layer_tree_host_impl_unittest.cc

Status: Fixed (was: Assigned)
Should be fixed.

Sign in to add a comment