Changeset 142012 in webkit
- Timestamp:
- Feb 6, 2013 11:35:21 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r142007 r142012 1 2013-02-06 Shawn Singh <shawnsingh@chromium.org> 2 3 RenderLayer hasVisibleContent() has inconsistent semantics causing disappearing composited layers 4 https://bugs.webkit.org/show_bug.cgi?id=108118 5 6 Reviewed by Simon Fraser. 7 8 * compositing/visibility/visibility-on-distant-descendant-expected.png: Added. 9 * compositing/visibility/visibility-on-distant-descendant-expected.txt: Added. 10 * compositing/visibility/visibility-on-distant-descendant.html: Added. 11 1 12 2013-02-06 Gregg Tavares <gman@chromium.org> 2 13 -
trunk/Source/WebCore/ChangeLog
r142005 r142012 1 2013-02-06 Shawn Singh <shawnsingh@chromium.org> 2 3 RenderLayer hasVisibleContent() has inconsistent semantics causing disappearing composited layers 4 https://bugs.webkit.org/show_bug.cgi?id=108118 5 6 Reviewed by Simon Fraser. 7 8 RenderLayerBacking::hasVisibleNonCompositingDescendantLayers was 9 only checking whether direct children had visible content. As a 10 result, composited layers had wrong visibility status if only a 11 deeper descendant RenderLayer was visible. 12 13 Test: compositing/visibility/visibility-on-distant-descendant.html 14 15 * rendering/RenderLayerBacking.cpp: 16 (WebCore::hasVisibleNonCompositingDescendant): copied the original 17 implementation into this function; then added the RenderLayer 18 recursion as appropriate. 19 (WebCore): 20 (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers): 21 This is now just a wrapper to the private static recursive 22 function. 23 1 24 2013-02-06 Jonathon Jongsma <jonathon.jongsma@collabora.com> 2 25 -
trunk/Source/WebCore/rendering/RenderLayerBacking.cpp
r141570 r142012 1430 1430 } 1431 1431 1432 // Conservative test for having no rendered children. 1433 bool RenderLayerBacking::hasVisibleNonCompositingDescendantLayers() const 1434 { 1435 // FIXME: We shouldn't be called with a stale z-order lists. See bug 85512. 1436 m_owningLayer->updateLayerListsIfNeeded(); 1437 1438 #if !ASSERT_DISABLED 1439 LayerListMutationDetector mutationChecker(m_owningLayer); 1440 #endif 1441 1442 if (Vector<RenderLayer*>* normalFlowList = m_owningLayer->normalFlowList()) { 1432 static bool hasVisibleNonCompositingDescendant(RenderLayer* parent) 1433 { 1434 if (Vector<RenderLayer*>* normalFlowList = parent->normalFlowList()) { 1443 1435 size_t listSize = normalFlowList->size(); 1444 1436 for (size_t i = 0; i < listSize; ++i) { 1445 1437 RenderLayer* curLayer = normalFlowList->at(i); 1446 if (!curLayer->isComposited() && curLayer->hasVisibleContent()) 1438 if (!curLayer->isComposited() 1439 && (curLayer->hasVisibleContent() || hasVisibleNonCompositingDescendant(curLayer))) 1447 1440 return true; 1448 1441 } 1449 1442 } 1450 1443 1451 if ( m_owningLayer->isStackingContainer()) {1452 if (! m_owningLayer->hasVisibleDescendant())1444 if (parent->isStackingContainer()) { 1445 if (!parent->hasVisibleDescendant()) 1453 1446 return false; 1454 1447 1455 1448 // Use the m_hasCompositingDescendant bit to optimize? 1456 if (Vector<RenderLayer*>* negZOrderList = m_owningLayer->negZOrderList()) {1449 if (Vector<RenderLayer*>* negZOrderList = parent->negZOrderList()) { 1457 1450 size_t listSize = negZOrderList->size(); 1458 1451 for (size_t i = 0; i < listSize; ++i) { 1459 1452 RenderLayer* curLayer = negZOrderList->at(i); 1460 if (!curLayer->isComposited() && curLayer->hasVisibleContent()) 1453 if (!curLayer->isComposited() 1454 && (curLayer->hasVisibleContent() || hasVisibleNonCompositingDescendant(curLayer))) 1461 1455 return true; 1462 1456 } 1463 1457 } 1464 1458 1465 if (Vector<RenderLayer*>* posZOrderList = m_owningLayer->posZOrderList()) {1459 if (Vector<RenderLayer*>* posZOrderList = parent->posZOrderList()) { 1466 1460 size_t listSize = posZOrderList->size(); 1467 1461 for (size_t i = 0; i < listSize; ++i) { 1468 1462 RenderLayer* curLayer = posZOrderList->at(i); 1469 if (!curLayer->isComposited() && curLayer->hasVisibleContent()) 1463 if (!curLayer->isComposited() 1464 && (curLayer->hasVisibleContent() || hasVisibleNonCompositingDescendant(curLayer))) 1470 1465 return true; 1471 1466 } … … 1474 1469 1475 1470 return false; 1471 } 1472 1473 // Conservative test for having no rendered children. 1474 bool RenderLayerBacking::hasVisibleNonCompositingDescendantLayers() const 1475 { 1476 // FIXME: We shouldn't be called with a stale z-order lists. See bug 85512. 1477 m_owningLayer->updateLayerListsIfNeeded(); 1478 1479 #if !ASSERT_DISABLED 1480 LayerListMutationDetector mutationChecker(m_owningLayer); 1481 #endif 1482 1483 return hasVisibleNonCompositingDescendant(m_owningLayer); 1476 1484 } 1477 1485
Note: See TracChangeset
for help on using the changeset viewer.