<rdar://problem/10891801> BackingStore::scroll() unnecessarily copies pixels around
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 19 Feb 2012 03:53:29 +0000 (03:53 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 19 Feb 2012 03:53:29 +0000 (03:53 +0000)
commit4dd7dcf2fa71a2614e1e9367cb206387bfc83883
treebed30b1bbd9185ff2694202fa137b9bbd4fc2719
parent8dfaed7792fb8d04575005f73f47c089a256428b
<rdar://problem/10891801> BackingStore::scroll() unnecessarily copies pixels around
https://bugs.webkit.org/show_bug.cgi?id=78976

Reviewed by Anders Carlsson.

Rather than move pixels in the backing store in response to scrolling, we can maintain a
mapping, for the most recently scrolled rect, from backing store coordinates to view
client coordinates.

* UIProcess/BackingStore.h:
* UIProcess/mac/BackingStoreMac.mm:
(WebKit::BackingStore::performWithScrolledRectTransform): Added. Given a block to be
performed on a rect, divides the rect into parts such that for each part the mapping from
backing store coordinates to client coordinates is a (uniform) translation, and performs
the block on that part, passing it the translation that applies to the part.
(WebKit::BackingStore::resetScrolledRect): Added. Copies everything in the scrolled rect
back to where it should be under the identity map, and resets the scrolled rect and offset.
(WebKit::BackingStore::paint): Changed to call through performWithScrolledRectTransform().
(WebKit::BackingStore::incorporateUpdate): Ditto.
(WebKit::BackingStore::scroll): Now instead of copying pixels, just updates the scrolled
rect and offset.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@108181 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/BackingStore.h
Source/WebKit2/UIProcess/mac/BackingStoreMac.mm