Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp

Issue 2569253002: Revert "Fix border radius on composited children." (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 PaintLayer* oldSquashedLayer = m_squashedLayers[i].paintLayer; 195 PaintLayer* oldSquashedLayer = m_squashedLayers[i].paintLayer;
196 // Assert on incorrect mappings between layers and groups 196 // Assert on incorrect mappings between layers and groups
197 ASSERT(oldSquashedLayer->groupedMapping() == this); 197 ASSERT(oldSquashedLayer->groupedMapping() == this);
198 if (oldSquashedLayer->groupedMapping() == this) { 198 if (oldSquashedLayer->groupedMapping() == this) {
199 oldSquashedLayer->setGroupedMapping( 199 oldSquashedLayer->setGroupedMapping(
200 0, PaintLayer::DoNotInvalidateLayerAndRemoveFromMapping); 200 0, PaintLayer::DoNotInvalidateLayerAndRemoveFromMapping);
201 oldSquashedLayer->setLostGroupedMapping(true); 201 oldSquashedLayer->setLostGroupedMapping(true);
202 } 202 }
203 } 203 }
204 204
205 updateClippingLayers(false, false, false); 205 updateClippingLayers(false, false);
206 updateOverflowControlsLayers(false, false, false, false); 206 updateOverflowControlsLayers(false, false, false, false);
207 updateChildTransformLayer(false); 207 updateChildTransformLayer(false);
208 updateForegroundLayer(false); 208 updateForegroundLayer(false);
209 updateBackgroundLayer(false); 209 updateBackgroundLayer(false);
210 updateMaskLayer(false); 210 updateMaskLayer(false);
211 updateChildClippingMaskLayer(false); 211 updateChildClippingMaskLayer(false);
212 updateScrollingLayers(false); 212 updateScrollingLayers(false);
213 updateSquashingLayers(false); 213 updateSquashingLayers(false);
214 destroyGraphicsLayers(); 214 destroyGraphicsLayers();
215 } 215 }
(...skipping 23 matching lines...) Expand all
239 updateStickyConstraints(layoutObject()->styleRef()); 239 updateStickyConstraints(layoutObject()->styleRef());
240 updateLayerBlendMode(layoutObject()->styleRef()); 240 updateLayerBlendMode(layoutObject()->styleRef());
241 updateIsRootForIsolatedGroup(); 241 updateIsRootForIsolatedGroup();
242 } 242 }
243 243
244 void CompositedLayerMapping::destroyGraphicsLayers() { 244 void CompositedLayerMapping::destroyGraphicsLayers() {
245 if (m_graphicsLayer) 245 if (m_graphicsLayer)
246 m_graphicsLayer->removeFromParent(); 246 m_graphicsLayer->removeFromParent();
247 247
248 m_ancestorClippingLayer = nullptr; 248 m_ancestorClippingLayer = nullptr;
249 m_ancestorClippingMaskLayer = nullptr;
250 m_graphicsLayer = nullptr; 249 m_graphicsLayer = nullptr;
251 m_foregroundLayer = nullptr; 250 m_foregroundLayer = nullptr;
252 m_backgroundLayer = nullptr; 251 m_backgroundLayer = nullptr;
253 m_childContainmentLayer = nullptr; 252 m_childContainmentLayer = nullptr;
254 m_childTransformLayer = nullptr; 253 m_childTransformLayer = nullptr;
255 m_maskLayer = nullptr; 254 m_maskLayer = nullptr;
256 m_childClippingMaskLayer = nullptr; 255 m_childClippingMaskLayer = nullptr;
257 256
258 m_scrollingLayer = nullptr; 257 m_scrollingLayer = nullptr;
259 m_scrollingContentsLayer = nullptr; 258 m_scrollingContentsLayer = nullptr;
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 } 465 }
467 466
468 void CompositedLayerMapping::updateCompositingReasons() { 467 void CompositedLayerMapping::updateCompositingReasons() {
469 // All other layers owned by this mapping will have the same compositing 468 // All other layers owned by this mapping will have the same compositing
470 // reason for their lifetime, so they are initialized only when created. 469 // reason for their lifetime, so they are initialized only when created.
471 m_graphicsLayer->setCompositingReasons(m_owningLayer.getCompositingReasons()); 470 m_graphicsLayer->setCompositingReasons(m_owningLayer.getCompositingReasons());
472 m_graphicsLayer->setSquashingDisallowedReasons( 471 m_graphicsLayer->setSquashingDisallowedReasons(
473 m_owningLayer.getSquashingDisallowedReasons()); 472 m_owningLayer.getSquashingDisallowedReasons());
474 } 473 }
475 474
476 void CompositedLayerMapping:: 475 bool CompositedLayerMapping::
477 owningLayerClippedOrMaskedByLayerNotAboveCompositedAncestor( 476 owningLayerClippedByLayerNotAboveCompositedAncestor(
478 const PaintLayer* scrollParent, 477 const PaintLayer* scrollParent) {
479 bool& owningLayerIsClipped,
480 bool& owningLayerIsMasked) {
481 owningLayerIsClipped = false;
482 owningLayerIsMasked = false;
483
484 if (!m_owningLayer.parent()) 478 if (!m_owningLayer.parent())
485 return; 479 return false;
486 480
487 const PaintLayer* compositingAncestor = 481 const PaintLayer* compositingAncestor =
488 m_owningLayer.enclosingLayerWithCompositedLayerMapping(ExcludeSelf); 482 m_owningLayer.enclosingLayerWithCompositedLayerMapping(ExcludeSelf);
489 if (!compositingAncestor) 483 if (!compositingAncestor)
490 return; 484 return false;
491 485
492 const LayoutObject* clippingContainer = m_owningLayer.clippingContainer(); 486 const LayoutObject* clippingContainer = m_owningLayer.clippingContainer();
493 if (!clippingContainer) 487 if (!clippingContainer)
494 return; 488 return false;
495 489
496 if (clippingContainer->enclosingLayer() == scrollParent) 490 if (clippingContainer->enclosingLayer() == scrollParent)
497 return; 491 return false;
498 492
499 if (clippingContainer->enclosingLayer()->hasRootScrollerAsDescendant()) 493 if (clippingContainer->enclosingLayer()->hasRootScrollerAsDescendant())
500 return; 494 return false;
501 495
502 if (compositingAncestor->layoutObject()->isDescendantOf(clippingContainer)) 496 if (compositingAncestor->layoutObject()->isDescendantOf(clippingContainer))
503 return; 497 return false;
504 498
505 // We ignore overflow clip here; we want composited overflow content to 499 // We ignore overflow clip here; we want composited overflow content to
506 // behave as if it lives in an unclipped universe so it can prepaint, etc. 500 // behave as if it lives in an unclipped universe so it can prepaint, etc.
507 // This means that we need to check if we are actually clipped before 501 // This means that we need to check if we are actually clipped before
508 // setting up m_ancestorClippingLayer otherwise 502 // setting up m_ancestorClippingLayer otherwise
509 // updateAncestorClippingLayerGeometry will fail as the clip rect will be 503 // updateAncestorClippingLayerGeometry will fail as the clip rect will be
510 // infinite. 504 // infinite.
511 // FIXME: this should use cached clip rects, but this sometimes give 505 // FIXME: this should use cached clip rects, but this sometimes give
512 // inaccurate results (and trips the ASSERTS in PaintLayerClipper). 506 // inaccurate results (and trips the ASSERTS in PaintLayerClipper).
513 ClipRectsContext clipRectsContext(compositingAncestor, UncachedClipRects, 507 ClipRectsContext clipRectsContext(compositingAncestor, UncachedClipRects,
514 IgnoreOverlayScrollbarSize); 508 IgnoreOverlayScrollbarSize);
515 clipRectsContext.setIgnoreOverflowClip(); 509 clipRectsContext.setIgnoreOverflowClip();
516 IntRect parentClipRect = pixelSnappedIntRect( 510 IntRect parentClipRect = pixelSnappedIntRect(
517 m_owningLayer.clipper().backgroundClipRect(clipRectsContext).rect()); 511 m_owningLayer.clipper().backgroundClipRect(clipRectsContext).rect());
518 owningLayerIsClipped = parentClipRect != LayoutRect::infiniteIntRect(); 512 return parentClipRect != LayoutRect::infiniteIntRect();
519
520 // TODO(schenney): CSS clips are not applied to composited children, and
521 // should be via mask or by compositing the parent too.
522 // https://bugs.chromium.org/p/chromium/issues/detail?id=615870
523 DCHECK(clippingContainer->style());
524 owningLayerIsMasked =
525 owningLayerIsClipped && clippingContainer->style()->hasBorderRadius();
526 } 513 }
527 514
528 const PaintLayer* CompositedLayerMapping::scrollParent() { 515 const PaintLayer* CompositedLayerMapping::scrollParent() {
529 const PaintLayer* scrollParent = m_owningLayer.scrollParent(); 516 const PaintLayer* scrollParent = m_owningLayer.scrollParent();
530 if (scrollParent && !scrollParent->needsCompositedScrolling()) 517 if (scrollParent && !scrollParent->needsCompositedScrolling())
531 return nullptr; 518 return nullptr;
532 return scrollParent; 519 return scrollParent;
533 } 520 }
534 521
535 bool CompositedLayerMapping::updateGraphicsLayerConfiguration() { 522 bool CompositedLayerMapping::updateGraphicsLayerConfiguration() {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 needsDescendantsClippingLayer = false; 558 needsDescendantsClippingLayer = false;
572 559
573 const PaintLayer* scrollParent = this->scrollParent(); 560 const PaintLayer* scrollParent = this->scrollParent();
574 561
575 // This is required because compositing layers are parented according to the 562 // This is required because compositing layers are parented according to the
576 // z-order hierarchy, yet clipping goes down the layoutObject hierarchy. Thus, 563 // z-order hierarchy, yet clipping goes down the layoutObject hierarchy. Thus,
577 // a PaintLayer can be clipped by a PaintLayer that is an ancestor in the 564 // a PaintLayer can be clipped by a PaintLayer that is an ancestor in the
578 // layoutObject hierarchy, but a sibling in the z-order hierarchy. Further, 565 // layoutObject hierarchy, but a sibling in the z-order hierarchy. Further,
579 // that sibling need not be composited at all. In such scenarios, an ancestor 566 // that sibling need not be composited at all. In such scenarios, an ancestor
580 // clipping layer is necessary to apply the composited clip for this layer. 567 // clipping layer is necessary to apply the composited clip for this layer.
581 bool needsAncestorClip = false; 568 bool needsAncestorClip =
582 bool needsAncestorClippingMask = false; 569 owningLayerClippedByLayerNotAboveCompositedAncestor(scrollParent);
583 owningLayerClippedOrMaskedByLayerNotAboveCompositedAncestor( 570
584 scrollParent, needsAncestorClip, needsAncestorClippingMask); 571 if (updateClippingLayers(needsAncestorClip, needsDescendantsClippingLayer))
585 if (updateClippingLayers(needsAncestorClip, needsAncestorClippingMask,
586 needsDescendantsClippingLayer))
587 layerConfigChanged = true; 572 layerConfigChanged = true;
588 573
589 bool scrollingConfigChanged = false; 574 bool scrollingConfigChanged = false;
590 if (updateScrollingLayers(m_owningLayer.needsCompositedScrolling())) { 575 if (updateScrollingLayers(m_owningLayer.needsCompositedScrolling())) {
591 layerConfigChanged = true; 576 layerConfigChanged = true;
592 scrollingConfigChanged = true; 577 scrollingConfigChanged = true;
593 } 578 }
594 579
595 // If the outline needs to draw over the composited scrolling contents layer 580 // If the outline needs to draw over the composited scrolling contents layer
596 // or scrollbar layers it needs to be drawn into a separate layer. 581 // or scrollbar layers it needs to be drawn into a separate layer.
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 m_ancestorClippingLayer->setPosition( 1093 m_ancestorClippingLayer->setPosition(
1109 FloatPoint(parentClipRect.location() - graphicsLayerParentLocation)); 1094 FloatPoint(parentClipRect.location() - graphicsLayerParentLocation));
1110 m_ancestorClippingLayer->setSize(FloatSize(parentClipRect.size())); 1095 m_ancestorClippingLayer->setSize(FloatSize(parentClipRect.size()));
1111 1096
1112 // backgroundRect is relative to compositingContainer, so subtract 1097 // backgroundRect is relative to compositingContainer, so subtract
1113 // snappedOffsetFromCompositedAncestor.X/snappedOffsetFromCompositedAncestor.Y 1098 // snappedOffsetFromCompositedAncestor.X/snappedOffsetFromCompositedAncestor.Y
1114 // to get back to local coords. 1099 // to get back to local coords.
1115 m_ancestorClippingLayer->setOffsetFromLayoutObject( 1100 m_ancestorClippingLayer->setOffsetFromLayoutObject(
1116 parentClipRect.location() - snappedOffsetFromCompositedAncestor); 1101 parentClipRect.location() - snappedOffsetFromCompositedAncestor);
1117 1102
1118 if (m_ancestorClippingMaskLayer) {
1119 m_ancestorClippingMaskLayer->setOffsetFromLayoutObject(
1120 m_ancestorClippingLayer->offsetFromLayoutObject());
1121 m_ancestorClippingMaskLayer->setSize(m_ancestorClippingLayer->size());
1122 m_ancestorClippingMaskLayer->setNeedsDisplay();
1123 }
1124
1125 // The primary layer is then parented in, and positioned relative to this 1103 // The primary layer is then parented in, and positioned relative to this
1126 // clipping layer. 1104 // clipping layer.
1127 graphicsLayerParentLocation = parentClipRect.location(); 1105 graphicsLayerParentLocation = parentClipRect.location();
1128 } 1106 }
1129 1107
1130 void CompositedLayerMapping::updateOverflowControlsHostLayerGeometry( 1108 void CompositedLayerMapping::updateOverflowControlsHostLayerGeometry(
1131 const PaintLayer* compositingStackingContext, 1109 const PaintLayer* compositingStackingContext,
1132 const PaintLayer* compositingContainer, 1110 const PaintLayer* compositingContainer,
1133 IntPoint graphicsLayerParentLocation) { 1111 IntPoint graphicsLayerParentLocation) {
1134 if (!m_overflowControlsHostLayer) 1112 if (!m_overflowControlsHostLayer)
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after
1666 // layer (i.e. if there is nothing actually drawn into the 1644 // layer (i.e. if there is nothing actually drawn into the
1667 // background anymore.) 1645 // background anymore.)
1668 // "hasPaintedContent" should be calculated in a way that does not take the 1646 // "hasPaintedContent" should be calculated in a way that does not take the
1669 // outline into consideration. 1647 // outline into consideration.
1670 if (m_backgroundLayer) 1648 if (m_backgroundLayer)
1671 m_backgroundLayer->setDrawsContent(hasPaintedContent); 1649 m_backgroundLayer->setDrawsContent(hasPaintedContent);
1672 1650
1673 if (m_decorationOutlineLayer) 1651 if (m_decorationOutlineLayer)
1674 m_decorationOutlineLayer->setDrawsContent(true); 1652 m_decorationOutlineLayer->setDrawsContent(true);
1675 1653
1676 if (m_ancestorClippingMaskLayer)
1677 m_ancestorClippingMaskLayer->setDrawsContent(true);
1678
1679 if (m_maskLayer) 1654 if (m_maskLayer)
1680 m_maskLayer->setDrawsContent(true); 1655 m_maskLayer->setDrawsContent(true);
1681 1656
1682 if (m_childClippingMaskLayer) 1657 if (m_childClippingMaskLayer)
1683 m_childClippingMaskLayer->setDrawsContent(true); 1658 m_childClippingMaskLayer->setDrawsContent(true);
1684 } 1659 }
1685 1660
1686 void CompositedLayerMapping::updateChildrenTransform() { 1661 void CompositedLayerMapping::updateChildrenTransform() {
1687 if (GraphicsLayer* childTransformLayer = this->childTransformLayer()) { 1662 if (GraphicsLayer* childTransformLayer = this->childTransformLayer()) {
1688 childTransformLayer->setTransform(owningLayer().perspectiveTransform()); 1663 childTransformLayer->setTransform(owningLayer().perspectiveTransform());
1689 childTransformLayer->setTransformOrigin(owningLayer().perspectiveOrigin()); 1664 childTransformLayer->setTransformOrigin(owningLayer().perspectiveOrigin());
1690 } 1665 }
1691 1666
1692 updateShouldFlattenTransform(); 1667 updateShouldFlattenTransform();
1693 } 1668 }
1694 1669
1695 // Return true if the layers changed. 1670 // Return true if the layers changed.
1696 bool CompositedLayerMapping::updateClippingLayers( 1671 bool CompositedLayerMapping::updateClippingLayers(bool needsAncestorClip,
1697 bool needsAncestorClip, 1672 bool needsDescendantClip) {
1698 bool needsAncestorClippingMask,
1699 bool needsDescendantClip) {
1700 bool layersChanged = false; 1673 bool layersChanged = false;
1701 1674
1702 if (needsAncestorClip) { 1675 if (needsAncestorClip) {
1703 if (!m_ancestorClippingLayer) { 1676 if (!m_ancestorClippingLayer) {
1704 m_ancestorClippingLayer = 1677 m_ancestorClippingLayer =
1705 createGraphicsLayer(CompositingReasonLayerForAncestorClip); 1678 createGraphicsLayer(CompositingReasonLayerForAncestorClip);
1706 m_ancestorClippingLayer->setMasksToBounds(true); 1679 m_ancestorClippingLayer->setMasksToBounds(true);
1707 m_ancestorClippingLayer->setShouldFlattenTransform(false); 1680 m_ancestorClippingLayer->setShouldFlattenTransform(false);
1708 layersChanged = true; 1681 layersChanged = true;
1709 } 1682 }
1710 } else if (m_ancestorClippingLayer) { 1683 } else if (m_ancestorClippingLayer) {
1711 if (m_ancestorClippingMaskLayer) {
1712 m_ancestorClippingMaskLayer->removeFromParent();
1713 m_ancestorClippingMaskLayer = nullptr;
1714 }
1715 m_ancestorClippingLayer->removeFromParent(); 1684 m_ancestorClippingLayer->removeFromParent();
1716 m_ancestorClippingLayer = nullptr; 1685 m_ancestorClippingLayer = nullptr;
1717 layersChanged = true; 1686 layersChanged = true;
1718 } 1687 }
1719 1688
1720 if (needsAncestorClippingMask) {
1721 DCHECK(m_ancestorClippingLayer);
1722 if (!m_ancestorClippingMaskLayer) {
1723 m_ancestorClippingMaskLayer =
1724 createGraphicsLayer(CompositingReasonLayerForAncestorClippingMask);
1725 m_ancestorClippingMaskLayer->setPaintingPhase(
1726 GraphicsLayerPaintAncestorClippingMask);
1727 m_ancestorClippingLayer->setMaskLayer(m_ancestorClippingMaskLayer.get());
1728 layersChanged = true;
1729 }
1730 } else if (m_ancestorClippingMaskLayer) {
1731 m_ancestorClippingMaskLayer->removeFromParent();
1732 m_ancestorClippingMaskLayer = nullptr;
1733 m_ancestorClippingLayer->setMaskLayer(nullptr);
1734 layersChanged = true;
1735 }
1736
1737 if (needsDescendantClip) { 1689 if (needsDescendantClip) {
1738 // We don't need a child containment layer if we're the main frame layout 1690 // We don't need a child containment layer if we're the main frame layout
1739 // view layer. It's redundant as the frame clip above us will handle this 1691 // view layer. It's redundant as the frame clip above us will handle this
1740 // clipping. 1692 // clipping.
1741 if (!m_childContainmentLayer && !m_isMainFrameLayoutViewLayer) { 1693 if (!m_childContainmentLayer && !m_isMainFrameLayoutViewLayer) {
1742 m_childContainmentLayer = 1694 m_childContainmentLayer =
1743 createGraphicsLayer(CompositingReasonLayerForDescendantClip); 1695 createGraphicsLayer(CompositingReasonLayerForDescendantClip);
1744 m_childContainmentLayer->setMasksToBounds(true); 1696 m_childContainmentLayer->setMasksToBounds(true);
1745 layersChanged = true; 1697 layersChanged = true;
1746 } 1698 }
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1956 f(mapping->squashingLayer()); 1908 f(mapping->squashingLayer());
1957 1909
1958 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers) || 1910 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers) ||
1959 (mode & ApplyToNonScrollingContentLayers)) && 1911 (mode & ApplyToNonScrollingContentLayers)) &&
1960 mapping->maskLayer()) 1912 mapping->maskLayer())
1961 f(mapping->maskLayer()); 1913 f(mapping->maskLayer());
1962 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers) || 1914 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers) ||
1963 (mode & ApplyToNonScrollingContentLayers)) && 1915 (mode & ApplyToNonScrollingContentLayers)) &&
1964 mapping->childClippingMaskLayer()) 1916 mapping->childClippingMaskLayer())
1965 f(mapping->childClippingMaskLayer()); 1917 f(mapping->childClippingMaskLayer());
1966 if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers) ||
1967 (mode & ApplyToNonScrollingContentLayers)) &&
1968 mapping->ancestorClippingMaskLayer())
1969 f(mapping->ancestorClippingMaskLayer());
1970 1918
1971 if (((mode & ApplyToBackgroundLayer) || (mode & ApplyToContentLayers) || 1919 if (((mode & ApplyToBackgroundLayer) || (mode & ApplyToContentLayers) ||
1972 (mode & ApplyToNonScrollingContentLayers)) && 1920 (mode & ApplyToNonScrollingContentLayers)) &&
1973 mapping->backgroundLayer()) 1921 mapping->backgroundLayer())
1974 f(mapping->backgroundLayer()); 1922 f(mapping->backgroundLayer());
1975 1923
1976 if ((mode & ApplyToScrollbarLayers) && mapping->layerForHorizontalScrollbar()) 1924 if ((mode & ApplyToScrollbarLayers) && mapping->layerForHorizontalScrollbar())
1977 f(mapping->layerForHorizontalScrollbar()); 1925 f(mapping->layerForHorizontalScrollbar());
1978 if ((mode & ApplyToScrollbarLayers) && mapping->layerForVerticalScrollbar()) 1926 if ((mode & ApplyToScrollbarLayers) && mapping->layerForVerticalScrollbar())
1979 f(mapping->layerForVerticalScrollbar()); 1927 f(mapping->layerForVerticalScrollbar());
(...skipping 15 matching lines...) Expand all
1995 1943
1996 void CompositedLayerMapping::updateRenderingContext() { 1944 void CompositedLayerMapping::updateRenderingContext() {
1997 // All layers but the squashing layer (which contains 'alien' content) should 1945 // All layers but the squashing layer (which contains 'alien' content) should
1998 // be included in this rendering context. 1946 // be included in this rendering context.
1999 int id = 0; 1947 int id = 0;
2000 1948
2001 // NB, it is illegal at this point to query an ancestor's compositing state. 1949 // NB, it is illegal at this point to query an ancestor's compositing state.
2002 // Some compositing reasons depend on the compositing state of ancestors. So 1950 // Some compositing reasons depend on the compositing state of ancestors. So
2003 // if we want a rendering context id for the context root, we cannot ask for 1951 // if we want a rendering context id for the context root, we cannot ask for
2004 // the id of its associated WebLayer now; it may not have one yet. We could do 1952 // the id of its associated WebLayer now; it may not have one yet. We could do
2005 // a second pass after doing the compositing updates to get these ids, but 1953 // a second past after doing the compositing updates to get these ids, but
2006 // this would actually be harmful. We do not want to attach any semantic 1954 // this would actually be harmful. We do not want to attach any semantic
2007 // meaning to the context id other than the fact that they group a number of 1955 // meaning to the context id other than the fact that they group a number of
2008 // layers together for the sake of 3d sorting. So instead we will ask the 1956 // layers together for the sake of 3d sorting. So instead we will ask the
2009 // compositor to vend us an arbitrary, but consistent id. 1957 // compositor to vend us an arbitrary, but consistent id.
2010 if (PaintLayer* root = m_owningLayer.renderingContextRoot()) { 1958 if (PaintLayer* root = m_owningLayer.renderingContextRoot()) {
2011 if (Node* node = root->layoutObject()->node()) 1959 if (Node* node = root->layoutObject()->node())
2012 id = static_cast<int>(PtrHash<Node>::hash(node)); 1960 id = static_cast<int>(PtrHash<Node>::hash(node));
2013 } 1961 }
2014 1962
2015 UpdateRenderingContextFunctor functor = {id}; 1963 UpdateRenderingContextFunctor functor = {id};
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
2299 // Only the topmost layer has a scroll parent. All other layers have a null 2247 // Only the topmost layer has a scroll parent. All other layers have a null
2300 // scroll parent. 2248 // scroll parent.
2301 if (layer != topmostLayer) 2249 if (layer != topmostLayer)
2302 clipParent = 0; 2250 clipParent = 0;
2303 2251
2304 scrollingCoordinator->updateClipParentForGraphicsLayer(layer, clipParent); 2252 scrollingCoordinator->updateClipParentForGraphicsLayer(layer, clipParent);
2305 } 2253 }
2306 2254
2307 void CompositedLayerMapping::updateClipParent(const PaintLayer* scrollParent) { 2255 void CompositedLayerMapping::updateClipParent(const PaintLayer* scrollParent) {
2308 const PaintLayer* clipParent = nullptr; 2256 const PaintLayer* clipParent = nullptr;
2309 bool haveAncestorClipLayer = false; 2257 if (!owningLayerClippedByLayerNotAboveCompositedAncestor(scrollParent)) {
2310 bool haveAncestorMaskLayer = false;
2311 owningLayerClippedOrMaskedByLayerNotAboveCompositedAncestor(
2312 scrollParent, haveAncestorClipLayer, haveAncestorMaskLayer);
2313 if (!haveAncestorClipLayer) {
2314 clipParent = m_owningLayer.clipParent(); 2258 clipParent = m_owningLayer.clipParent();
2315 if (clipParent) 2259 if (clipParent)
2316 clipParent = 2260 clipParent =
2317 clipParent->enclosingLayerWithCompositedLayerMapping(IncludeSelf); 2261 clipParent->enclosingLayerWithCompositedLayerMapping(IncludeSelf);
2318 } 2262 }
2319 2263
2320 if (ScrollingCoordinator* scrollingCoordinator = 2264 if (ScrollingCoordinator* scrollingCoordinator =
2321 scrollingCoordinatorFromLayer(m_owningLayer)) { 2265 scrollingCoordinatorFromLayer(m_owningLayer)) {
2322 GraphicsLayer* topmostLayer = childForSuperlayers(); 2266 GraphicsLayer* topmostLayer = childForSuperlayers();
2323 updateClipParentForGraphicsLayer(m_squashingContainmentLayer.get(), 2267 updateClipParentForGraphicsLayer(m_squashingContainmentLayer.get(),
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
2843 translation.translate(-offset.width(), -offset.height()); 2787 translation.translate(-offset.width(), -offset.height());
2844 TransformRecorder transformRecorder(context, graphicsLayer, translation); 2788 TransformRecorder transformRecorder(context, graphicsLayer, translation);
2845 2789
2846 // The dirtyRect is in the coords of the painting root. 2790 // The dirtyRect is in the coords of the painting root.
2847 IntRect dirtyRect(clip); 2791 IntRect dirtyRect(clip);
2848 dirtyRect.move(offset); 2792 dirtyRect.move(offset);
2849 2793
2850 if (!(paintLayerFlags & PaintLayerPaintingOverflowContents)) { 2794 if (!(paintLayerFlags & PaintLayerPaintingOverflowContents)) {
2851 LayoutRect bounds = paintInfo.compositedBounds; 2795 LayoutRect bounds = paintInfo.compositedBounds;
2852 bounds.move(paintInfo.paintLayer->subpixelAccumulation()); 2796 bounds.move(paintInfo.paintLayer->subpixelAccumulation());
2853 if (paintLayerFlags & PaintLayerPaintingAncestorClippingMaskPhase)
2854 bounds.move(offset);
2855 dirtyRect.intersect(pixelSnappedIntRect(bounds)); 2797 dirtyRect.intersect(pixelSnappedIntRect(bounds));
2856 } else { 2798 } else {
2857 dirtyRect.move( 2799 dirtyRect.move(
2858 roundedIntSize(paintInfo.paintLayer->subpixelAccumulation())); 2800 roundedIntSize(paintInfo.paintLayer->subpixelAccumulation()));
2859 } 2801 }
2860 2802
2861 #if DCHECK_IS_ON() 2803 #if DCHECK_IS_ON()
2862 if (!layoutObject()->view()->frame() || 2804 if (!layoutObject()->view()->frame() ||
2863 !layoutObject()->view()->frame()->shouldThrottleRendering()) 2805 !layoutObject()->view()->frame()->shouldThrottleRendering())
2864 paintInfo.paintLayer->layoutObject()->assertSubtreeIsLaidOut(); 2806 paintInfo.paintLayer->layoutObject()->assertSubtreeIsLaidOut();
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
3122 if (graphicsLayerPaintingPhase & GraphicsLayerPaintBackground) 3064 if (graphicsLayerPaintingPhase & GraphicsLayerPaintBackground)
3123 paintLayerFlags |= PaintLayerPaintingCompositingBackgroundPhase; 3065 paintLayerFlags |= PaintLayerPaintingCompositingBackgroundPhase;
3124 else 3066 else
3125 paintLayerFlags |= PaintLayerPaintingSkipRootBackground; 3067 paintLayerFlags |= PaintLayerPaintingSkipRootBackground;
3126 if (graphicsLayerPaintingPhase & GraphicsLayerPaintForeground) 3068 if (graphicsLayerPaintingPhase & GraphicsLayerPaintForeground)
3127 paintLayerFlags |= PaintLayerPaintingCompositingForegroundPhase; 3069 paintLayerFlags |= PaintLayerPaintingCompositingForegroundPhase;
3128 if (graphicsLayerPaintingPhase & GraphicsLayerPaintMask) 3070 if (graphicsLayerPaintingPhase & GraphicsLayerPaintMask)
3129 paintLayerFlags |= PaintLayerPaintingCompositingMaskPhase; 3071 paintLayerFlags |= PaintLayerPaintingCompositingMaskPhase;
3130 if (graphicsLayerPaintingPhase & GraphicsLayerPaintChildClippingMask) 3072 if (graphicsLayerPaintingPhase & GraphicsLayerPaintChildClippingMask)
3131 paintLayerFlags |= PaintLayerPaintingChildClippingMaskPhase; 3073 paintLayerFlags |= PaintLayerPaintingChildClippingMaskPhase;
3132 if (graphicsLayerPaintingPhase & GraphicsLayerPaintAncestorClippingMask)
3133 paintLayerFlags |= PaintLayerPaintingAncestorClippingMaskPhase;
3134 if (graphicsLayerPaintingPhase & GraphicsLayerPaintOverflowContents) 3074 if (graphicsLayerPaintingPhase & GraphicsLayerPaintOverflowContents)
3135 paintLayerFlags |= PaintLayerPaintingOverflowContents; 3075 paintLayerFlags |= PaintLayerPaintingOverflowContents;
3136 if (graphicsLayerPaintingPhase & GraphicsLayerPaintCompositedScroll) 3076 if (graphicsLayerPaintingPhase & GraphicsLayerPaintCompositedScroll)
3137 paintLayerFlags |= PaintLayerPaintingCompositingScrollingPhase; 3077 paintLayerFlags |= PaintLayerPaintingCompositingScrollingPhase;
3138 if (graphicsLayerPaintingPhase & GraphicsLayerPaintDecoration) 3078 if (graphicsLayerPaintingPhase & GraphicsLayerPaintDecoration)
3139 paintLayerFlags |= PaintLayerPaintingCompositingDecorationPhase; 3079 paintLayerFlags |= PaintLayerPaintingCompositingDecorationPhase;
3140 3080
3141 if (graphicsLayer == m_backgroundLayer.get()) 3081 if (graphicsLayer == m_backgroundLayer.get())
3142 paintLayerFlags |= PaintLayerPaintingRootBackgroundOnly; 3082 paintLayerFlags |= PaintLayerPaintingRootBackgroundOnly;
3143 else if (compositor()->fixedRootBackgroundLayer() && 3083 else if (compositor()->fixedRootBackgroundLayer() &&
3144 m_owningLayer.isRootLayer()) 3084 m_owningLayer.isRootLayer())
3145 paintLayerFlags |= PaintLayerPaintingSkipRootBackground; 3085 paintLayerFlags |= PaintLayerPaintingSkipRootBackground;
3146 3086
3147 if (graphicsLayer == m_graphicsLayer.get() || 3087 if (graphicsLayer == m_graphicsLayer.get() ||
3148 graphicsLayer == m_foregroundLayer.get() || 3088 graphicsLayer == m_foregroundLayer.get() ||
3149 graphicsLayer == m_backgroundLayer.get() || 3089 graphicsLayer == m_backgroundLayer.get() ||
3150 graphicsLayer == m_maskLayer.get() || 3090 graphicsLayer == m_maskLayer.get() ||
3151 graphicsLayer == m_childClippingMaskLayer.get() || 3091 graphicsLayer == m_childClippingMaskLayer.get() ||
3152 graphicsLayer == m_scrollingContentsLayer.get() || 3092 graphicsLayer == m_scrollingContentsLayer.get() ||
3153 graphicsLayer == m_decorationOutlineLayer.get() || 3093 graphicsLayer == m_decorationOutlineLayer.get()) {
3154 graphicsLayer == m_ancestorClippingMaskLayer.get()) {
3155 bool paintRootBackgroundOntoScrollingContentsLayer = 3094 bool paintRootBackgroundOntoScrollingContentsLayer =
3156 m_backgroundPaintsOntoScrollingContentsLayer; 3095 m_backgroundPaintsOntoScrollingContentsLayer;
3157 DCHECK(!paintRootBackgroundOntoScrollingContentsLayer || 3096 DCHECK(!paintRootBackgroundOntoScrollingContentsLayer ||
3158 (!m_backgroundLayer && !m_foregroundLayer)); 3097 (!m_backgroundLayer && !m_foregroundLayer));
3159 if (paintRootBackgroundOntoScrollingContentsLayer) { 3098 if (paintRootBackgroundOntoScrollingContentsLayer) {
3160 if (graphicsLayer == m_scrollingContentsLayer.get()) 3099 if (graphicsLayer == m_scrollingContentsLayer.get())
3161 paintLayerFlags &= ~PaintLayerPaintingSkipRootBackground; 3100 paintLayerFlags &= ~PaintLayerPaintingSkipRootBackground;
3162 else if (!m_backgroundPaintsOntoGraphicsLayer) 3101 else if (!m_backgroundPaintsOntoGraphicsLayer)
3163 paintLayerFlags |= PaintLayerPaintingSkipRootBackground; 3102 paintLayerFlags |= PaintLayerPaintingSkipRootBackground;
3164 } 3103 }
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
3399 } else if (graphicsLayer == m_squashingContainmentLayer.get()) { 3338 } else if (graphicsLayer == m_squashingContainmentLayer.get()) {
3400 name = "Squashing Containment Layer"; 3339 name = "Squashing Containment Layer";
3401 } else if (graphicsLayer == m_squashingLayer.get()) { 3340 } else if (graphicsLayer == m_squashingLayer.get()) {
3402 name = "Squashing Layer (first squashed layer: " + 3341 name = "Squashing Layer (first squashed layer: " +
3403 (m_squashedLayers.size() > 0 3342 (m_squashedLayers.size() > 0
3404 ? m_squashedLayers[0].paintLayer->debugName() 3343 ? m_squashedLayers[0].paintLayer->debugName()
3405 : "") + 3344 : "") +
3406 ")"; 3345 ")";
3407 } else if (graphicsLayer == m_ancestorClippingLayer.get()) { 3346 } else if (graphicsLayer == m_ancestorClippingLayer.get()) {
3408 name = "Ancestor Clipping Layer"; 3347 name = "Ancestor Clipping Layer";
3409 } else if (graphicsLayer == m_ancestorClippingMaskLayer.get()) {
3410 name = "Ancestor Clipping Mask Layer";
3411 } else if (graphicsLayer == m_foregroundLayer.get()) { 3348 } else if (graphicsLayer == m_foregroundLayer.get()) {
3412 name = m_owningLayer.debugName() + " (foreground) Layer"; 3349 name = m_owningLayer.debugName() + " (foreground) Layer";
3413 } else if (graphicsLayer == m_backgroundLayer.get()) { 3350 } else if (graphicsLayer == m_backgroundLayer.get()) {
3414 name = m_owningLayer.debugName() + " (background) Layer"; 3351 name = m_owningLayer.debugName() + " (background) Layer";
3415 } else if (graphicsLayer == m_childContainmentLayer.get()) { 3352 } else if (graphicsLayer == m_childContainmentLayer.get()) {
3416 name = "Child Containment Layer"; 3353 name = "Child Containment Layer";
3417 } else if (graphicsLayer == m_childTransformLayer.get()) { 3354 } else if (graphicsLayer == m_childTransformLayer.get()) {
3418 name = "Child Transform Layer"; 3355 name = "Child Transform Layer";
3419 } else if (graphicsLayer == m_maskLayer.get()) { 3356 } else if (graphicsLayer == m_maskLayer.get()) {
3420 name = "Mask Layer"; 3357 name = "Mask Layer";
(...skipping 16 matching lines...) Expand all
3437 } else if (graphicsLayer == m_decorationOutlineLayer.get()) { 3374 } else if (graphicsLayer == m_decorationOutlineLayer.get()) {
3438 name = "Decoration Layer"; 3375 name = "Decoration Layer";
3439 } else { 3376 } else {
3440 ASSERT_NOT_REACHED(); 3377 ASSERT_NOT_REACHED();
3441 } 3378 }
3442 3379
3443 return name; 3380 return name;
3444 } 3381 }
3445 3382
3446 } // namespace blink 3383 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698