Closed Bug 1160723 Opened 10 years ago Closed 1 year ago

Automatic layerization still causes unnecessary rendering

Categories

(Core :: Graphics: Layers, defect)

39 Branch
x86_64
Windows 8.1
defect

Tracking

()

RESOLVED WORKSFORME

People

(Reporter: birtles, Unassigned)

References

()

Details

(Whiteboard: gfx-noted)

In the following codepen, the profiler/paint flashing shows us doing a lot of rendering even though we're clearly layerizing the moving circles: http://codepen.io/thebabydino/pen/JddBPE If I add will-change to the styles as follows: circle { will-change: transform; } we don't do any rendering at all. I would have expected our automatic layerization to behave much the same as providing explicit layerization hints. (Testing on Aurora here so this might be fixed on trunk.)
I only see us flashing the smaller circles. Having a look into the debugger, we're failing the IsItemToSmallForActiveLayer check in nsDisplayTransform::GetLayerState (example rect(339, 1485, 14, 15)). These circles aren't getting active layers, so the repainting is expected. The will-change path in GetLayerState doesn't do this check, so we actually get active layers for all circles with that change.
Whiteboard: gfx-noted
Because I was looking at this on a smaller screen everything was in the "too small" category. It this is the intended behavior then maybe this is invalid. It seems a little surprising that will-change has this effect. I originally filed the bug because of a report that perf was slow.[1] It seems will-change helped in this case.[2] [1] https://twitter.com/anatudor/status/594400551359684608 [2] https://twitter.com/anatudor/status/594500949412052993
Severity: normal → S3

This test case performs well without will-change now.

Status: NEW → RESOLVED
Closed: 1 year ago
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.