Changeset 85112 in webkit


Ignore:
Timestamp:
Apr 27, 2011 3:41:31 PM (13 years ago)
Author:
jamesr@google.com
Message:

2011-04-27 James Robinson <jamesr@chromium.org>

Reviewed by Kenneth Russell.

[chromium] Ensure compositing layers are up to date before entering doComposite
https://bugs.webkit.org/show_bug.cgi?id=59159

Adds some assertions to try to catch GraphicsLayer mutations at bad times (such as during
GraphicsLayerClient::paintContents() implementations).

  • page/FrameView.cpp: (WebCore::FrameView::updateCompositingLayers):

Add an optional CompositingUpdateType parameter.

  • page/FrameView.h:
  • platform/graphics/chromium/GraphicsLayerChromium.cpp: (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
  • platform/graphics/chromium/LayerChromium.cpp: (WebCore::LayerChromium::LayerChromium): (WebCore::LayerChromium::~LayerChromium):
  • platform/graphics/chromium/LayerRendererChromium.cpp: (WebCore::LayerRendererChromium::updateLayers):
  • platform/graphics/chromium/LayerRendererChromium.h: Add a set of assertions that we aren't creating or destroying LayerChromiums during paintContents
  • rendering/RenderLayer.cpp: (WebCore::RenderLayer::dirtyZOrderLists): (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded):
  • rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers):
  • rendering/RenderLayerCompositor.h: Fix a typo in CompositingUpdateType Pait->Paint
Location:
trunk/Source/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r85109 r85112  
     12011-04-27  James Robinson  <jamesr@chromium.org>
     2
     3        Reviewed by Kenneth Russell.
     4
     5        [chromium] Ensure compositing layers are up to date before entering doComposite
     6        https://bugs.webkit.org/show_bug.cgi?id=59159
     7
     8        Adds some assertions to try to catch GraphicsLayer mutations at bad times (such as during
     9        GraphicsLayerClient::paintContents() implementations).
     10
     11        * page/FrameView.cpp:
     12        (WebCore::FrameView::updateCompositingLayers):
     13            Add an optional CompositingUpdateType parameter.
     14        * page/FrameView.h:
     15        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
     16        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
     17        * platform/graphics/chromium/LayerChromium.cpp:
     18        (WebCore::LayerChromium::LayerChromium):
     19        (WebCore::LayerChromium::~LayerChromium):
     20        * platform/graphics/chromium/LayerRendererChromium.cpp:
     21        (WebCore::LayerRendererChromium::updateLayers):
     22        * platform/graphics/chromium/LayerRendererChromium.h:
     23          Add a set of assertions that we aren't creating or destroying LayerChromiums during paintContents
     24        * rendering/RenderLayer.cpp:
     25        (WebCore::RenderLayer::dirtyZOrderLists):
     26        (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded):
     27        * rendering/RenderLayerCompositor.cpp:
     28        (WebCore::RenderLayerCompositor::updateCompositingLayers):
     29        * rendering/RenderLayerCompositor.h:
     30          Fix a typo in CompositingUpdateType Pait->Paint
     31
    1322011-04-27  Pratik Solanki  <psolanki@apple.com>
    233
  • trunk/Source/WebCore/page/FrameView.cpp

    r84848 r85112  
    586586   
    587587#if USE(ACCELERATED_COMPOSITING)
    588 void FrameView::updateCompositingLayers()
     588void FrameView::updateCompositingLayers(CompositingUpdateType updateType)
    589589{
    590590    RenderView* view = m_frame->contentRenderer();
     
    594594    // This call will make sure the cached hasAcceleratedCompositing is updated from the pref
    595595    view->compositor()->cacheAcceleratedCompositingFlags();
    596     view->compositor()->updateCompositingLayers(CompositingUpdateAfterLayoutOrStyleChange);
     596    view->compositor()->updateCompositingLayers(updateType);
    597597   
    598598#if ENABLE(FULLSCREEN_API)
    599599    Document* document = m_frame->document();
    600600    if (isDocumentRunningFullScreenAnimation(document))
    601         view->compositor()->updateCompositingLayers(CompositingUpdateAfterLayoutOrStyleChange, document->fullScreenRenderer()->layer());
     601        view->compositor()->updateCompositingLayers(updateType, document->fullScreenRenderer()->layer());
    602602#endif
    603603}
  • trunk/Source/WebCore/page/FrameView.h

    r84769 r85112  
    3333#include <wtf/Forward.h>
    3434#include <wtf/OwnPtr.h>
     35
     36#if USE(ACCELERATED_COMPOSITING)
     37#include "RenderLayerCompositor.h" // For CompositingUpdateType
     38#endif
    3539
    3640namespace WebCore {
     
    106110
    107111#if USE(ACCELERATED_COMPOSITING)
    108     void updateCompositingLayers();
     112    void updateCompositingLayers(CompositingUpdateType = CompositingUpdateAfterLayoutOrStyleChange);
    109113    bool syncCompositingStateForThisFrame();
    110114
  • trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp

    r83915 r85112  
    589589    } else if (!m_preserves3D && m_transformLayer) {
    590590        // Relace the transformLayer in the parent with this layer.
     591        if (m_transformLayer->superlayer())
     592            m_transformLayer->superlayer()->replaceSublayer(m_transformLayer.get(), m_layer.get());
    591593        m_layer->removeFromSuperlayer();
    592         m_transformLayer->superlayer()->replaceSublayer(m_transformLayer.get(), m_layer.get());
    593594
    594595        // Release the transform layer.
  • trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp

    r83551 r85112  
    8282    , m_replicaLayer(0)
    8383{
     84    ASSERT(!LayerRendererChromium::s_inPaintLayerContents);
    8485}
    8586
    8687LayerChromium::~LayerChromium()
    8788{
     89    ASSERT(!LayerRendererChromium::s_inPaintLayerContents);
    8890    // Our superlayer should be holding a reference to us so there should be no
    8991    // way for us to be destroyed while we still have a superlayer.
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r85100 r85112  
    6060static size_t textureMemoryLimitBytes = 64 * 1024 * 1024;
    6161
     62#ifndef NDEBUG
     63bool LayerRendererChromium::s_inPaintLayerContents = false;
     64#endif
     65
    6266static TransformationMatrix orthoMatrix(float left, float right, float bottom, float top)
    6367{
     
    284288    updatePropertiesAndRenderSurfaces(m_rootLayer.get(), identityMatrix, renderSurfaceLayerList, m_defaultRenderSurface->m_layerList);
    285289
     290#ifndef NDEBUG
     291    s_inPaintLayerContents = true;
     292#endif
    286293    paintLayerContents(renderSurfaceLayerList);
     294#ifndef NDEBUG
     295    s_inPaintLayerContents = false;
     296#endif
    287297
    288298    // FIXME: Before updateCompositorResourcesRecursive, when the compositor runs in
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h

    r84582 r85112  
    135135    void removeChildContext(GraphicsContext3D*);
    136136
     137#ifndef NDEBUG
     138    static bool s_inPaintLayerContents;
     139#endif
    137140private:
    138141    typedef Vector<RefPtr<CCLayerImpl> > LayerList;
Note: See TracChangeset for help on using the changeset viewer.