[chromium] When prepainting fails, tiles dirty rects may be cleared
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 24 Mar 2012 05:54:38 +0000 (05:54 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 24 Mar 2012 05:54:38 +0000 (05:54 +0000)
commit7aa407002771e232710e1ce9d9559cfa53f887b9
tree41f8790e54aaca8e1b6061533afc335181e49641
parentf041ed14a95ff06787e3f1dc630d4c4f1d0b5448
[chromium] When prepainting fails, tiles dirty rects may be cleared
https://bugs.webkit.org/show_bug.cgi?id=82107

Patch by Dana Jansens <danakj@chromium.org> on 2012-03-23
Reviewed by Adrienne Walker.

Source/WebCore:

When prepainting, if a tile is unable to be reserved due to memory
limits, we bail out of prepareToUpdateTiles. But we would have
cleared the dirty rect of any previous tiles. This leaves them
in a bad state where their textures are reserved, but their textureIds
are set to 0, and they are not marked dirty. This means that they will
not be updated and displayed if they become visible, since it is
assumed that valid textures with zero textureId must have a dirty
region.

We fix this by not clearing the dirty rects until we know we are
going to update the layer.

Unit test: TiledLayerChromiumTest.pushTilesAfterIdlePaintFailed

* platform/graphics/chromium/TiledLayerChromium.cpp:
(WebCore::TiledLayerChromium::prepareToUpdateTiles):
* platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
(WebCore::CCTiledLayerImpl::hasTextureIdForTileAt):
(WebCore):
* platform/graphics/chromium/cc/CCTiledLayerImpl.h:
(CCTiledLayerImpl):

Source/WebKit/chromium:

* tests/TiledLayerChromiumTest.cpp:
(WTF::FakeTextureAllocator::createTexture):
(WTF::FakeLayerTextureUpdater::Texture::updateRect):
(FakeCCTiledLayerImpl):
(WTF::FakeCCTiledLayerImpl::hasTextureIdForTileAt):
(WTF::TEST):
(WTF):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@111978 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp
Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp
Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.h
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp