Open Bug 518656 Opened 11 years ago Updated 11 years ago

Changing to no style on nsCSSFrameConstructor.cpp MXR is slow

Categories

(Core :: Layout, defect)

x86
macOS
defect
Not set
normal

Tracking

()

People

(Reporter: bzbarsky, Unassigned)

References

Details

BUILD: Current trunk

STEPS TO REPRODUCE:
1) Start a separate browser process that you won't regret killing
2) Load http://mxr.mozilla.org/mozilla-central/source/layout/base/nsCSSFrameConstructor.cpp
3) View > Page Style > No Style

EXPECTED RESULTS: restyle the page

ACTUAL RESULTS: hang

ANALYSIS: The page has rules applying to all the line numbers which give them :before content.  Removing those causes us to reframe all those anchors.  That means finding frames for them all so we can remove them (O(N) because inlines don't go in the map).  That should be helped by bug 500882.  Then it means removing them from the frame tree, which is O(N) due to needing to find the previous sibling and the right line in the block.  Bug 512336 will help with the former, but finding the right line will still be O(N).  Not sure how best to approach that.  Then we create a new frame and have to find a previous sibling frame for it, which involves GetPrimaryFor on the prevsibling node (again bug 500882).  Then we do FrameNeedsReflow(), which involves finding the right line in ChildIsDirty.  Again, O(N).  I have no idea why it was showing up less than some of the other line stuff; maybe it has a smaller constant...
You need to log in before you can comment on or make changes to this bug.