Closed Bug 24352 Opened 25 years ago Closed 25 years ago

Slow rendering of deeply nested <ul>'s

Categories

(Core :: Layout, defect, P3)

defect

Tracking

()

VERIFIED DUPLICATE of bug 29515

People

(Reporter: greg-mozillabugs, Assigned: joki)

Details

(Keywords: perf)

Attachments

(2 files)

The attached HTML makes mozilla sluggish. Load the html into the browser, try to
scroll the page. Sometimes it doesn't freeze immediately, try scrolling
several times in different directions.

Tested on Win95 with 2000011808 and M12 on Solaris.
Attached file deeply nested <ul>'s
Summary: Slow layout of deeply nested <ul>'s → Slow rendering of deeply nested <ul>'s
The page lays out quickly, but it does render very slowly
Assignee: troy → joki
We seem to get stuck in GetFrameForPointUsing(). Re-assigningto Tom, and adding
stack trace from when I broke in the debugger

nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 260 + 7
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111f2e8, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111f2a0, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111f100, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111f0b8, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111ef18, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111eed0, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111ec88, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111ec40, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111eaa0, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111ea58, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111e8b8, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111e870, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111e6d0, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0111e688, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113ad78, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113ad30, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113ab90, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113ab48, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a9a8, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a960, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a7c0, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a778, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a530, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a4e8, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a348, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a300, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a160, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x0113a118, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01139f78, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01139f30, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01117450, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01117408, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01117268, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01117220, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01117080, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01117038, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01116e98, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x01116e50, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x023c2738, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x023c26f0, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x023c2550, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 292 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x023c2508, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x023c2484, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x023c2340, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsBlockFrame::GetFrameForPoint(nsBlockFrame * const 0x023c22f4, nsIPresContext *
0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398) line 5969 + 22 bytes
nsContainerFrame::GetFrameForPointUsing(nsIPresContext * 0x025fe730, const
nsPoint & {...}, nsIAtom * 0x00000000, nsIFrame * * 0x021e0398) line 267 + 27
bytes
nsContainerFrame::GetFrameForPoint(nsContainerFrame * const 0x01116074,
nsIPresContext * 0x025fe730, const nsPoint & {...}, nsIFrame * * 0x021e0398)
line 239
PresShell::HandleEvent(PresShell * const 0x021e0344, nsIView * 0x0223c250,
nsGUIEvent * 0x0012fc84, nsEventStatus * 0x0012fb90) line 2733
nsView::HandleEvent(nsView * const 0x0223c250, nsGUIEvent * 0x0012fc84, unsigned
int 8, nsEventStatus * 0x0012fb90, int & 0) line 841
nsView::HandleEvent(nsView * const 0x0223da00, nsGUIEvent * 0x0012fc84, unsigned
int 8, nsEventStatus * 0x0012fb90, int & 0) line 826
nsView::HandleEvent(nsView * const 0x021e7ae0, nsGUIEvent * 0x0012fc84, unsigned
int 28, nsEventStatus * 0x0012fb90, int & 0) line 826
nsViewManager2::DispatchEvent(nsViewManager2 * const 0x021e0d40, nsGUIEvent *
0x0012fc84, nsEventStatus * 0x0012fb90) line 1002
HandleEvent(nsGUIEvent * 0x0012fc84) line 69
nsWindow::DispatchEvent(nsWindow * const 0x0223caf4, nsGUIEvent * 0x0012fc84,
nsEventStatus & nsEventStatus_eIgnore) line 502 + 10 bytes
nsWindow::DispatchWindowEvent(nsGUIEvent * 0x0012fc84) line 523
nsWindow::DispatchMouseEvent(unsigned int 300, nsPoint * 0x00000000) line 3465 +
21 bytes
ChildWindow::DispatchMouseEvent(unsigned int 300, nsPoint * 0x00000000) line
3683
nsWindow::ProcessMessage(unsigned int 512, unsigned int 0, long 41746890, long *
0x0012fee4) line 2743 + 24 bytes
nsWindow::WindowProc(HWND__ * 0x16ff067e, unsigned int 512, unsigned int 0, long
41746890) line 689 + 27 bytes
Keywords: perf
Here's an additional URL that demonstrates the problem:
http://www.inttek.com/~jlnance/mozilla/boxsearch/scroll.html
In Ref. to attachment 5926 [details]:

1). Make sure to resize the window so that the scroll bar appears.

Note: The number of <LI>s in the test case is the minimum required to reproduce 
this problem.  
I'll take a look at this soon.
Target Milestone: M15
I hate duping lower numbered bugs onto higher ones but the other is PDT+ and 
also has lots of test cases

*** This bug has been marked as a duplicate of 29515 ***
Status: NEW → RESOLVED
Closed: 25 years ago
Resolution: --- → DUPLICATE
VERIFY duplicate
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: