Avoid painting lots of small rects in WebLayer painting
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 29 Nov 2012 23:21:09 +0000 (23:21 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 29 Nov 2012 23:21:09 +0000 (23:21 +0000)
commitac612e9f4a7f161ea24332a31c255176773438f7
treedb8543bdc79db7e98a2f22ba156f3912903556ef
parent2030bf9ea07ce2a9d5aa685970357cb2e55dcce7
Avoid painting lots of small rects in WebLayer painting
https://bugs.webkit.org/show_bug.cgi?id=103673

Reviewed by Tim Horton.

r109186 added code in drawLayerContents() to enumerate over the rects in
the CALayer's dirty region, and paint them individually. This was done
to help performance on the IE Maze Solver test.

On large, complex pages like Facebook, the overhead of traversing the
RenderLayer tree for painting is such that it's better to paint a single,
or fewer rects rather than lots of little ones.

So adopt a heuristic similar to that in DrawingArea, where if the
combined area of the small rects is 75% or more of the combined rect,
just paint the combined rect. Also paint the combined rect if there
are more than 5 individual rects.

I verified that this preserves the optimization for IE Maze Solver.

* platform/graphics/mac/WebLayer.mm:
(drawLayerContents):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@136174 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/mac/WebLayer.mm