2011-02-12 Chris Marrin <cmarrin@apple.com>
authorcmarrin@apple.com <cmarrin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 13 Feb 2011 00:18:02 +0000 (00:18 +0000)
committercmarrin@apple.com <cmarrin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 13 Feb 2011 00:18:02 +0000 (00:18 +0000)
commitae10325ecaf481b888820087750d025f84dc4ae1
treed34709cf7a9bdce9dbeee9fe08894350bcc1a090
parentf72c2cc25822a0116631d222d78d31c626d32352
2011-02-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein.

        Crash in RenderLayerCompositor::updateCompositingLayers when loading some sites
        https://bugs.webkit.org/show_bug.cgi?id=54345

        Some sites flip between composited and non-comosited state while loading. When the timing is
        right, when we flip out of compositing we will need to do a display while tossing all the
        compositing layers. This causes us to reenter RenderLayerCompositor::computeCompositingRequirements()
        while we are in the middle of tossing layers, which leads to a crash.

        The solution is to defer the logic of exiting compositing mode until the DrawingArea is finished
        doing its display, using a timer.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingModeSoon):
        * WebProcess/WebPage/DrawingAreaImpl.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@78425 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebKit2/ChangeLog
Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp
Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h