DescriptionSeparate repaint and layout requirements of StyleDifference (Step 3)
Step 1 and 2 replaced StyleDifference enum with StyleDifference class
but still didn't change any functionality.
This change allows multiple types of flags set in StyleDifference, in
the following cases:
1. Both needsRepaint and needsPositionedMovement: This was a full layout
when StyleDifference enum couldn't express the exact needs of the
case. Now we can do a repaint and positioned movement without full
layout.
2. Both needsRepaintLayer and needsFullLayout: Previously, the needs of
repainting layer must be checked again (about clip, transform,
opacity etc.) in RenderLayerModelObject::styleWillChange() if layout
is also needed. Now we can go through the normal needsRepaintLayer
path.
3. Both needsRepaint and needsFullLayout: Previously as the repaint
needs couldn't be explicitly expressed, we have to do a full repaint.
In this change we still keep the original behavior unchanged.
Will optimize in later changes.
4. Both contextSensitiveProperties and needsLayout: Now this is
resolved by RenderObject::adjustStyleDifference() to layout only
or case 1, 2 or 3.
Only case 2 changes the visible behavior. All rebaselined layout tests
are in this case. The extra repaint rects are because now the code
schedules both direct repaints and repaints caused by layer position
change.
BUG=358460
TEST=existing layout tests, several rebaselined.
Committed: https://src.chromium.org/viewvc/blink?view=rev&revision=173023
Patch Set 1 #Patch Set 2 : Rebase #
Total comments: 13
Patch Set 3 : Update comments #Patch Set 4 : Rebase #
Total comments: 8
Patch Set 5 : Address comments; Rebase on RAL #Messages
Total messages: 12 (0 generated)
|