| Index: Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| diff --git a/Source/core/rendering/compositing/RenderLayerCompositor.cpp b/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| index 4dc163ee1db39682f9c3fb41cfad7735eaae0f1b..3da95af9acf7cb4d5b1f9b28289a7db425d26f16 100644
|
| --- a/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| +++ b/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| @@ -198,12 +198,11 @@ struct CompositingRecursionData {
|
| RenderLayerCompositor::RenderLayerCompositor(RenderView& renderView)
|
| : m_renderView(renderView)
|
| , m_compositingReasonFinder(renderView)
|
| + , m_pendingUpdateType(CompositingUpdateNone)
|
| , m_hasAcceleratedCompositing(true)
|
| , m_showRepaintCounter(false)
|
| , m_needsToRecomputeCompositingRequirements(false)
|
| , m_needsToUpdateLayerTreeGeometry(false)
|
| - , m_pendingUpdateType(GraphicsLayerUpdater::DoNotForceUpdate)
|
| - , m_pendingPropertyUpdateType(CompositingPropertyUpdater::DoNotForceUpdate)
|
| , m_compositing(false)
|
| , m_compositingLayersNeedRebuild(false)
|
| , m_forceCompositingMode(false)
|
| @@ -344,6 +343,7 @@ void RenderLayerCompositor::finishCompositingUpdateForFrameTree(LocalFrame* fram
|
|
|
| void RenderLayerCompositor::setNeedsCompositingUpdate(CompositingUpdateType updateType)
|
| {
|
| + ASSERT(updateType != CompositingUpdateNone);
|
| // FIXME: this code was historically part of updateCompositingLayers, and
|
| // for now is kept totally equivalent to the previous implementation. We
|
| // should carefully clean up the awkward early-exit semantics, balancing between
|
| @@ -360,31 +360,24 @@ void RenderLayerCompositor::setNeedsCompositingUpdate(CompositingUpdateType upda
|
| if (!m_needsToRecomputeCompositingRequirements && !m_compositing)
|
| return;
|
|
|
| + m_pendingUpdateType = std::max(m_pendingUpdateType, updateType);
|
| +
|
| switch (updateType) {
|
| + case CompositingUpdateNone:
|
| + ASSERT_NOT_REACHED();
|
| + break;
|
| case CompositingUpdateAfterStyleChange:
|
| m_needsToRecomputeCompositingRequirements = true;
|
| break;
|
| case CompositingUpdateAfterLayout:
|
| m_needsToRecomputeCompositingRequirements = true;
|
| - // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here.
|
| - m_pendingUpdateType = GraphicsLayerUpdater::ForceUpdate;
|
| - // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here.
|
| - m_pendingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate;
|
| break;
|
| case CompositingUpdateOnScroll:
|
| m_needsToRecomputeCompositingRequirements = true; // Overlap can change with scrolling, so need to check for hierarchy updates.
|
| m_needsToUpdateLayerTreeGeometry = true;
|
| - // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here.
|
| - m_pendingUpdateType = GraphicsLayerUpdater::ForceUpdate;
|
| - // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here.
|
| - m_pendingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate;
|
| break;
|
| case CompositingUpdateOnCompositedScroll:
|
| m_needsToUpdateLayerTreeGeometry = true;
|
| - // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here.
|
| - m_pendingUpdateType = GraphicsLayerUpdater::ForceUpdate;
|
| - // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here.
|
| - m_pendingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate;
|
| break;
|
| case CompositingUpdateAfterCanvasContextChange:
|
| m_needsToUpdateLayerTreeGeometry = true;
|
| @@ -444,7 +437,7 @@ void RenderLayerCompositor::scheduleAnimationIfNeeded()
|
|
|
| bool RenderLayerCompositor::hasUnresolvedDirtyBits()
|
| {
|
| - return m_needsToRecomputeCompositingRequirements || m_compositingLayersNeedRebuild || m_needsToUpdateLayerTreeGeometry || m_needsUpdateCompositingRequirementsState || m_pendingUpdateType != GraphicsLayerUpdater::DoNotForceUpdate;
|
| + return m_needsToRecomputeCompositingRequirements || m_compositingLayersNeedRebuild || m_needsToUpdateLayerTreeGeometry || m_needsUpdateCompositingRequirementsState || m_pendingUpdateType > CompositingUpdateNone;
|
| }
|
|
|
| void RenderLayerCompositor::updateCompositingLayersInternal()
|
| @@ -458,6 +451,8 @@ void RenderLayerCompositor::updateCompositingLayersInternal()
|
| if (!m_needsToRecomputeCompositingRequirements && !m_compositing)
|
| return;
|
|
|
| + CompositingUpdateType updateType = m_pendingUpdateType;
|
| +
|
| bool needCompositingRequirementsUpdate = m_needsToRecomputeCompositingRequirements;
|
| bool needHierarchyAndGeometryUpdate = m_compositingLayersNeedRebuild;
|
| bool needGeometryUpdate = m_needsToUpdateLayerTreeGeometry;
|
| @@ -466,13 +461,21 @@ void RenderLayerCompositor::updateCompositingLayersInternal()
|
| if (!needCompositingRequirementsUpdate && !needHierarchyAndGeometryUpdate && !needGeometryUpdate && !needsToUpdateScrollingCoordinator)
|
| return;
|
|
|
| - GraphicsLayerUpdater::UpdateType updateType = m_pendingUpdateType;
|
| + m_pendingUpdateType = CompositingUpdateNone;
|
| +
|
| + GraphicsLayerUpdater::UpdateType graphicsLayerUpdateType = GraphicsLayerUpdater::DoNotForceUpdate;
|
| + CompositingPropertyUpdater::UpdateType compositingPropertyUpdateType = CompositingPropertyUpdater::DoNotForceUpdate;
|
| +
|
| + // FIXME: Teach non-style compositing updates how to do partial tree walks.
|
| + if (updateType >= CompositingUpdateAfterLayout) {
|
| + graphicsLayerUpdateType = GraphicsLayerUpdater::ForceUpdate;
|
| + compositingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate;
|
| + }
|
|
|
| // Only clear the flags if we're updating the entire hierarchy.
|
| m_compositingLayersNeedRebuild = false;
|
| m_needsToUpdateLayerTreeGeometry = false;
|
| m_needsToRecomputeCompositingRequirements = false;
|
| - m_pendingUpdateType = GraphicsLayerUpdater::DoNotForceUpdate;
|
|
|
| RenderLayer* updateRoot = rootRenderLayer();
|
|
|
| @@ -485,8 +488,7 @@ void RenderLayerCompositor::updateCompositingLayersInternal()
|
|
|
| {
|
| TRACE_EVENT0("blink_rendering", "CompositingPropertyUpdater::updateAncestorDependentProperties");
|
| - CompositingPropertyUpdater(updateRoot).updateAncestorDependentProperties(updateRoot, m_pendingPropertyUpdateType, 0);
|
| - m_pendingPropertyUpdateType = CompositingPropertyUpdater::DoNotForceUpdate;
|
| + CompositingPropertyUpdater(updateRoot).updateAncestorDependentProperties(updateRoot, compositingPropertyUpdateType, 0);
|
| #if !ASSERT_DISABLED
|
| CompositingPropertyUpdater::assertNeedsToUpdateAncestorDependantPropertiesBitsCleared(updateRoot);
|
| #endif
|
| @@ -525,7 +527,7 @@ void RenderLayerCompositor::updateCompositingLayersInternal()
|
|
|
| if (needGeometryUpdate || needHierarchyAndGeometryUpdate) {
|
| TRACE_EVENT0("blink_rendering", "GraphicsLayerUpdater::updateRecursive");
|
| - GraphicsLayerUpdater().update(*updateRoot, updateType);
|
| + GraphicsLayerUpdater().update(*updateRoot, graphicsLayerUpdateType);
|
| #if !ASSERT_DISABLED
|
| // FIXME: Move this check to the end of the compositing update.
|
| GraphicsLayerUpdater::assertNeedsToUpdateGraphicsLayerBitsCleared(*updateRoot);
|
|
|