| Index: third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
|
| index 5ca7a75f74bf11b883c21bc9396d00fce2436396..a9970c4e069b49714a20863d6d18b7a660f2b42c 100644
|
| --- a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
|
| @@ -130,7 +130,8 @@ void PaintLayerCompositor::enableCompositingModeIfNeeded() {
|
| return;
|
|
|
| if (rootShouldAlwaysComposite()) {
|
| - // FIXME: Is this needed? It was added in https://bugs.webkit.org/show_bug.cgi?id=26651.
|
| + // FIXME: Is this needed? It was added in
|
| + // https://bugs.webkit.org/show_bug.cgi?id=26651.
|
| // No tests fail if it's deleted.
|
| setNeedsCompositingUpdate(CompositingUpdateRebuildTree);
|
| setCompositingModeEnabled(true);
|
| @@ -184,10 +185,11 @@ static LayoutVideo* findFullscreenVideoLayoutObject(Document& document) {
|
| }
|
|
|
| // The descendant-dependent flags system is badly broken because we clean dirty
|
| -// bits in upward tree walks, which means we need to call updateDescendantDependentFlags
|
| -// at every node in the tree to fully clean all the dirty bits. While we'll in
|
| -// the process of fixing this issue, updateDescendantDependentFlagsForEntireSubtree
|
| -// provides a big hammer for actually cleaning all the dirty bits in a subtree.
|
| +// bits in upward tree walks, which means we need to call
|
| +// updateDescendantDependentFlags at every node in the tree to fully clean all
|
| +// the dirty bits. While we'll in the process of fixing this issue,
|
| +// updateDescendantDependentFlagsForEntireSubtree provides a big hammer for
|
| +// actually cleaning all the dirty bits in a subtree.
|
| //
|
| // FIXME: Remove this function once the descendant-dependent flags system keeps
|
| // its dirty bits scoped to subtrees.
|
| @@ -214,8 +216,9 @@ void PaintLayerCompositor::updateIfNeededRecursiveInternal() {
|
| if (!child->isLocalFrame())
|
| continue;
|
| LocalFrame* localFrame = toLocalFrame(child);
|
| - // It's possible for trusted Pepper plugins to force hit testing in situations where
|
| - // the frame tree is in an inconsistent state, such as in the middle of frame detach.
|
| + // It's possible for trusted Pepper plugins to force hit testing in
|
| + // situations where the frame tree is in an inconsistent state, such as in
|
| + // the middle of frame detach.
|
| // TODO(bbudge) Remove this check when trusted Pepper plugins are gone.
|
| if (localFrame->document()->isActive() &&
|
| !localFrame->contentLayoutItem().isNull())
|
| @@ -230,8 +233,9 @@ void PaintLayerCompositor::updateIfNeededRecursiveInternal() {
|
|
|
| ScriptForbiddenScope forbidScript;
|
|
|
| - // FIXME: enableCompositingModeIfNeeded can trigger a CompositingUpdateRebuildTree,
|
| - // which asserts that it's not InCompositingUpdate.
|
| + // FIXME: enableCompositingModeIfNeeded can trigger a
|
| + // CompositingUpdateRebuildTree, which asserts that it's not
|
| + // InCompositingUpdate.
|
| enableCompositingModeIfNeeded();
|
|
|
| if (m_needsUpdateDescendantDependentFlags) {
|
| @@ -322,11 +326,14 @@ void PaintLayerCompositor::applyOverlayFullscreenVideoAdjustmentIfNeeded() {
|
| GraphicsLayer* videoLayer =
|
| video->layer()->compositedLayerMapping()->mainGraphicsLayer();
|
|
|
| - // The fullscreen video has layer position equal to its enclosing frame's scroll position because fullscreen container is fixed-positioned.
|
| - // We should reset layer position here since we are going to reattach the layer at the very top level.
|
| + // The fullscreen video has layer position equal to its enclosing frame's
|
| + // scroll position because fullscreen container is fixed-positioned.
|
| + // We should reset layer position here since we are going to reattach the
|
| + // layer at the very top level.
|
| videoLayer->setPosition(IntPoint());
|
|
|
| - // Only steal fullscreen video layer and clear all other layers if we are the main frame.
|
| + // Only steal fullscreen video layer and clear all other layers if we are the
|
| + // main frame.
|
| if (!isLocalRoot)
|
| return;
|
|
|
| @@ -353,10 +360,11 @@ void PaintLayerCompositor::updateWithoutAcceleratedCompositing(
|
| static void
|
| forceRecomputePaintInvalidationRectsIncludingNonCompositingDescendants(
|
| LayoutObject* layoutObject) {
|
| - // We clear the previous paint invalidation rect as it's wrong (paint invalidation container
|
| - // changed, ...). Forcing a full invalidation will make us recompute it. Also we are not
|
| - // changing the previous position from our paint invalidation container, which is fine as
|
| - // we want a full paint invalidation anyway.
|
| + // We clear the previous paint invalidation rect as it's wrong (paint
|
| + // invalidation container changed, ...). Forcing a full invalidation will make
|
| + // us recompute it. Also we are not changing the previous position from our
|
| + // paint invalidation container, which is fine as we want a full paint
|
| + // invalidation anyway.
|
| layoutObject->clearPreviousPaintInvalidationRects();
|
|
|
| for (LayoutObject* child = layoutObject->slowFirstChild(); child;
|
| @@ -525,21 +533,24 @@ bool PaintLayerCompositor::allocateOrClearCompositedLayerMapping(
|
| bool compositedLayerMappingChanged = false;
|
|
|
| // FIXME: It would be nice to directly use the layer's compositing reason,
|
| - // but allocateOrClearCompositedLayerMapping also gets called without having updated compositing
|
| - // requirements fully.
|
| + // but allocateOrClearCompositedLayerMapping also gets called without having
|
| + // updated compositing requirements fully.
|
| switch (compositedLayerUpdate) {
|
| case AllocateOwnCompositedLayerMapping:
|
| ASSERT(!layer->hasCompositedLayerMapping());
|
| setCompositingModeEnabled(true);
|
|
|
| - // If we need to issue paint invalidations, do so before allocating the compositedLayerMapping and clearing out the groupedMapping.
|
| + // If we need to issue paint invalidations, do so before allocating the
|
| + // compositedLayerMapping and clearing out the groupedMapping.
|
| paintInvalidationOnCompositingChange(layer);
|
|
|
| - // If this layer was previously squashed, we need to remove its reference to a groupedMapping right away, so
|
| - // that computing paint invalidation rects will know the layer's correct compositingState.
|
| - // FIXME: do we need to also remove the layer from it's location in the squashing list of its groupedMapping?
|
| - // Need to create a test where a squashed layer pops into compositing. And also to cover all other
|
| - // sorts of compositingState transitions.
|
| + // If this layer was previously squashed, we need to remove its reference
|
| + // to a groupedMapping right away, so that computing paint invalidation
|
| + // rects will know the layer's correct compositingState.
|
| + // FIXME: do we need to also remove the layer from it's location in the
|
| + // squashing list of its groupedMapping? Need to create a test where a
|
| + // squashed layer pops into compositing. And also to cover all other sorts
|
| + // of compositingState transitions.
|
| layer->setLostGroupedMapping(false);
|
| layer->setGroupedMapping(nullptr,
|
| PaintLayer::InvalidateLayerAndRemoveFromMapping);
|
| @@ -549,7 +560,8 @@ bool PaintLayerCompositor::allocateOrClearCompositedLayerMapping(
|
|
|
| restartAnimationOnCompositor(*layer->layoutObject());
|
|
|
| - // At this time, the ScrollingCoordinator only supports the top-level frame.
|
| + // At this time, the ScrollingCoordinator only supports the top-level
|
| + // frame.
|
| if (layer->isRootLayer() && m_layoutView.frame()->isLocalRoot()) {
|
| if (ScrollingCoordinator* scrollingCoordinator =
|
| this->scrollingCoordinator())
|
| @@ -558,7 +570,8 @@ bool PaintLayerCompositor::allocateOrClearCompositedLayerMapping(
|
| }
|
| break;
|
| case RemoveOwnCompositedLayerMapping:
|
| - // PutInSquashingLayer means you might have to remove the composited layer mapping first.
|
| + // PutInSquashingLayer means you might have to remove the composited layer
|
| + // mapping first.
|
| case PutInSquashingLayer:
|
| if (layer->hasCompositedLayerMapping()) {
|
| layer->clearCompositedLayerMapping();
|
| @@ -582,8 +595,9 @@ bool PaintLayerCompositor::allocateOrClearCompositedLayerMapping(
|
| if (compositedLayerMappingChanged)
|
| layer->clipper().clearClipRectsIncludingDescendants(PaintingClipRects);
|
|
|
| - // If a fixed position layer gained/lost a compositedLayerMapping or the reason not compositing it changed,
|
| - // the scrolling coordinator needs to recalculate whether it can do fast scrolling.
|
| + // If a fixed position layer gained/lost a compositedLayerMapping or the
|
| + // reason not compositing it changed, the scrolling coordinator needs to
|
| + // recalculate whether it can do fast scrolling.
|
| if (compositedLayerMappingChanged) {
|
| if (ScrollingCoordinator* scrollingCoordinator =
|
| this->scrollingCoordinator())
|
| @@ -596,16 +610,19 @@ bool PaintLayerCompositor::allocateOrClearCompositedLayerMapping(
|
|
|
| void PaintLayerCompositor::paintInvalidationOnCompositingChange(
|
| PaintLayer* layer) {
|
| - // If the layoutObject is not attached yet, no need to issue paint invalidations.
|
| + // If the layoutObject is not attached yet, no need to issue paint
|
| + // invalidations.
|
| if (layer->layoutObject() != &m_layoutView &&
|
| !layer->layoutObject()->parent())
|
| return;
|
|
|
| // For querying Layer::compositingState()
|
| - // Eager invalidation here is correct, since we are invalidating with respect to the previous frame's
|
| - // compositing state when changing the compositing backing of the layer.
|
| + // Eager invalidation here is correct, since we are invalidating with respect
|
| + // to the previous frame's compositing state when changing the compositing
|
| + // backing of the layer.
|
| DisableCompositingQueryAsserts disabler;
|
| - // FIXME: We should not allow paint invalidation out of paint invalidation state. crbug.com/457415
|
| + // FIXME: We should not allow paint invalidation out of paint invalidation
|
| + // state. crbug.com/457415
|
| DisablePaintInvalidationStateAsserts paintInvalidationAssertisabler;
|
|
|
| ObjectPaintInvalidator(*layer->layoutObject())
|
| @@ -685,8 +702,8 @@ void PaintLayerCompositor::rootFixedBackgroundsChanged() {
|
| // + Scrollbars
|
| //
|
| // That is, it needs to be the first child of the frame clip, the sibling of
|
| - // the frame scroll layer. The compositor does not own the background layer, it
|
| - // just positions it (like the foreground layer).
|
| + // the frame scroll layer. The compositor does not own the background layer,
|
| + // it just positions it (like the foreground layer).
|
| if (GraphicsLayer* backgroundLayer = fixedRootBackgroundLayer())
|
| m_containerLayer->addChildBelow(backgroundLayer, m_scrollLayer.get());
|
| }
|
| @@ -842,7 +859,8 @@ void PaintLayerCompositor::updateDirectCompositingReasons(PaintLayer* layer) {
|
|
|
| bool PaintLayerCompositor::canBeComposited(const PaintLayer* layer) const {
|
| FrameView* frameView = layer->layoutObject()->frameView();
|
| - // Elements within an invisible frame must not be composited because they are not drawn.
|
| + // Elements within an invisible frame must not be composited because they are
|
| + // not drawn.
|
| if (frameView && !frameView->isVisible())
|
| return false;
|
|
|
| @@ -855,18 +873,19 @@ bool PaintLayerCompositor::canBeComposited(const PaintLayer* layer) const {
|
| !layer->layoutObject()->isLayoutFlowThread();
|
| }
|
|
|
| -// Return true if the given layer is a stacking context and has compositing child
|
| -// layers that it needs to clip. In this case we insert a clipping GraphicsLayer
|
| -// into the hierarchy between this layer and its children in the z-order hierarchy.
|
| +// Return true if the given layer is a stacking context and has compositing
|
| +// child layers that it needs to clip. In this case we insert a clipping
|
| +// GraphicsLayer into the hierarchy between this layer and its children in the
|
| +// z-order hierarchy.
|
| bool PaintLayerCompositor::clipsCompositingDescendants(
|
| const PaintLayer* layer) const {
|
| return layer->hasCompositingDescendant() &&
|
| layer->layoutObject()->hasClipRelatedProperty();
|
| }
|
|
|
| -// If an element has composited negative z-index children, those children paint in front of the
|
| -// layer background, so we need an extra 'contents' layer for the foreground of the layer
|
| -// object.
|
| +// If an element has composited negative z-index children, those children paint
|
| +// in front of the layer background, so we need an extra 'contents' layer for
|
| +// the foreground of the layer object.
|
| bool PaintLayerCompositor::needsContentsCompositingLayer(
|
| const PaintLayer* layer) const {
|
| if (!layer->hasCompositingDescendant())
|
| @@ -878,7 +897,8 @@ static void paintScrollbar(const GraphicsLayer* graphicsLayer,
|
| const Scrollbar* scrollbar,
|
| GraphicsContext& context,
|
| const IntRect& clip) {
|
| - // Frame scrollbars are painted in the space of the containing frame, not the local space of the scrollbar.
|
| + // Frame scrollbars are painted in the space of the containing frame, not the
|
| + // local space of the scrollbar.
|
| const IntPoint& paintOffset = scrollbar->frameRect().location();
|
| IntRect transformedClip = clip;
|
| transformedClip.moveBy(paintOffset);
|
| @@ -899,8 +919,9 @@ void PaintLayerCompositor::paintContents(const GraphicsLayer* graphicsLayer,
|
| GraphicsContext& context,
|
| GraphicsLayerPaintingPhase,
|
| const IntRect& interestRect) const {
|
| - // Note the composited scrollable area painted below is always associated with a frame. For
|
| - // painting non-frame ScrollableAreas, see CompositedLayerMapping::paintScrollableArea.
|
| + // Note the composited scrollable area painted below is always associated with
|
| + // a frame. For painting non-frame ScrollableAreas, see
|
| + // CompositedLayerMapping::paintScrollableArea.
|
|
|
| const Scrollbar* scrollbar = graphicsLayerToScrollbar(graphicsLayer);
|
| if (!scrollbar && graphicsLayer != layerForScrollCorner())
|
| @@ -920,9 +941,9 @@ void PaintLayerCompositor::paintContents(const GraphicsLayer* graphicsLayer,
|
| FramePainter(*m_layoutView.frameView())
|
| .paintScrollCorner(pictureBuilder.context(), interestRect);
|
|
|
| - // Replay the painted scrollbar content with the GraphicsLayer backing as the DisplayItemClient
|
| - // in order for the resulting DrawingDisplayItem to produce the correct visualRect (i.e., the
|
| - // bounds of the involved GraphicsLayer).
|
| + // Replay the painted scrollbar content with the GraphicsLayer backing as the
|
| + // DisplayItemClient in order for the resulting DrawingDisplayItem to produce
|
| + // the correct visualRect (i.e., the bounds of the involved GraphicsLayer).
|
| DrawingRecorder drawingRecorder(context, *graphicsLayer,
|
| DisplayItem::kScrollbarCompositedScrollbar,
|
| layerBounds);
|
| @@ -956,7 +977,8 @@ bool PaintLayerCompositor::needsFixedRootBackgroundLayer(
|
| }
|
|
|
| GraphicsLayer* PaintLayerCompositor::fixedRootBackgroundLayer() const {
|
| - // Get the fixed root background from the LayoutView layer's compositedLayerMapping.
|
| + // Get the fixed root background from the LayoutView layer's
|
| + // compositedLayerMapping.
|
| PaintLayer* viewLayer = m_layoutView.layer();
|
| if (!viewLayer)
|
| return nullptr;
|
| @@ -1023,8 +1045,9 @@ bool PaintLayerCompositor::requiresScrollCornerLayer() const {
|
|
|
| void PaintLayerCompositor::updateOverflowControlsLayers() {
|
| GraphicsLayer* controlsParent = m_overflowControlsHostLayer.get();
|
| - // Main frame scrollbars should always be stuck to the sides of the screen (in overscroll and in pinch-zoom), so
|
| - // make the parent for the scrollbars be the viewport container layer.
|
| + // Main frame scrollbars should always be stuck to the sides of the screen (in
|
| + // overscroll and in pinch-zoom), so make the parent for the scrollbars be the
|
| + // viewport container layer.
|
| if (m_layoutView.frame()->isMainFrame()) {
|
| VisualViewport& visualViewport =
|
| m_layoutView.frameView()->page()->frameHost().visualViewport();
|
| @@ -1213,8 +1236,9 @@ void PaintLayerCompositor::attachRootLayer(RootLayerAttachment attachment) {
|
| HTMLFrameOwnerElement* ownerElement =
|
| m_layoutView.document().localOwner();
|
| ASSERT(ownerElement);
|
| - // The layer will get hooked up via CompositedLayerMapping::updateGraphicsLayerConfiguration()
|
| - // for the frame's layoutObject in the parent document.
|
| + // The layer will get hooked up via
|
| + // CompositedLayerMapping::updateGraphicsLayerConfiguration() for the
|
| + // frame's layoutObject in the parent document.
|
| ownerElement->setNeedsCompositingUpdate();
|
| break;
|
| }
|
| @@ -1229,8 +1253,9 @@ void PaintLayerCompositor::detachRootLayer() {
|
|
|
| switch (m_rootLayerAttachment) {
|
| case RootLayerAttachedViaEnclosingFrame: {
|
| - // The layer will get unhooked up via CompositedLayerMapping::updateGraphicsLayerConfiguration()
|
| - // for the frame's layoutObject in the parent document.
|
| + // The layer will get unhooked up via
|
| + // CompositedLayerMapping::updateGraphicsLayerConfiguration() for the
|
| + // frame's layoutObject in the parent document.
|
| if (m_overflowControlsHostLayer)
|
| m_overflowControlsHostLayer->removeFromParent();
|
| else
|
|
|