Closed Bug 540078 Opened 15 years ago Closed 9 years ago

ASSERTION: GetMinimumWidgetSize was ignored: 'rect->width == indicator_size'

Categories

(Core :: Layout, defect)

x86_64
Linux
defect
Not set
normal

Tracking

()

RESOLVED WORKSFORME
Tracking Status
b2g-v2.5 --- fixed

People

(Reporter: MatsPalmgren_bugz, Unassigned)

References

(Depends on 2 open bugs)

Details

(Keywords: assertion)

Attachments

(2 files)

The underlying problem might be bug 369581 and/or bug 403934.

STEPS TO REPRODUCE
1. load layout/generic/crashtests/382129-1.xhtml

ACTUAL RESULTS
###!!! ASSERTION: GetMinimumWidgetSize was ignored: 'rect->width == indicator_size', file widget/src/gtk2/gtk2drawing.c, line 1049

Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 0x7f5ddcd317e0 (LWP 29780)]
RealBreak () at xpcom/base/nsDebugImpl.cpp:421
421     }
(gdb) bt
#0  RealBreak () at xpcom/base/nsDebugImpl.cpp:421
#1  0x00007f5ddbe7ed10 in NS_DebugBreak_P (aSeverity=1, aStr=0x7f5dcafc223b "GetMinimumWidgetSize was ignored", aExpr=0x7f5dcafc221d "rect->width == indicator_size", aFile=0x7f5dcafc21f2 "widget/src/gtk2/gtk2drawing.c", aLine=1049) at xpcom/base/nsDebugImpl.cpp:360
#2  0x00007f5dcaf78cfd in moz_gtk_toggle_paint (drawable=0x1567a60, rect=0x7fffe4d68a70, cliprect=0x7fffe4d68a60, state=0x7fffe4d69078, selected=0, inconsistent=0, isradio=0, direction=GTK_TEXT_DIR_LTR) at widget/src/gtk2/gtk2drawing.c:1048
#3  0x00007f5dcaf7b347 in moz_gtk_widget_paint (widget=<value optimized out>, drawable=0x1567a60, rect=0x7fffe4d68a70, cliprect=0x7fffe4d68a60, state=0x7fffe4d69078, flags=0, direction=GTK_TEXT_DIR_LTR) at widget/src/gtk2/gtk2drawing.c:3157
#4  0x00007f5dcafa5e35 in ThemeRenderer::NativeDraw (this=0x7fffe4d69070, drawable=0x1567a60, offsetX=<value optimized out>, offsetY=<value optimized out>, clipRects=<value optimized out>, numClipRects=<value optimized out>) at widget/src/gtk2/nsNativeThemeGTK.cpp:652
#5  0x00007f5dcb9172eb in NativeRendering (closure=0x7fffe4d68fd0, surface=<value optimized out>, offset_x=-30436, offset_y=-1, rectangles=0x7fffe4d68b40, num_rects=0) at gfx/thebes/src/gfxGdkNativeRenderer.cpp:67
#6  0x00007f5dcb8ef7a7 in _draw_with_xlib_direct (cr=0x1a67ca0, default_display=0x621f30, callback=0x7f5dcb917278 <NativeRendering>, closure=0x7fffe4d68fd0, bounds_width=53, bounds_height=64, capabilities=0) at gfx/thebes/src/cairo-xlib-utils.c:309
#7  0x00007f5dcb8efa9b in cairo_draw_with_gdk (cr=0x1a67ca0, callback=0x7f5dcb917278 <NativeRendering>, closure=0x7fffe4d68fd0, width=53, height=64, is_opaque=CAIRO_GDK_DRAWING_TRANSPARENT, capabilities=CAIRO_GDK_DRAWING_SUPPORTS_OFFSET, result=0x0) at gfx/thebes/src/cairo-xlib-utils.c:529
#8  0x00007f5dcb917183 in gfxGdkNativeRenderer::Draw (this=<value optimized out>, ctx=0x19a3e70, width=53, height=64, flags=3, output=0x0) at gfx/thebes/src/gfxGdkNativeRenderer.cpp:110
#9  0x00007f5dcafa72cb in nsNativeThemeGTK::DrawWidgetBackground (this=0x1115f20, aContext=<value optimized out>, aFrame=0x1a65ec0, aWidgetType=<value optimized out>, aRect=<value optimized out>, aDirtyRect=<value optimized out>) at widget/src/gtk2/nsNativeThemeGTK.cpp:803
#10 0x00007f5dc9c17a6d in nsCSSRendering::PaintBackgroundWithSC (aPresContext=0x7f5dbc065010, aRenderingContext=@0x19a3bb0, aForFrame=0x1a65ec0, aDirtyRect=@0x7f5dbc0abe58, aBorderArea=@0x7fffe4d69440, aBackground=@0x1a32100, aBorder=@0x7f5dbc0a20f0, aFlags=0, aBGClipRect=0x0) at layout/base/nsCSSRendering.cpp:2088
#11 0x00007f5dc9c17d61 in nsCSSRendering::PaintBackground (aPresContext=0x7f5dbc065010, aRenderingContext=@0x19a3bb0, aForFrame=0x1a65ec0, aDirtyRect=@0x7f5dbc0abe58, aBorderArea=@0x7fffe4d69440, aFlags=0, aBGClipRect=0x0) at layout/base/nsCSSRendering.cpp:1416
#12 0x00007f5dc9c25ffc in nsDisplayBackground::Paint (this=0x7f5dbc0abe40, aBuilder=<value optimized out>, aCtx=0x19a3bb0) at layout/base/nsDisplayList.cpp:711
#13 0x00007f5dc9c2657c in nsDisplayList::Paint (this=<value optimized out>, aBuilder=0x7fffe4d69600, aCtx=0x19a3bb0) at layout/base/nsDisplayList.cpp:415
#14 0x00007f5dc9c266df in nsDisplayClip::Paint (this=0x7f5dbc0abef8, aBuilder=0x7fffe4d69600, aCtx=0x19a3bb0) at layout/base/nsDisplayList.cpp:1195
#15 0x00007f5dc9c2657c in nsDisplayList::Paint (this=<value optimized out>, aBuilder=0x7fffe4d69600, aCtx=0x19a3bb0) at layout/base/nsDisplayList.cpp:415
#16 0x00007f5dc9c47370 in nsLayoutUtils::PaintFrame (aRenderingContext=0x19a3bb0, aFrame=0x7f5dbc0a2070, aDirtyRegion=@0x7fffe4d69b10, aBackstop=4294967295, aFlags=<value optimized out>) at layout/base/nsLayoutUtils.cpp:1195
#17 0x00007f5dc9c58737 in PresShell::Paint (this=0x7f5dbc09eab0, aView=0x7f5dbc041de0, aRenderingContext=0x19a3bb0, aDirtyRegion=@0x7fffe4d69b10) at layout/base/nsPresShell.cpp:5776
#18 0x00007f5dc9ff3c29 in nsViewManager::RenderViews (this=0x7f5dbc041d60, aView=<value optimized out>, aRC=@0x19a3bb0, aRegion=@0x7fffe4d69bd0) at view/src/nsViewManager.cpp:497
#19 0x00007f5dc9ff4a13 in nsViewManager::Refresh (this=0x7f5dbc041d60, aView=0x7f5dbc041de0, aContext=0x19a3bb0, aRegion=<value optimized out>, aUpdateFlags=1) at view/src/nsViewManager.cpp:464
#20 0x00007f5dc9ff549b in nsViewManager::DispatchEvent (this=0x7f5dbc041d60, aEvent=0x7fffe4d69f30, aView=0x7f5dbc041de0, aStatus=0x7fffe4d69e2c) at view/src/nsViewManager.cpp:934
#21 0x00007f5dc9ff0350 in HandleEvent (aEvent=0x7fffe4d69f30) at view/src/nsView.cpp:160
#22 0x00007f5dcaf8728c in nsWindow::DispatchEvent (this=0x7f5dbc04eb90, aEvent=0x7fffe4d69f30, aStatus=@0x7fffe4d6a138) at widget/src/gtk2/nsWindow.cpp:611
#23 0x00007f5dcaf84509 in nsWindow::OnExposeEvent (this=0x7f5dbc04eb90, aWidget=<value optimized out>, aEvent=0x7fffe4d6a6b0) at widget/src/gtk2/nsWindow.cpp:2555
...
(gdb) fr 2
#2  0x00007f5dcaf78cfd in moz_gtk_toggle_paint (drawable=0x1567a60, rect=0x7fffe4d68a70, cliprect=0x7fffe4d68a60, state=0x7fffe4d69078, selected=0, inconsistent=0, isradio=0, direction=GTK_TEXT_DIR_LTR) at widget/src/gtk2/gtk2drawing.c:1048
1048        NS_ASSERTION(rect->width == indicator_size,
Current language:  auto; currently c
(gdb) p rect->width
$1 = 49
(gdb) p indicator_size
$2 = 13
(gdb) list
1043        } else {
1044            moz_gtk_checkbox_get_metrics(&indicator_size, &indicator_spacing);
1045            w = gCheckboxWidget;
1046        }
1047
1048        NS_ASSERTION(rect->width == indicator_size,
1049                     "GetMinimumWidgetSize was ignored");
1050        /*
1051         * vertically center in the box, since XUL sometimes ignores our
1052         * GetMinimumWidgetSize in the vertical dimension
(gdb) p rect
$3 = (GdkRectangle *) 0x7fffe4d68a70
(gdb) p *rect
$4 = {x = 8, y = 24, width = 49, height = 60}
(gdb) info locals
state_type = GTK_STATE_NORMAL
shadow_type = GTK_SHADOW_OUT
indicator_size = 13
indicator_spacing = <value optimized out>
x = <value optimized out>
y = <value optimized out>
focus_x = <value optimized out>
focus_y = <value optimized out>
focus_width = <value optimized out>
w = (GtkWidget *) 0x683dd0
style = <value optimized out>
(gdb) fr 12
#12 0x00007f5dc9c25ffc in nsDisplayBackground::Paint (this=0x7f5dbc0abe40, aBuilder=<value optimized out>, aCtx=0x19a3bb0) at layout/base/nsDisplayList.cpp:711
711                                       flags);
Current language:  auto; currently c++
(gdb) list
706         flags |= nsCSSRendering::PAINTBG_WILL_PAINT_BORDER;
707       }
708       nsCSSRendering::PaintBackground(mFrame->PresContext(), *aCtx, mFrame,
709                                       mVisibleRect,
710                                       nsRect(offset, mFrame->GetSize()),
711                                       flags);
712     }
713
714     nsRect
715     nsDisplayBackground::GetBounds(nsDisplayListBuilder* aBuilder) {
(gdb) p *mFrame
$5 = {<nsQueryFrame> = {_vptr.nsQueryFrame = 0x7f5dca81ddc0}, static kFrameIID = nsIFrame_id, mRect = {x = 0, y = 0, width = 2940, height = 3600}, mContent = 0x1a37060, mStyleContext = 0x1a35b28, mParent = 0x1a35e38, mNextSibling = 0x0, mPrevSibling = 0x0, mState = 2097152, mOverflow = {mType = 0, mDeltas = {mLeft = 0 '\0', mTop = 0 '\0', mRight = 0 '\0', mBottom = 0 '\0'}}}
(gdb) x/aw 0x7f5dca81ddc0
0x7f5dca81ddc0 <_ZTV12nsImageFrame+16>: 0xffffffffc9cb9442
(gdb) p offset
$6 = {x = 480, y = 1440}
(gdb) p mVisibleRect
$7 = {x = 480, y = 1440, width = 2940, height = 3600}
(gdb) p mFrame->GetSize()
$8 = {width = 27680448, height = 0}
(gdb)
Attached file testcase 2
These tests all trigger the assertion, at least most of the time.

layout/generic/crashtests/382129-1.xhtml
layout/generic/crashtests/382131-1.html
view/crashtests/382756-1.xul
view/crashtests/387745-1.svg

Green: all trigger the assertions, as expected
http://tinderbox.mozilla.org/showlog.cgi?log=Firefox/1275192808.1275194314.8790.gz&fulltext=1

Orange: fewer assertions than expected
http://tinderbox.mozilla.org/showlog.cgi?log=Firefox/1275196525.1275197699.21736.gz&fulltext=1
FWIW, this assertion seems to be intermittent, see bug 569435.
Also see bug 569436.
I see the assertion during a test run of |make mozmill| TB test suite run for
a single test file.

I have not seen this before and so I am not sure what it means at all.

The error may be triggered by the influence of the other X clients that run
in the same X window session.

I have not seen this problem for a while since I started to use
Xephyr and
set an independent X window environment there.
E.g., I run this piece of code before test run.
Xephyr -ac -br -noreset -screen 1024x768 :1 &
DISPLAY=localhost:1.0
sleep 2
oclock &

|make mozmill| used this DISPLAY setting.

However, when I did NOT set this DISPLAY value and
ran the |mozmill| test for the single test target file, 
I got this immediately.
(I could repeat it.)

And then, I set DISPLAY for Xephyr as noted before, and ran
the same test, and this time, the ASSERTION was not triggered.

TIA
Testcase no longer asserts on trunk.
Status: NEW → RESOLVED
Closed: 9 years ago
Flags: in-testsuite+
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: