Assertions in nsIFrame::GetUsedPadding() & nsIFrame::GetUsedBorder()

NEW
Unassigned

Status

()

Core
Layout
9 years ago
9 years ago

People

(Reporter: John J. Barton, Unassigned)

Tracking

Trunk
x86
Linux
Points:
---

Firefox Tracking Flags

(Not tracked)

Details

(Reporter)

Description

9 years ago
FF 3.7 debug build from source pulled 10SEP09, with patches Asserts:
###!!! ASSERTION: cannot call GetUsedPadding on a dirty frame not currently bein
g reflowed: 'nsLayoutUtils::sDisableGetUsedXAssertions || !NS_SUBTREE_DIRTY(this
) || (GetStateBits() & NS_FRAME_IN_REFLOW)', file g:/mozilla/mozilla-central/src
/layout/generic/nsFrame.cpp, line 619

Stack

ntdll.dll!_DbgBreakPoint@0() 	
>	xpcom_core.dll!Break(const char *)  Line 489	C++
 	xpcom_core.dll!NS_DebugBreak_P(unsigned int, const char *, const char *, const char *, int)  Line 354	C++
 	gklayout.dll!nsIFrame::GetUsedPadding()  Line 619	C++
 	gklayout.dll!nsIFrame::GetUsedBorderAndPadding()  Line 815	C++
 	gklayout.dll!nsLayoutUtils::GetFirstLinePosition(const nsIFrame *, nsLayoutUtils::LinePosition *)  Line 2571	C++
 	gklayout.dll!nsLayoutUtils::GetFirstLinePosition(const nsIFrame *, nsLayoutUtils::LinePosition *)  Line 2587	C++
 	gklayout.dll!nsLayoutUtils::GetFirstLineBaseline(const nsIFrame *, int *)  Line 2536	C++
 	gklayout.dll!nsTableCellFrame::GetCellBaseline()  Line 678	C++
 	gklayout.dll!nsTableRowFrame::ReflowChildren(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, nsTableFrame &, unsigned int &)  Line 959	C++
 	gklayout.dll!nsTableRowFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 1071	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsTableRowGroupFrame::ReflowChildren(nsPresContext *, nsHTMLReflowMetrics &, nsRowGroupReflowState &, unsigned int &, int *)  Line 427	C++
 	gklayout.dll!nsTableRowGroupFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 1331	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsTableFrame::ReflowChildren(nsTableReflowState &, unsigned int &, nsIFrame * &, nsRect &)  Line 2860	C++
 	gklayout.dll!nsTableFrame::ReflowTable(nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, nsIFrame * &, unsigned int &)  Line 1912	C++
 	gklayout.dll!nsTableFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 1817	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsTableOuterFrame::OuterDoReflowChild(nsPresContext *, nsIFrame *, const nsHTMLReflowState &, nsHTMLReflowMetrics &, unsigned int &)  Line 1009	C++
 	gklayout.dll!nsTableOuterFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 1150	C++
 	gklayout.dll!nsBlockReflowContext::ReflowBlock(const nsRect &, int, nsCollapsingMargin &, int, int, nsLineBox *, nsHTMLReflowState &, unsigned int &, nsBlockReflowState &)  Line 310	C++
 	gklayout.dll!nsBlockFrame::ReflowBlockFrame(nsBlockReflowState &, nsLineList_iterator, int *)  Line 3072	C++
 	gklayout.dll!nsBlockFrame::ReflowLine(nsBlockReflowState &, nsLineList_iterator, int *)  Line 2348	C++
 	gklayout.dll!nsBlockFrame::ReflowDirtyLines(nsBlockReflowState &)  Line 1874	C++
 	gklayout.dll!nsBlockFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 983	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsHTMLScrollFrame::ReflowScrolledFrame(ScrollReflowState *, int, int, nsHTMLReflowMetrics *, int)  Line 543	C++
 	gklayout.dll!nsHTMLScrollFrame::ReflowContents(ScrollReflowState *, const nsHTMLReflowMetrics &)  Line 637	C++
 	gklayout.dll!nsHTMLScrollFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 838	C++
 	gklayout.dll!nsAbsoluteContainingBlock::ReflowAbsoluteFrame(nsIFrame *, nsPresContext *, const nsHTMLReflowState &, int, int, int, nsIFrame *, unsigned int &, nsRect *)  Line 468	C++
 	gklayout.dll!nsAbsoluteContainingBlock::Reflow(nsContainerFrame *, nsPresContext *, const nsHTMLReflowState &, unsigned int &, int, int, int, int, int, nsRect *)  Line 158	C++
 	gklayout.dll!CanvasFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 731	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsHTMLScrollFrame::ReflowScrolledFrame(ScrollReflowState *, int, int, nsHTMLReflowMetrics *, int)  Line 543	C++
 	gklayout.dll!nsHTMLScrollFrame::ReflowContents(ScrollReflowState *, const nsHTMLReflowMetrics &)  Line 637	C++
 	gklayout.dll!nsHTMLScrollFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 838	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!ViewportFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 282	C++
 	gklayout.dll!PresShell::DoReflow(nsIFrame *, int)  Line 7085	C++
 	gklayout.dll!PresShell::ProcessReflowCommands(int)  Line 7205	C++
 	gklayout.dll!PresShell::FlushPendingNotifications(mozFlushType)  Line 4762	C++
 	gklayout.dll!PresShell::WillPaint()  Line 6718	C++
 	gklayout.dll!nsViewManager::FlushPendingInvalidates()  Line 2028	C++
 	gklayout.dll!nsViewManager::EnableRefresh(unsigned int)  Line 1754	C++
 	gklayout.dll!nsViewManager::EndUpdateViewBatch(unsigned int)  Line 1794	C++
 	gklayout.dll!nsIViewManager::UpdateViewBatch::EndUpdateViewBatch(unsigned int)  Line 390	C++
 	gklayout.dll!nsViewManager::DispatchEvent(nsGUIEvent *, nsIView *, nsEventStatus *)  Line 968	C++
 	gklayout.dll!HandleEvent(nsGUIEvent *)  Line 168	C++
 	gkwidget.dll!nsWindow::DispatchEvent(nsGUIEvent *, nsEventStatus &)  Line 2763	C++
 	gkwidget.dll!nsWindow::DispatchWindowEvent(nsGUIEvent *, nsEventStatus &)  Line 2792	C++
 	gkwidget.dll!nsWindow::OnPaint(HDC__ *)  Line 509	C++
 	gkwidget.dll!nsWindow::ProcessMessage(unsigned int, unsigned int &, long &, long *)  Line 3669	C++
 	gkwidget.dll!nsWindow::WindowProc(HWND__ *, unsigned int, unsigned int, long)  Line 3374	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_DispatchClientMessage@20() 	
 	user32.dll!___fnDWORD@4() 	
 	ntdll.dll!_KiUserCallbackDispatcher@12() 	
 	user32.dll!_NtUserCallHwndLock@8() 	
 	gkwidget.dll!nsWindow::DispatchStarvedPaints(HWND__ *, long)  Line 2895	C++
 	user32.dll!_InternalEnumWindows@24() 	
 	user32.dll!_EnumChildWindows@12() 	
 	gkwidget.dll!nsWindow::DispatchPendingEvents()  Line 2935	C++
 	gkwidget.dll!nsWindow::ProcessMessage(unsigned int, unsigned int &, long &, long *)  Line 3780	C++
 	gkwidget.dll!nsWindow::WindowProc(HWND__ *, unsigned int, unsigned int, long)  Line 3374	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_DispatchMessageWorker@8() 	
 	user32.dll!_DispatchMessageW@4() 	
 	gkwidget.dll!nsAppShell::ProcessNextNativeEvent(int)  Line 166	C++
 	gkwidget.dll!nsBaseAppShell::DoProcessNextNativeEvent(int)  Line 151	C++
 	gkwidget.dll!nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal *, int, unsigned int)  Line 278	C++
 	xpcom_core.dll!nsThread::ProcessNextEvent(int, int *)  Line 510	C++
 	xpcom_core.dll!NS_ProcessNextEvent_P(nsIThread *, int)  Line 230	C++
 	gkwidget.dll!nsBaseAppShell::Run()  Line 170	C++
 	tkitcmps.dll!nsAppStartup::Run()  Line 182	C++
 	xul.dll!XRE_main(int, char * *, const nsXREAppData *)  Line 3479	C++
 	firefox.exe!NS_internal_main(int, char * *)  Line 156	C++
 	firefox.exe!wmain(int, unsigned short * *)  Line 110	C++
 	firefox.exe!__tmainCRTStartup()  Line 583	C
 	firefox.exe!wmainCRTStartup()  Line 403	C
 	kernel32.dll!_BaseProcessStart@4()
(Reporter)

Comment 1

9 years ago
That assert alternates with this one:



###!!! ASSERTION: cannot call GetUsedBorder on a dirty frame not currently being
 reflowed: 'nsLayoutUtils::sDisableGetUsedXAssertions || !NS_SUBTREE_DIRTY(this)
 || (GetStateBits() & NS_FRAME_IN_REFLOW)', file g:/mozilla/mozilla-central/src/
layout/generic/nsFrame.cpp, line 591

 	ntdll.dll!_DbgBreakPoint@0() 	
>	xpcom_core.dll!Break(const char *)  Line 489	C++
 	xpcom_core.dll!NS_DebugBreak_P(unsigned int, const char *, const char *, const char *, int)  Line 354	C++
 	gklayout.dll!nsIFrame::GetUsedBorder()  Line 591	C++
 	gklayout.dll!nsIFrame::GetUsedBorderAndPadding()  Line 815	C++
 	gklayout.dll!nsLayoutUtils::GetFirstLinePosition(const nsIFrame *, nsLayoutUtils::LinePosition *)  Line 2571	C++
 	gklayout.dll!nsLayoutUtils::GetFirstLinePosition(const nsIFrame *, nsLayoutUtils::LinePosition *)  Line 2587	C++
 	gklayout.dll!nsLayoutUtils::GetFirstLineBaseline(const nsIFrame *, int *)  Line 2536	C++
 	gklayout.dll!nsTableCellFrame::GetCellBaseline()  Line 678	C++
 	gklayout.dll!nsTableRowFrame::CalcHeight(const nsHTMLReflowState &)  Line 561	C++
 	gklayout.dll!nsTableRowFrame::ReflowChildren(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, nsTableFrame &, unsigned int &)  Line 1009	C++
 	gklayout.dll!nsTableRowFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 1071	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsTableRowGroupFrame::ReflowChildren(nsPresContext *, nsHTMLReflowMetrics &, nsRowGroupReflowState &, unsigned int &, int *)  Line 427	C++
 	gklayout.dll!nsTableRowGroupFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 1331	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsTableFrame::ReflowChildren(nsTableReflowState &, unsigned int &, nsIFrame * &, nsRect &)  Line 2860	C++
 	gklayout.dll!nsTableFrame::ReflowTable(nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, nsIFrame * &, unsigned int &)  Line 1912	C++
 	gklayout.dll!nsTableFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 1817	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsTableOuterFrame::OuterDoReflowChild(nsPresContext *, nsIFrame *, const nsHTMLReflowState &, nsHTMLReflowMetrics &, unsigned int &)  Line 1009	C++
 	gklayout.dll!nsTableOuterFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 1150	C++
 	gklayout.dll!nsBlockReflowContext::ReflowBlock(const nsRect &, int, nsCollapsingMargin &, int, int, nsLineBox *, nsHTMLReflowState &, unsigned int &, nsBlockReflowState &)  Line 310	C++
 	gklayout.dll!nsBlockFrame::ReflowBlockFrame(nsBlockReflowState &, nsLineList_iterator, int *)  Line 3072	C++
 	gklayout.dll!nsBlockFrame::ReflowLine(nsBlockReflowState &, nsLineList_iterator, int *)  Line 2348	C++
 	gklayout.dll!nsBlockFrame::ReflowDirtyLines(nsBlockReflowState &)  Line 1874	C++
 	gklayout.dll!nsBlockFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 983	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsHTMLScrollFrame::ReflowScrolledFrame(ScrollReflowState *, int, int, nsHTMLReflowMetrics *, int)  Line 543	C++
 	gklayout.dll!nsHTMLScrollFrame::ReflowContents(ScrollReflowState *, const nsHTMLReflowMetrics &)  Line 637	C++
 	gklayout.dll!nsHTMLScrollFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 838	C++
 	gklayout.dll!nsAbsoluteContainingBlock::ReflowAbsoluteFrame(nsIFrame *, nsPresContext *, const nsHTMLReflowState &, int, int, int, nsIFrame *, unsigned int &, nsRect *)  Line 468	C++
 	gklayout.dll!nsAbsoluteContainingBlock::Reflow(nsContainerFrame *, nsPresContext *, const nsHTMLReflowState &, unsigned int &, int, int, int, int, int, nsRect *)  Line 158	C++
 	gklayout.dll!CanvasFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 731	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!nsHTMLScrollFrame::ReflowScrolledFrame(ScrollReflowState *, int, int, nsHTMLReflowMetrics *, int)  Line 543	C++
 	gklayout.dll!nsHTMLScrollFrame::ReflowContents(ScrollReflowState *, const nsHTMLReflowMetrics &)  Line 637	C++
 	gklayout.dll!nsHTMLScrollFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 838	C++
 	gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *)  Line 791	C++
 	gklayout.dll!ViewportFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &)  Line 282	C++
 	gklayout.dll!PresShell::DoReflow(nsIFrame *, int)  Line 7085	C++
 	gklayout.dll!PresShell::ProcessReflowCommands(int)  Line 7205	C++
 	gklayout.dll!PresShell::FlushPendingNotifications(mozFlushType)  Line 4762	C++
 	gklayout.dll!PresShell::WillPaint()  Line 6718	C++
 	gklayout.dll!nsViewManager::FlushPendingInvalidates()  Line 2028	C++
 	gklayout.dll!nsViewManager::EnableRefresh(unsigned int)  Line 1754	C++
 	gklayout.dll!nsViewManager::EndUpdateViewBatch(unsigned int)  Line 1794	C++
 	gklayout.dll!nsIViewManager::UpdateViewBatch::EndUpdateViewBatch(unsigned int)  Line 390	C++
 	gklayout.dll!nsViewManager::DispatchEvent(nsGUIEvent *, nsIView *, nsEventStatus *)  Line 968	C++
 	gklayout.dll!HandleEvent(nsGUIEvent *)  Line 168	C++
 	gkwidget.dll!nsWindow::DispatchEvent(nsGUIEvent *, nsEventStatus &)  Line 2763	C++
 	gkwidget.dll!nsWindow::DispatchWindowEvent(nsGUIEvent *, nsEventStatus &)  Line 2792	C++
 	gkwidget.dll!nsWindow::OnPaint(HDC__ *)  Line 509	C++
 	gkwidget.dll!nsWindow::ProcessMessage(unsigned int, unsigned int &, long &, long *)  Line 3669	C++
 	gkwidget.dll!nsWindow::WindowProc(HWND__ *, unsigned int, unsigned int, long)  Line 3374	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_DispatchClientMessage@20() 	
 	user32.dll!___fnDWORD@4() 	
 	ntdll.dll!_KiUserCallbackDispatcher@12() 	
 	user32.dll!_NtUserCallHwndLock@8() 	
 	gkwidget.dll!nsWindow::DispatchStarvedPaints(HWND__ *, long)  Line 2895	C++
 	user32.dll!_InternalEnumWindows@24() 	
 	user32.dll!_EnumChildWindows@12() 	
 	gkwidget.dll!nsWindow::DispatchPendingEvents()  Line 2935	C++
 	gkwidget.dll!nsWindow::ProcessMessage(unsigned int, unsigned int &, long &, long *)  Line 3780	C++
 	gkwidget.dll!nsWindow::WindowProc(HWND__ *, unsigned int, unsigned int, long)  Line 3374	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_DispatchMessageWorker@8() 	
 	user32.dll!_DispatchMessageW@4() 	
 	gkwidget.dll!nsAppShell::ProcessNextNativeEvent(int)  Line 166	C++
 	gkwidget.dll!nsBaseAppShell::DoProcessNextNativeEvent(int)  Line 151	C++
 	gkwidget.dll!nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal *, int, unsigned int)  Line 278	C++
 	xpcom_core.dll!nsThread::ProcessNextEvent(int, int *)  Line 510	C++
 	xpcom_core.dll!NS_ProcessNextEvent_P(nsIThread *, int)  Line 230	C++
 	gkwidget.dll!nsBaseAppShell::Run()  Line 170	C++
 	tkitcmps.dll!nsAppStartup::Run()  Line 182	C++
 	xul.dll!XRE_main(int, char * *, const nsXREAppData *)  Line 3479	C++
 	firefox.exe!NS_internal_main(int, char * *)  Line 156	C++
 	firefox.exe!wmain(int, unsigned short * *)  Line 110	C++
 	firefox.exe!__tmainCRTStartup()  Line 583	C
 	firefox.exe!wmainCRTStartup()  Line 403	C
 	kernel32.dll!_BaseProcessStart@4()
Hmm.  I wonder whether we're interrupting inside the table cell or something...  Need to think about this.
Blocks: 67752
Component: General → Layout
QA Contact: general → layout
(Reporter)

Comment 3

9 years ago
These come in batches when I switch tabs in Chromebug. Might be the Tracing panel; so it might show up in Firebug's tracing window which would make a much easier repro case. I'll check that next week.
Hmm.  Are these happening in a _chrome_ document then?  In your PresShell::DoReflow, what's the mDocumentURI of the presshell's mDocument?
I guess we interrupt chrome documents in any case, so that shouldn't matter.  Still need to look at the code per comment 2.
You need to log in before you can comment on or make changes to this bug.