Closed Bug 60444 Opened 24 years ago Closed 23 years ago

lines of text reflows a lot faster than lines of <span>text</span>

Categories

(Core :: Layout, defect, P1)

x86
All
defect

Tracking

()

RESOLVED DUPLICATE of bug 42138
mozilla0.9.2

People

(Reporter: wenn0029, Assigned: waterson)

References

()

Details

(4 keywords)

From Bugzilla Helper:
User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001116
BuildID:    2000111604

Complete lockup.

Reproducible: Always
Steps to Reproduce:
goto http://userpages.aug.com/sgraham/


Actual Results:  Total crash.

Expected Results:  Ummm, not crash.
Confirming that the browser hangs at that site (linux trunk 2000-11-16 CVS
build).  I interrupted execution and dumped a stack trace.  It's obviously in an
infinite loop:

#0  nsBlockFrame::RenumberListsFor (this=0x8e65308, aPresContext=0x83f2b58,
    aKid=0x8f24050, aOrdinal=0xbfffc760, aDepth=69) at nsBlockFrame.cpp:7060
#1  0x41187c78 in nsBlockFrame::RenumberListsIn (this=0x8e65308,
aPresContext=0x83f2b58,
    aContainerFrame=0x8f24088, aOrdinal=0xbfffc760, aDepth=69) at
nsBlockFrame.cpp:7031
#2  0x41187e0a in nsBlockFrame::RenumberListsFor (this=0x8e65308,
    aPresContext=0x83f2b58, aKid=0x8f24088, aOrdinal=0xbfffc760, aDepth=68)
    at nsBlockFrame.cpp:7111
#3  0x41187c78 in nsBlockFrame::RenumberListsIn (this=0x8e65308,
aPresContext=0x83f2b58,
    aContainerFrame=0x8f240c0, aOrdinal=0xbfffc760, aDepth=68) at
nsBlockFrame.cpp:7031
#4  0x41187e0a in nsBlockFrame::RenumberListsFor (this=0x8e65308,
    aPresContext=0x83f2b58, aKid=0x8f240c0, aOrdinal=0xbfffc760, aDepth=67)
    at nsBlockFrame.cpp:7111


... continues in this fashion for 65 levels more ....


#135 0x41187c78 in nsBlockFrame::RenumberListsIn (this=0x8e65308,
    aPresContext=0x83f2b58, aContainerFrame=0x8e6538c, aOrdinal=0xbfffc760,
aDepth=2)
    at nsBlockFrame.cpp:7031
#136 0x41187e0a in nsBlockFrame::RenumberListsFor (this=0x8e65308,
    aPresContext=0x83f2b58, aKid=0x8e6538c, aOrdinal=0xbfffc760, aDepth=1)
    at nsBlockFrame.cpp:7111
#137 0x41187c78 in nsBlockFrame::RenumberListsIn (this=0x8e65308,
    aPresContext=0x83f2b58, aContainerFrame=0x8e65354, aOrdinal=0xbfffc760,
aDepth=1)
    at nsBlockFrame.cpp:7031
#138 0x41187e0a in nsBlockFrame::RenumberListsFor (this=0x8e65308,
    aPresContext=0x83f2b58, aKid=0x8e65354, aOrdinal=0xbfffc760, aDepth=0)
    at nsBlockFrame.cpp:7111
#139 0x41187bc8 in nsBlockFrame::RenumberListsInBlock (this=0x8e65308,
    aPresContext=0x83f2b58, aBlockFrame=0x8e65308, aOrdinal=0xbfffc760, aDepth=0)
    at nsBlockFrame.cpp:6998
#140 0x41187b65 in nsBlockFrame::RenumberLists (this=0x8e65308,
aPresContext=0x83f2b58)
    at nsBlockFrame.cpp:6980
#141 0x4117cb8a in nsBlockFrame::Reflow (this=0x8e65308, aPresContext=0x83f2b58,
    aMetrics=@0xbfffd048, aReflowState=@0xbfffce30, aStatus=@0xbfffcf44)
    at nsBlockFrame.cpp:1616#142 0x41188d43 in
nsBlockReflowContext::DoReflowBlock (this=0xbfffd008,
    aReflowState=@0xbfffce30, aReason=eReflowReason_Incremental, aFrame=0x8e65308,
    aSpace=@0xbfffcf5c, aApplyTopMargin=1, aPrevBottomMargin=240,
aIsAdjacentWithTop=0,
    aComputedOffsets=@0xbfffcf6c, aFrameReflowStatus=@0xbfffcf44)
    at nsBlockReflowContext.cpp:561
#143 0x411887a0 in nsBlockReflowContext::ReflowBlock (this=0xbfffd008,
aFrame=0x8e65308,
    aSpace=@0xbfffcf5c, aApplyTopMargin=1, aPrevBottomMargin=240,
aIsAdjacentWithTop=0,
    aComputedOffsets=@0xbfffcf6c, aFrameReflowStatus=@0xbfffcf44)
    at nsBlockReflowContext.cpp:331
#144 0x41180eb9 in nsBlockFrame::ReflowBlockFrame (this=0x81e08c8,
aState=@0xbfffd3d0,
    aLine=0x8e66b4c, aKeepReflowGoing=0xbfffd138) at nsBlockFrame.cpp:3879
#145 0x4117f9c2 in nsBlockFrame::ReflowLine (this=0x81e08c8, aState=@0xbfffd3d0,
    aLine=0x8e66b4c, aKeepReflowGoing=0xbfffd138, aDamageDirtyArea=1)
    at nsBlockFrame.cpp:3142
#146 0x4117f39d in nsBlockFrame::ReflowDirtyLines (this=0x81e08c8,
aState=@0xbfffd3d0)
    at nsBlockFrame.cpp:2949
#147 0x4117d056 in nsBlockFrame::Reflow (this=0x81e08c8, aPresContext=0x83f2b58,
    aMetrics=@0xbfffd9c0, aReflowState=@0xbfffd7a8, aStatus=@0xbfffd8bc)
    at nsBlockFrame.cpp:1740
#148 0x41188d43 in nsBlockReflowContext::DoReflowBlock (this=0xbfffd980,
    aReflowState=@0xbfffd7a8, aReason=eReflowReason_Incremental, aFrame=0x81e08c8,
    aSpace=@0xbfffd8d4, aApplyTopMargin=1, aPrevBottomMargin=240,
aIsAdjacentWithTop=0,
    aComputedOffsets=@0xbfffd8e4, aFrameReflowStatus=@0xbfffd8bc)
    at nsBlockReflowContext.cpp:561
#149 0x411887a0 in nsBlockReflowContext::ReflowBlock (this=0xbfffd980,
aFrame=0x81e08c8,
    aSpace=@0xbfffd8d4, aApplyTopMargin=1, aPrevBottomMargin=240,
aIsAdjacentWithTop=0,
    aComputedOffsets=@0xbfffd8e4, aFrameReflowStatus=@0xbfffd8bc)
    at nsBlockReflowContext.cpp:331
#150 0x41180eb9 in nsBlockFrame::ReflowBlockFrame (this=0x8728a80,
aState=@0xbfffdd48,
    aLine=0x8e66c5c, aKeepReflowGoing=0xbfffdab0) at nsBlockFrame.cpp:3879
#151 0x4117f9c2 in nsBlockFrame::ReflowLine (this=0x8728a80, aState=@0xbfffdd48,
    aLine=0x8e66c5c, aKeepReflowGoing=0xbfffdab0, aDamageDirtyArea=1)
    at nsBlockFrame.cpp:3142
#152 0x4117f39d in nsBlockFrame::ReflowDirtyLines (this=0x8728a80,
aState=@0xbfffdd48)

    at nsBlockFrame.cpp:2949
#153 0x4117d056 in nsBlockFrame::Reflow (this=0x8728a80, aPresContext=0x83f2b58,
    aMetrics=@0xbfffe338, aReflowState=@0xbfffe120, aStatus=@0xbfffe234)
    at nsBlockFrame.cpp:1740
#154 0x41188d43 in nsBlockReflowContext::DoReflowBlock (this=0xbfffe2f8,
    aReflowState=@0xbfffe120, aReason=eReflowReason_Incremental, aFrame=0x8728a80,
    aSpace=@0xbfffe24c, aApplyTopMargin=1, aPrevBottomMargin=0,
aIsAdjacentWithTop=1,
    aComputedOffsets=@0xbfffe25c, aFrameReflowStatus=@0xbfffe234)
    at nsBlockReflowContext.cpp:561
#155 0x411887a0 in nsBlockReflowContext::ReflowBlock (this=0xbfffe2f8,
aFrame=0x8728a80,
    aSpace=@0xbfffe24c, aApplyTopMargin=1, aPrevBottomMargin=0,
aIsAdjacentWithTop=1,
    aComputedOffsets=@0xbfffe25c, aFrameReflowStatus=@0xbfffe234)
    at nsBlockReflowContext.cpp:331
#156 0x41180eb9 in nsBlockFrame::ReflowBlockFrame (this=0x87289f8,
aState=@0xbfffe6c0,
    aLine=0x8728af4, aKeepReflowGoing=0xbfffe428) at nsBlockFrame.cpp:3879
#157 0x4117f9c2 in nsBlockFrame::ReflowLine (this=0x87289f8, aState=@0xbfffe6c0,
    aLine=0x8728af4, aKeepReflowGoing=0xbfffe428, aDamageDirtyArea=1)
    at nsBlockFrame.cpp:3142
#158 0x4117f39d in nsBlockFrame::ReflowDirtyLines (this=0x87289f8,
aState=@0xbfffe6c0)
    at nsBlockFrame.cpp:2949
#159 0x4117d056 in nsBlockFrame::Reflow (this=0x87289f8, aPresContext=0x83f2b58,
    aMetrics=@0xbfffeb18, aReflowState=@0xbfffea74, aStatus=@0xbfffed5c)
    at nsBlockFrame.cpp:1740
#160 0x4118c3a5 in nsContainerFrame::ReflowChild (this=0x8727b74,
aKidFrame=0x87289f8,
    aPresContext=0x83f2b58, aDesiredSize=@0xbfffeb18, aReflowState=@0xbfffea74,
aX=0,
    aY=0, aFlags=0, aStatus=@0xbfffed5c) at nsContainerFrame.cpp:693
#161 0x411a83c1 in CanvasFrame::Reflow (this=0x8727b74, aPresContext=0x83f2b58,
    aDesiredSize=@0xbfffed6c, aReflowState=@0xbfffebc4, aStatus=@0xbfffed5c)
    at nsHTMLFrame.cpp:301
#162 0x41420bb4 in nsBoxToBlockAdaptor::Reflow (this=0x872898c, aState=@0xbffff0f8,
    aPresContext=0x83f2b58, aDesiredSize=@0xbfffed6c, aReflowState=@0xbffff2ec,
    aStatus=@0xbfffed5c, aX=0, aY=0, aWidth=7605, aHeight=7665, aMoveFrame=1)
    at nsBoxToBlockAdaptor.cpp:866
#163 0x41420513 in nsBoxToBlockAdaptor::DoLayout (this=0x872898c,
aState=@0xbffff0f8)    at nsBoxToBlockAdaptor.cpp:525
#164 0x4141d5fc in nsBox::Layout (this=0x872898c, aState=@0xbffff0f8) at
nsBox.cpp:1000
#165 0x413fd063 in nsScrollBoxFrame::DoLayout (this=0x8727c54, aState=@0xbffff0f8)
    at nsScrollBoxFrame.cpp:377
#166 0x4141d5fc in nsBox::Layout (this=0x8727c8c, aState=@0xbffff0f8) at
nsBox.cpp:1000
#167 0x41422a91 in nsContainerBox::LayoutChildAt (aState=@0xbffff0f8,
aBox=0x8727c8c,
    aRect=@0xbfffeffc) at nsContainerBox.cpp:593
#168 0x411f8326 in nsGfxScrollFrameInner::LayoutBox (this=0x8729118,
aState=@0xbffff0f8,
    aBox=0x8727c8c, aRect=@0xbfffeffc) at nsGfxScrollFrame.cpp:1029
#169 0x411f852f in nsGfxScrollFrameInner::Layout (this=0x8729118,
aState=@0xbffff0f8)
    at nsGfxScrollFrame.cpp:1109
#170 0x411f8367 in nsGfxScrollFrame::DoLayout (this=0x8727bac, aState=@0xbffff0f8)
    at nsGfxScrollFrame.cpp:1037
#171 0x4141d5fc in nsBox::Layout (this=0x8727be4, aState=@0xbffff0f8) at
nsBox.cpp:1000
#172 0x414312e2 in nsBoxFrame::Reflow (this=0x8727bac, aPresContext=0x83f2b58,
    aDesiredSize=@0xbffff398, aReflowState=@0xbffff2ec, aStatus=@0xbffff410)
    at nsBoxFrame.cpp:786
#173 0x411f76f2 in nsGfxScrollFrame::Reflow (this=0x8727bac,
aPresContext=0x83f2b58,
    aDesiredSize=@0xbffff398, aReflowState=@0xbffff2ec, aStatus=@0xbffff410)
    at nsGfxScrollFrame.cpp:741
#174 0x4118c3a5 in nsContainerFrame::ReflowChild (this=0x8727b38,
aKidFrame=0x8727bac,
    aPresContext=0x83f2b58, aDesiredSize=@0xbffff398, aReflowState=@0xbffff2ec,
aX=0,
    aY=0, aFlags=0, aStatus=@0xbffff410) at nsContainerFrame.cpp:693
#175 0x411f5465 in ViewportFrame::Reflow (this=0x8727b38, aPresContext=0x83f2b58,
    aDesiredSize=@0xbffff53c, aReflowState=@0xbffff420, aStatus=@0xbffff410)
    at nsViewportFrame.cpp:545
#176 0x411a9bc7 in nsHTMLReflowCommand::Dispatch (this=0x8e6d7b8,
    aPresContext=0x83f2b58, aDesiredSize=@0xbffff53c, aMaxSize=@0xbffff534,
    aRendContext=@0x8e6d438) at nsHTMLReflowCommand.cpp:145
#177 0x411dac0a in PresShell::ProcessReflowCommands (this=0x86f1ab8,
aInterruptible=1)
    at nsPresShell.cpp:5105
#178 0x411da433 in HandlePLEvent (aEvent=0x8d08510) at nsPresShell.cpp:4986
#179 0x400f0f5e in PL_HandleEvent (self=0x8d08510) at plevent.c:576
#180 0x400f0df9 in PL_ProcessPendingEvents (self=0x80a5d68) at plevent.c:509#181
0x400f2a50 in nsEventQueueImpl::ProcessPendingEvents (this=0x80a5d40)
    at nsEventQueue.cpp:356
#182 0x406b4daf in event_processor_callback (data=0x80a5d40, source=8,
    condition=GDK_INPUT_READ) at nsAppShell.cpp:158
#183 0x406b4a6d in our_gdk_io_invoke (source=0x81c6180, condition=G_IO_IN,
    data=0x81f54d8) at nsAppShell.cpp:58
#184 0x4086eaca in g_io_unix_dispatch () from /usr/lib/libglib-1.2.so.0
#185 0x40870186 in g_main_dispatch () from /usr/lib/libglib-1.2.so.0
#186 0x40870751 in g_main_iterate () from /usr/lib/libglib-1.2.so.0
#187 0x408708f1 in g_main_run () from /usr/lib/libglib-1.2.so.0
#188 0x40798c69 in gtk_main () from /usr/lib/libgtk-1.2.so.0
#189 0x406b5984 in nsAppShell::Run (this=0x80af1f8) at nsAppShell.cpp:335
#190 0x405d4fb5 in nsAppShellService::Run (this=0x80ac700) at
nsAppShellService.cpp:407
#191 0x80523fb in main1 (argc=1, argv=0xbffff8c4, nativeApp=0x0) at
nsAppRunner.cpp:1015
#192 0x8052d26 in main (argc=1, argv=0xbffff8c4) at nsAppRunner.cpp:1255
#193 0x403009cb in __libc_start_main (main=0x8052ba0 <main>, argc=1,
argv=0xbffff8c4,
    init=0x804c244 <_init>, fini=0x805edcc <_fini>, rtld_fini=0x4000ae60
<_dl_fini>,
    stack_end=0xbffff8bc) at ../sysdeps/generic/libc-start.c:92

Confirming. Also appears in Netscape 6. Browser hangs after the page is almost
completely loaded. Does not crash.
Status: UNCONFIRMED → NEW
Ever confirmed: true
nsBlockFrame is layout, moving to it. Will try to testcase this. Making os all,
crash keyword
Assignee: asa → clayton
Component: Browser-General → Layout
Keywords: crash
OS: Windows 98 → All
QA Contact: doronr → petersen
made the summary a bit more descriptive.  If someone could minimize the test
case, that would be a big help.
Assignee: clayton → buster
Priority: P3 → P1
Summary: Total browser crash → browser hangs in layout at this page
I just tried this out with Build 2000111808 on Win32 (Win2000) as I was going 
to try and find a minimal test case, and although mozilla does suck up 42MB of 
RAM while rendering this page, it doesn't hang my machine or go into an 
infinite loop.  Takes about 6, maybe 7 seconds to render (dual p3/800).
this is an {ib} preformance problem.  since it looks like a hang, I'll leave the
crash keyword in place, but it really is still making progress.
the code that is causing us grief is in nsBlockFrame::RenumberListsFor()
see
http://lxr.mozilla.org/seamonkey/source/layout/html/base/src/nsBlockFrame.cpp#7100

the comment for this code says:
    // XXX temporary code: after ib work is done in frame construction
    // code this can be removed.

unfortunately, it doesn't say exactly *what* ib work in frame construction needs
to be done before this code can get the ax.
the comment for this code says:
http://lxr.mozilla.org/seamonkey/source/layout/html/base/src/nsBlockFrame.cpp#7100

Assignee: buster → waterson
Keywords: perf
Summary: browser hangs in layout at this page → {ib} browser hangs in layout at this page
*** Bug 59834 has been marked as a duplicate of this bug. ***
this bug really needs a reduced test case
Keywords: helpwanted, qawanted
Performance loss to debug code is one thing, but this is rediculous. My celeron
333a uniprocessor system took *8 minutes* to finish rendering
http://userpages.aug.com/sgraham/news.html
Mozilla appeared totally locked up until it finished.
Keywords: crashfreeze
buster: I'm on it.
Keywords: freezehang
Summary: {ib} browser hangs in layout at this page → {ib} browser appears to hang in layout at this page
Removing all the <font> tags solved the problem. Doing more investigation...
Changing all <ul>, <ol> and <li> tags to <div>s massively improved matters.
That would be bug 42138 (thanks tor).

I'm trying to see if there is some other issue here (since even after that the
page still takes a few seconds to reflow).
Comparing these two "reduced" test cases:
   http://www.hixie.ch/tests/perf/001.html
   http://www.hixie.ch/tests/perf/002.html
...one sees the only other major issue that I believe is visible on this page,
namely that lines and lines of pure text reflow a LOT faster than lines and 
lines of <span>s containing pure text.

If required, I can change those test cases into customisable CGI scripts.

Removing "qawanted" since there are now two reduced test cases -- the one in
bug 42138 for the unclosed <font> bug, and the ones above for the pathological
case of lots and lots of text enclosed in <span> elements in one block. If more
QA work is required please put it back in and ping me, thanks! :-)
Depends on: 42138
Keywords: qawanted
Keywords: testcase
*** Bug 61159 has been marked as a duplicate of this bug. ***
cc'ing eric who has the assignee for bug 61159
Summary: {ib} browser appears to hang in layout at this page → lines of text reflows a lot faster than lines of <span>text</span>
Waterson:

any progress on this bug?  It may be as simple as removing some unneeded code,
but I can't tell for sure.  See my comment on 2000-12-13 14:03.
Depends on: 68179
Moving to m0.9
Target Milestone: --- → mozilla0.9
End-of-milestone reality check.
Target Milestone: mozilla0.9 → mozilla0.9.1
Blocks: 77421
Status: NEW → ASSIGNED
Target Milestone: mozilla0.9.1 → mozilla0.9.2
Ok, the fix for this is attached to bug 42138. Marking as a dup.

*** This bug has been marked as a duplicate of 42138 ***
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
No longer depends on: 42138
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.