[chromium] Don't upload partially drawn tiles in the compositor
Created attachment 90557 [details]
This corresponds to http://crbug.com/79960.
What was happening is this convoluted chain of events:
Content layer passes some update rect to update.
Update function finds all the tiles that intersect that rect.
Paint rect is calculated from the union of the dirty rects of those tiles.
Upload function finds all the tiles that intersects with that paint rect.
Because of tile border texels, the set of tiles intersecting the paint rect is larger than that of the set of tiles intersecting the update rect.
One of these tiles that was not in the update rect but in the paint rect only partially intersects the paint rect.
Part of the tile is uploaded even though more of it is dirty.
The tile's dirty rect is cleared even though only part of the tile has been uploaded.
The tile has been partially modified, so it looks wrong.
The real problem is that we're trying to upload data for tiles that we didn't intend to update. If we had intended to upload data for them, we would have painted their entire dirty rect. So the simplest fix is to iterate over the same set of tiles in both update and upload.
Comment on attachment 90557 [details]
Committed r84542: <http://trac.webkit.org/changeset/84542>