Closed Bug 1458121 Opened 2 years ago Closed Last year

Assertion failure: itemClip.GetRoundedRectCount() == 0, at src/layout/painting/FrameLayerBuilder.cpp:4699

Categories

(Core :: Web Painting, defect, P2)

defect

Tracking

()

RESOLVED FIXED
mozilla63
Tracking Status
firefox-esr52 --- wontfix
firefox-esr60 --- wontfix
firefox61 --- wontfix
firefox62 --- wontfix
firefox63 --- fixed

People

(Reporter: tsmith, Assigned: mattwoodrow)

References

(Blocks 1 open bug)

Details

(Keywords: assertion, testcase)

Attachments

(2 files)

Attached file testcase.html
Assertion failure: itemClip.GetRoundedRectCount() == 0, at src/layout/painting/FrameLayerBuilder.cpp:4699

#0 mozilla::ContainerState::ProcessDisplayItems(nsDisplayList*) src/layout/painting/FrameLayerBuilder.cpp:4832:7
#1 mozilla::FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder*, mozilla::layers::LayerManager*, nsIFrame*, nsDisplayItem*, nsDisplayList*, mozilla::ContainerLayerParameters const&, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const*, unsigned int) src/layout/painting/FrameLayerBuilder.cpp:5981:9
#2 nsDisplayFilter::BuildLayer(nsDisplayListBuilder*, mozilla::layers::LayerManager*, mozilla::ContainerLayerParameters const&) src/layout/painting/nsDisplayList.cpp:9839:5
#3 mozilla::FrameLayerBuilder::AddPaintedDisplayItem(mozilla::PaintedLayerData*, mozilla::AssignedDisplayItem&, mozilla::ContainerState&, mozilla::layers::Layer*) src/layout/painting/FrameLayerBuilder.cpp:5080:20
#4 void mozilla::ContainerState::FinishPaintedLayerData<mozilla::PaintedLayerDataNode::PopAllPaintedLayerData()::$_0>(mozilla::PaintedLayerData&, mozilla::PaintedLayerDataNode::PopAllPaintedLayerData()::$_0) src/layout/painting/FrameLayerBuilder.cpp:3405:20
#5 mozilla::PaintedLayerDataNode::PopAllPaintedLayerData() src/layout/painting/FrameLayerBuilder.cpp:3034:23
#6 mozilla::PaintedLayerDataNode::Finish(bool) src/layout/painting/FrameLayerBuilder.cpp:2999:3
#7 mozilla::PaintedLayerDataNode::FinishAllChildren(bool) src/layout/painting/FrameLayerBuilder.cpp:2988:19
#8 mozilla::PaintedLayerDataNode::Finish(bool) src/layout/painting/FrameLayerBuilder.cpp:2997:3
#9 mozilla::PaintedLayerDataTree::Finish() src/layout/painting/FrameLayerBuilder.cpp:3059:12
#10 mozilla::ContainerState::Finish(unsigned int*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsDisplayList*) src/layout/painting/FrameLayerBuilder.cpp:5609:25
#11 mozilla::FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder*, mozilla::layers::LayerManager*, nsIFrame*, nsDisplayItem*, nsDisplayList*, mozilla::ContainerLayerParameters const&, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const*, unsigned int) src/layout/painting/FrameLayerBuilder.cpp:5988:9
#12 nsDisplayList::BuildLayers(nsDisplayListBuilder*, mozilla::layers::LayerManager*, unsigned int, bool) src/layout/painting/nsDisplayList.cpp:2529:9
#13 nsDisplayList::PaintRoot(nsDisplayListBuilder*, gfxContext*, unsigned int) src/layout/painting/nsDisplayList.cpp:2740:20
#14 nsLayoutUtils::PaintFrame(gfxContext*, nsIFrame*, nsRegion const&, unsigned int, nsDisplayListBuilderMode, nsLayoutUtils::PaintFrameFlags) src/layout/base/nsLayoutUtils.cpp:3953:12
#15 mozilla::PresShell::Paint(nsView*, nsRegion const&, unsigned int) src/layout/base/PresShell.cpp:6328:5
#16 nsViewManager::ProcessPendingUpdatesPaint(nsIWidget*) src/view/nsViewManager.cpp:480:19
#17 nsViewManager::ProcessPendingUpdatesForView(nsView*, bool) src/view/nsViewManager.cpp:412:33
#18 nsViewManager::ProcessPendingUpdates() src/view/nsViewManager.cpp:1102:5
#19 nsRefreshDriver::Tick(long, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:2067:11
#20 mozilla::RefreshDriverTimer::TickRefreshDrivers(long, mozilla::TimeStamp, nsTArray<RefPtr<nsRefreshDriver> >&) src/layout/base/nsRefreshDriver.cpp:307:7
#21 mozilla::RefreshDriverTimer::Tick(long, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:329:5
#22 mozilla::VsyncRefreshDriverTimer::RunRefreshDrivers(mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:770:5
#23 mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::TickRefreshDriver(mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:683:35
#24 mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::NotifyVsync(mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:584:9
#25 mozilla::layout::VsyncChild::RecvNotify(mozilla::TimeStamp const&) src/layout/ipc/VsyncChild.cpp:68:16
#26 mozilla::layout::PVsyncChild::OnMessageReceived(IPC::Message const&) src/obj-firefox/ipc/ipdl/PVsyncChild.cpp:156:20
#27 mozilla::ipc::PBackgroundChild::OnMessageReceived(IPC::Message const&) src/obj-firefox/ipc/ipdl/PBackgroundChild.cpp:1928:28
#28 mozilla::ipc::MessageChannel::DispatchAsyncMessage(IPC::Message const&) src/ipc/glue/MessageChannel.cpp:2141:25
#29 mozilla::ipc::MessageChannel::DispatchMessage(IPC::Message&&) src/ipc/glue/MessageChannel.cpp:2071:17
#30 mozilla::ipc::MessageChannel::RunMessage(mozilla::ipc::MessageChannel::MessageTask&) src/ipc/glue/MessageChannel.cpp:1917:5
#31 mozilla::ipc::MessageChannel::MessageTask::Run() src/ipc/glue/MessageChannel.cpp:1950:15
#32 nsThread::ProcessNextEvent(bool, bool*) src/xpcom/threads/nsThread.cpp:1090:14
#33 NS_ProcessNextEvent(nsIThread*, bool) src/xpcom/threads/nsThreadUtils.cpp:519:10
#34 mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:125:5
#35 MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:326:10
#36 MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:299:3
#37 nsBaseAppShell::Run() src/widget/nsBaseAppShell.cpp:157:27
#38 XRE_RunAppShell() src/toolkit/xre/nsEmbedFunctions.cpp:893:22
#39 mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:269:9
#40 MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:326:10
#41 MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:299:3
#42 XRE_InitChildProcess(int, char**, XREChildData const*) src/toolkit/xre/nsEmbedFunctions.cpp:719:34
#43 content_process_main(mozilla::Bootstrap*, int, char**) src/browser/app/../../ipc/contentproc/plugin-container.cpp:50:30
#44 main src/browser/app/nsBrowserApp.cpp:280:18
#45 __libc_start_main /build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:291
#46 _start (firefox+0x423444)
Flags: in-testsuite?
Priority: -- → P2
Assignee: nobody → matt.woodrow
Comment on attachment 8986639 [details]
Bug 1458121 - Don't try to layerize when we have a clip-path mask as well as rounded rect clipping.

https://reviewboard.mozilla.org/r/251956/#review261562

CJ and I were hoping that this is not a case that can ever be hit. Any rounded rect clips should be inherited through the nsDisplayMask container items into its contents, just like with opacity. Do you know how this rounded clip ends up on the mask item?
Attachment #8986639 - Flags: review?(mstange) → review+
(In reply to Markus Stange [:mstange] from comment #2)
> Comment on attachment 8986639 [details]
> Bug 1458121 - Don't try to layerize when we have a clip-path mask as well as
> rounded rect clipping.
> 
> https://reviewboard.mozilla.org/r/251956/#review261562
> 
> CJ and I were hoping that this is not a case that can ever be hit. Any
> rounded rect clips should be inherited through the nsDisplayMask container
> items into its contents, just like with opacity. Do you know how this
> rounded clip ends up on the mask item?

nsDisplayWrapList::UpdateBounds only clears clips on the wrapper up to the ASR of the wrapper. The rounded rect clipping is on an ancestor ASR, so it's not cleared here.
Pushed by mwoodrow@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/78e841de1a73
Don't try to layerize when we have a clip-path mask as well as rounded rect clipping. r=mstange
https://hg.mozilla.org/mozilla-central/rev/78e841de1a73
Status: NEW → RESOLVED
Closed: Last year
Resolution: --- → FIXED
Target Milestone: --- → mozilla63
(In reply to Matt Woodrow (:mattwoodrow) from comment #3)
> (In reply to Markus Stange [:mstange] from comment #2)
> > CJ and I were hoping that this is not a case that can ever be hit. Any
> > rounded rect clips should be inherited through the nsDisplayMask container
> > items into its contents, just like with opacity. Do you know how this
> > rounded clip ends up on the mask item?
> 
> nsDisplayWrapList::UpdateBounds only clears clips on the wrapper up to the
> ASR of the wrapper. The rounded rect clipping is on an ancestor ASR, so it's
> not cleared here.

I see! I hadn't considered this case before.

Usually, if the clip is on an ancestor ASR, then that clip should be applied as an "ancestor mask layer" and shouldn't need to be intersected with the mask. But in this testcase, the ContainerLayer for the mask is in an inactive subtree (because of a filter on the outside), so the clip doesn't end up as an ancestor mask layer.
You need to log in before you can comment on or make changes to this bug.