Bug 52832

Summary: New float positioning is O(k*n^2) for n k-height floats
Product: WebKit Reporter: mitz
Component: Layout and RenderingAssignee: Dave Hyatt <hyatt>
Status: ASSIGNED    
Severity: Normal CC: ahmad.saleem792, hyatt, joepeck, koivisto, sam, simon.fraser, zalan
Priority: P2 Keywords: InRadar
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Attachments:
Description Flags
This would help? none

mitz
Reported 2011-01-20 12:24:38 PST
<rdar://problem/8534202> Positioning a single new float is pretty bad. It is as bad as O(k*n) where n is the number of already-placed floats and k is the height of the last float. The *RelOffset() is O(n) and the inner while loop in positionNewFloats() can end up calling *RelOffset() up to k times, since strangely if there are no interfering floats on one side, the remainingHeight for that side is set to 1, and so we advance k times. That’s just bizarre. So we end up with positioning n floats being O(k*n^2).
Attachments
This would help? (1.36 KB, patch)
2011-03-22 13:26 PDT, Dave Hyatt
no flags
Dave Hyatt
Comment 1 2011-03-22 13:26:18 PDT
Created attachment 86497 [details] This would help?
Ahmad Saleem
Comment 2 2023-09-27 16:03:56 PDT
@Alan - is this optimisation still applicable or required? We don't have it applied: https://searchfox.org/wubkat/source/Source/WebCore/rendering/RenderBlockFlow.cpp#2721 if (RenderStyle::usedFloat(childBox) == UsedFloat::Left) { LayoutUnit heightRemainingLeft = 1_lu; LayoutUnit heightRemainingRight = 1_lu;
alan
Comment 3 2023-09-28 07:05:35 PDT
This change may not help too much anymore as most of the floats are positioned by LFC's FloatingContext but the bug report may still be valid (for the new float code).
Note You need to log in before you can comment on or make changes to this bug.