bugzilla.mozilla.org has resumed normal operation. Attachments prior to 2014 will be unavailable for a few days. This is tracked in Bug 1475801.
Please report any other irregularities here.

ASSERTION: Bounds computation mismatch: 'mContainerBounds.IsEqualInterior(mAccumulatedChildBounds)', file layout/painting/FrameLayerBuilder.cpp, line 5248

RESOLVED WORKSFORME

Status

()

Core
Layout: Web Painting
RESOLVED WORKSFORME
a year ago
8 months ago

People

(Reporter: allstars, Assigned: mstange)

Tracking

Trunk
Points:
---

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(1 attachment)

./mach mochitest dom/html/test/test_fullscreen-api-race.html

The test passed however there is an assertion

GECKO(8044) | [Parent 8044] ###!!! ASSERTION: Bounds computation mismatch: 'mContainerBounds.IsEqualInterior(mAccumulatedChildBounds)', file /home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp, line 5248
GECKO(8044) | #01: mozilla::ContainerState::Finish(unsigned int*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsDisplayList*, bool*) (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:5247 (discriminator 1))
GECKO(8044) | #02: 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) (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:5671 (discriminator 4))
GECKO(8044) | #03: nsDisplayMask::BuildLayer(nsDisplayListBuilder*, mozilla::layers::LayerManager*, mozilla::ContainerLayerParameters const&) (/home/allstars/src/gecko-dev/layout/painting/nsDisplayList.cpp:8410)
GECKO(8044) | #04: mozilla::FrameLayerBuilder::AddPaintedDisplayItem(mozilla::PaintedLayerData*, nsDisplayItem*, mozilla::DisplayItemClip const&, mozilla::ContainerState&, mozilla::LayerState, nsPoint const&) (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:4676)
GECKO(8044) | #05: void mozilla::ContainerState::FinishPaintedLayerData<mozilla::PaintedLayerDataNode::PopPaintedLayerData()::{lambda()#1}>(mozilla::PaintedLayerData&, mozilla::PaintedLayerDataNode::PopPaintedLayerData()::{lambda()#1}) (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:3156 (discriminator 3))
GECKO(8044) | #06: mozilla::PaintedLayerDataNode::PopPaintedLayerData() (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:2863)
GECKO(8044) | #07: mozilla::PaintedLayerDataNode::PopAllPaintedLayerData() (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:2870)
GECKO(8044) | #08: mozilla::PaintedLayerDataNode::Finish(bool) (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:2827)
GECKO(8044) | #09: mozilla::PaintedLayerDataTree::Finish() (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:2887)
GECKO(8044) | #10: mozilla::ContainerState::Finish(unsigned int*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsDisplayList*, bool*) (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:5244)
GECKO(8044) | #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) (/home/allstars/src/gecko-dev/layout/painting/FrameLayerBuilder.cpp:5671 (discriminator 4))
GECKO(8044) | #12: nsDisplayList::PaintRoot(nsDisplayListBuilder*, nsRenderingContext*, unsigned int) (/home/allstars/src/gecko-dev/layout/painting/nsDisplayList.cpp:2159)
GECKO(8044) | #13: nsLayoutUtils::PaintFrame(nsRenderingContext*, nsIFrame*, nsRegion const&, unsigned int, nsDisplayListBuilderMode, nsLayoutUtils::PaintFrameFlags) (/home/allstars/src/gecko-dev/layout/base/nsLayoutUtils.cpp:3721)
GECKO(8044) | #14: mozilla::PresShell::Paint(nsView*, nsRegion const&, unsigned int) (/home/allstars/src/gecko-dev/layout/base/PresShell.cpp:6499)
GECKO(8044) | #15: nsViewManager::ProcessPendingUpdatesPaint(nsIWidget*) (/home/allstars/src/gecko-dev/view/nsViewManager.cpp:481)
GECKO(8044) | #16: nsViewManager::ProcessPendingUpdatesForView(nsView*, bool) (/home/allstars/src/gecko-dev/view/nsViewManager.cpp:409 (discriminator 2))
GECKO(8044) | #17: nsViewManager::ProcessPendingUpdates() (/home/allstars/src/gecko-dev/view/nsViewManager.cpp:1092)
GECKO(8044) | #18: nsViewManager::WillPaintWindow(nsIWidget*) (/home/allstars/src/gecko-dev/view/nsViewManager.cpp:711)
GECKO(8044) | #19: nsView::WillPaintWindow(nsIWidget*) (/home/allstars/src/gecko-dev/view/nsView.cpp:1059)
GECKO(8044) | #20: nsWindow::OnExposeEvent(_cairo*) (/home/allstars/src/gecko-dev/widget/gtk/nsWindow.cpp:2092)
GECKO(8044) | #21: draw_window_of_widget(_GtkWidget*, _GdkWindow*, _cairo*) (/home/allstars/src/gecko-dev/widget/gtk/nsWindow.cpp:5405)
GECKO(8044) | #22: expose_event_cb(_GtkWidget*, _cairo*) (/home/allstars/src/gecko-dev/widget/gtk/nsWindow.cpp:5432)
GECKO(8044) | #23: gtk_main_do_event (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #24: gtk_requisition_free (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #25: g_closure_invoke (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0)
GECKO(8044) | #26: g_signal_handler_disconnect (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0)
GECKO(8044) | #27: g_signal_emit_valist (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0)
GECKO(8044) | #28: g_signal_emit (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0)
GECKO(8044) | #29: gtk_widget_get_allocated_baseline (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #30: gtk_container_propagate_draw (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #31: gtk_container_propagate_draw (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #32: gtk_widget_path_has_parent (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #33: gtk_widget_get_allocated_baseline (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #34: gtk_widget_get_action_group (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #35: gtk_main_do_event (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0)
GECKO(8044) | #36: gdk_event_free (/usr/lib/x86_64-linux-gnu/libgdk-3.so.0)
GECKO(8044) | #37: gdk_window_get_display (/usr/lib/x86_64-linux-gnu/libgdk-3.so.0)
GECKO(8044) | #38: gdk_cairo_create (/usr/lib/x86_64-linux-gnu/libgdk-3.so.0)
GECKO(8044) | #39: gdk_cairo_create (/usr/lib/x86_64-linux-gnu/libgdk-3.so.0)
GECKO(8044) | #40: g_closure_invoke (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0)
GECKO(8044) | #41: g_signal_handler_disconnect (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0)
GECKO(8044) | #42: g_signal_emit_valist (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0)
GECKO(8044) | #43: g_signal_emit (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0)
GECKO(8044) | #44: gdk_frame_clock_get_refresh_info (/usr/lib/x86_64-linux-gnu/libgdk-3.so.0)
GECKO(8044) | #45: gdk_threads_leave (/usr/lib/x86_64-linux-gnu/libgdk-3.so.0)
GECKO(8044) | #46: g_source_get_time (/lib/x86_64-linux-gnu/libglib-2.0.so.0)
GECKO(8044) | #47: g_main_context_dispatch (/lib/x86_64-linux-gnu/libglib-2.0.so.0)
GECKO(8044) | #48: g_main_context_dispatch (/lib/x86_64-linux-gnu/libglib-2.0.so.0)
GECKO(8044) | #49: g_main_context_iteration (/lib/x86_64-linux-gnu/libglib-2.0.so.0)
GECKO(8044) | #50: nsAppShell::ProcessNextNativeEvent(bool) (/home/allstars/src/gecko-dev/widget/gtk/nsAppShell.cpp:271)
GECKO(8044) | #51: nsBaseAppShell::DoProcessNextNativeEvent(bool) (/home/allstars/src/gecko-dev/widget/nsBaseAppShell.cpp:138)
GECKO(8044) | #52: nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal*, bool) (/home/allstars/src/gecko-dev/widget/nsBaseAppShell.cpp:271)
GECKO(8044) | #53: nsThread::ProcessNextEvent(bool, bool*) (/home/allstars/src/gecko-dev/xpcom/threads/nsThread.cpp:1232)
GECKO(8044) | #54: NS_ProcessNextEvent(nsIThread*, bool) (/home/allstars/src/gecko-dev/xpcom/threads/nsThreadUtils.cpp:393)
GECKO(8044) | #55: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) (/home/allstars/src/gecko-dev/ipc/glue/MessagePump.cpp:96)
GECKO(8044) | #56: MessageLoop::RunInternal() (/home/allstars/src/gecko-dev/ipc/chromium/src/base/message_loop.cc:239)
GECKO(8044) | #57: MessageLoop::RunHandler() (/home/allstars/src/gecko-dev/ipc/chromium/src/base/message_loop.cc:232)
GECKO(8044) | #58: MessageLoop::Run() (/home/allstars/src/gecko-dev/ipc/chromium/src/base/message_loop.cc:210)
GECKO(8044) | #59: nsBaseAppShell::Run() (/home/allstars/src/gecko-dev/widget/nsBaseAppShell.cpp:158)
GECKO(8044) | #60: nsAppStartup::Run() (/home/allstars/src/gecko-dev/toolkit/components/startup/nsAppStartup.cpp:283)
GECKO(8044) | #61: XREMain::XRE_mainRun() (/home/allstars/src/gecko-dev/toolkit/xre/nsAppRunner.cpp:4550)
GECKO(8044) | #62: XREMain::XRE_main(int, char**, mozilla::BootstrapConfig const&) (/home/allstars/src/gecko-dev/toolkit/xre/nsAppRunner.cpp:4730)
GECKO(8044) | #63: XRE_main(int, char**, mozilla::BootstrapConfig const&) (/home/allstars/src/gecko-dev/toolkit/xre/nsAppRunner.cpp:4823)
GECKO(8044) | #64: mozilla::BootstrapImpl::XRE_main(int, char**, mozilla::BootstrapConfig const&) (/home/allstars/src/gecko-dev/toolkit/xre/Bootstrap.cpp:46)
GECKO(8044) | #65: do_main(int, char**, char**) (/home/allstars/src/gecko-dev/browser/app/nsBrowserApp.cpp:237 (discriminator 3))
GECKO(8044) | #66: main (/home/allstars/src/gecko-dev/browser/app/nsBrowserApp.cpp:309)
GECKO(8044) | #67: __libc_start_main (/build/glibc-cxyGtm/glibc-2.24/csu/../csu/libc-start.c:325)
GECKO(8044) | #68: _start (/home/allstars/src/gecko-dev/obj-x86_64-pc-linux-gnu/dist/bin/firefox)
GECKO(8044) | #69: ??? (???:???)
Hi Xidorn, I checked that you're the author of dom/html/test/test_fullscreen-api-race.html, can you help to check this assertion?

Thanks
Flags: needinfo?(xidorn+moz)
I'm not familiar with painting part, so I have no idea what is the assertion about.

test_fullscreen-api-race is a test for checking that the browser ends up in a sane state even if we call requestFullscreen / exitFullscreen at various interesting time point.

Triggering assertion in this test while nothing happens for other test (e.g. test_fullscreen-api.html) usually indicates that there are some race condition in the code.

I have no further idea what should be done here. You may want someone who's familiar with painting code to see what the assertion means, in what condition can it happen, and whether it is bad.
Flags: needinfo?(xidorn+moz)
Layout: Web painting seems a better module fit, moving there to hopefully get more experts' attention!
Component: DOM → Layout: Web Painting
The assertion is gone now.
Status: NEW → RESOLVED
Last Resolved: a year ago
Resolution: --- → WORKSFORME
Sorry, the assertion is still there..
Status: RESOLVED → REOPENED
Resolution: WORKSFORME → ---
Created attachment 8870730 [details] [diff] [review]
test.patch

Update the test to not use data: URI
Hi Markus,
Could you help to look into the assertion?

STR:
1. flip security.data_uri.unique_opaque_origin to true
2. apply the test case change
3. ./mach mochitest dom/html/test/test_fullscreen-api-race.html
could reproduce the assetion.

The reason I am modifying the test is I am currently working on bug 1324406, and the test test_fullscreen-api-race.html used data:text/html, hence the document will be treated as a cross origin document and throw Security Error once we turn on the pref "security.data_uri.unique_opaque_origin". So I am rewriting the tests that use data: URI. However now I met the assertion, and I 'git blame' found that you added the assertion, but I don't quite famaliar with the layout code, it would be really helpful to us if you can provide some suggestions here.

Thanks
Flags: needinfo?(mstange)
(In reply to Yoshi Huang [:allstars.chh] from comment #7)
> STR:
> 1. flip security.data_uri.unique_opaque_origin to true
> 2. apply the test case change
Actually as mentioned in comment 0, you don't have to turn on the pref and apply the test, running the test will trigger the assertion already.


> 3. ./mach mochitest dom/html/test/test_fullscreen-api-race.html
> could reproduce the assetion.
>
(Assignee)

Comment 9

a year ago
Oh no, this assertion has caused me many weeks of grief.

I'll need to reproduce this bug and debug it.
(Reporter)

Updated

11 months ago
Flags: needinfo?(mstange)
I'm hitting this again with a seemingly innocent XUL front-end patch in bug 464450, see https://treeherder.mozilla.org/#/jobs?repo=try&revision=90ce5aa21061743609c762d3af7f542d8e4b4535&selectedJob=137836711
Blocks: 464450
Flags: needinfo?(mstange)
(Assignee)

Comment 11

9 months ago
We're also hitting this with headless Firefox now, bug 1409582. I'll need to take a look.
(Assignee)

Comment 12

8 months ago
(In reply to Dão Gottwald [::dao] from comment #10)
> I'm hitting this again with a seemingly innocent XUL front-end patch in bug
> 464450, see
> https://treeherder.mozilla.org/#/
> jobs?repo=try&revision=90ce5aa21061743609c762d3af7f542d8e4b4535&selectedJob=1
> 37836711

I just tried to reproduce this on Linux with a somewhat recent tree, and the assertion wasn't firing any more. I'm now trying to reproduce it with that exact try revision.
Assignee: nobody → mstange
Status: REOPENED → ASSIGNED
Flags: needinfo?(mstange)
(Assignee)

Comment 13

8 months ago
I *can* reproduce it with that exact try revision. So I think this just has been fixed in the meantime. It may have been fixed by bug 1382534.
(Assignee)

Comment 14

8 months ago
> ./mach mochitest dom/html/test/test_fullscreen-api-race.html

This one also no longer asserts for me. So it looks like this is completely fixed!
Status: ASSIGNED → RESOLVED
Last Resolved: a year ago8 months ago
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.