Changeset 140999 in webkit
- Timestamp:
- Jan 28, 2013 1:18:14 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r140997 r140999 1 2013-01-28 Ian Vollick <vollick@chromium.org> 2 3 Promote composited-scrolling layers to stacking containers. 4 https://bugs.webkit.org/show_bug.cgi?id=106142 5 6 Reviewed by Simon Fraser. 7 8 With this patch, RenderLayers that use composited scrolling are 9 treated as stacking contexts. Since isStackingContainer now depends on 10 the value of m_needsCompositedScrolling, special care needed to be 11 taken to ensure that the value of isStackingContainer is not used when 12 updating m_needsCompositedScrolling. In particular, the code for 13 rebuilding the layer lists needed to be generalized so that we could 14 build the layer lists using the value of isStackingContext rather than 15 isStackingContainer when building the layer lists used to determine if 16 the descendants are contiguous in stacking order. Also, updating 17 m_needsCompositedScrolling can now affect stacking container status 18 and can therefore dirty layer lists. 19 20 * compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: Added. 21 * compositing/overflow/composited-scrolling-creates-a-stacking-container.html: Added. 22 * platform/chromium/TestExpectations: 23 * platform/mac/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: Added. 24 1 25 2013-01-28 Max Vujovic <mvujovic@adobe.com> 2 26 -
trunk/LayoutTests/platform/chromium/TestExpectations
r140956 r140999 3608 3608 webkit.org/b/103156 platform/chromium/virtual/gpu/compositedscrolling/scrollbars/custom-scrollbar-with-incomplete-style.html [ ImageOnlyFailure ] 3609 3609 3610 # Requires an updated baseline after 106142. 3611 webkit.org/b/106820 platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-scroll.html [ Failure ] 3612 3610 3613 # Fails due to Bug 85856. 3611 3614 webkit.org/b/85856 [ Win Mac Android ] fast/block/float/028.html [ ImageOnlyFailure ] -
trunk/Source/WebCore/ChangeLog
r140997 r140999 1 2013-01-28 Ian Vollick <vollick@chromium.org> 2 3 Promote composited-scrolling layers to stacking containers. 4 https://bugs.webkit.org/show_bug.cgi?id=106142 5 6 Reviewed by Simon Fraser. 7 8 With this patch, RenderLayers that use composited scrolling are 9 treated as stacking contexts. Since isStackingContainer now depends on 10 the value of m_needsCompositedScrolling, special care needed to be 11 taken to ensure that the value of isStackingContainer is not used when 12 updating m_needsCompositedScrolling. In particular, the code for 13 rebuilding the layer lists needed to be generalized so that we could 14 build the layer lists using the value of isStackingContext rather than 15 isStackingContainer when building the layer lists used to determine if 16 the descendants are contiguous in stacking order. Also, updating 17 m_needsCompositedScrolling can now affect stacking container status 18 and can therefore dirty layer lists. 19 20 Test: compositing/overflow/composited-scrolling-creates-a-stacking-container.html 21 22 * rendering/RenderLayer.cpp: 23 (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder): 24 Modified to use layer lists built based on isStackingContext rather 25 than isStackingContainer. 26 (WebCore::RenderLayer::updateNeedsCompositedScrolling): 27 This function can now affect stacking container status and layer 28 lists. 29 (WebCore::RenderLayer::rebuildZOrderLists): 30 Refactored to generalize layer list building. 31 (WebCore::RenderLayer::collectLayers): 32 This function can now stop at either stacking containers or 33 contexts. 34 (WebCore::RenderLayer::updateLayerListsIfNeeded): 35 Layer lists may need to be built a 2nd time if we opt into 36 composited scrolling. 37 * rendering/RenderLayer.h: 38 (RenderLayer): 39 (WebCore::RenderLayer::isStackingContainer): 40 Returns true if we use composited scrolling. 41 1 42 2013-01-28 Max Vujovic <mvujovic@adobe.com> 2 43 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r140749 r140999 608 608 ASSERT(!m_zOrderListsDirty); 609 609 610 OwnPtr<Vector<RenderLayer*> > posZOrderList; 611 OwnPtr<Vector<RenderLayer*> > negZOrderList; 612 rebuildZOrderLists(StopAtStackingContexts, posZOrderList, negZOrderList); 613 610 614 // Create a reverse lookup. 611 615 HashMap<const RenderLayer*, int> lookup; 612 616 613 if ( m_negZOrderList) {617 if (negZOrderList) { 614 618 int stackingOrderIndex = -1; 615 size_t listSize = m_negZOrderList->size();619 size_t listSize = negZOrderList->size(); 616 620 for (size_t i = 0; i < listSize; ++i) { 617 RenderLayer* currentLayer = m_negZOrderList->at(listSize - i - 1);621 RenderLayer* currentLayer = negZOrderList->at(listSize - i - 1); 618 622 if (!currentLayer->isStackingContext()) 619 623 continue; … … 622 626 } 623 627 624 if ( m_posZOrderList) {625 size_t listSize = m_posZOrderList->size();628 if (posZOrderList) { 629 size_t listSize = posZOrderList->size(); 626 630 int stackingOrderIndex = 1; 627 631 for (size_t i = 0; i < listSize; ++i) { 628 RenderLayer* currentLayer = m_posZOrderList->at(i);632 RenderLayer* currentLayer = posZOrderList->at(i); 629 633 if (!currentLayer->isStackingContext()) 630 634 continue; … … 1925 1929 } 1926 1930 1927 if (oldNeedsCompositedScrolling != m_needsCompositedScrolling) 1931 if (oldNeedsCompositedScrolling != m_needsCompositedScrolling) { 1928 1932 updateSelfPaintingLayer(); 1933 if (isStackingContainer()) 1934 dirtyZOrderLists(); 1935 else 1936 clearZOrderLists(); 1937 1938 dirtyStackingContainerZOrderLists(); 1939 1940 compositor()->setShouldReevaluateCompositingAfterLayout(); 1941 compositor()->setCompositingLayersNeedRebuild(); 1942 } 1929 1943 } 1930 1944 #endif … … 5161 5175 ASSERT(m_layerListMutationAllowed); 5162 5176 ASSERT(isDirtyStackingContainer()); 5163 5177 rebuildZOrderLists(StopAtStackingContainers, m_posZOrderList, m_negZOrderList); 5178 m_zOrderListsDirty = false; 5179 } 5180 5181 void RenderLayer::rebuildZOrderLists(CollectLayersBehavior behavior, OwnPtr<Vector<RenderLayer*> >& posZOrderList, OwnPtr<Vector<RenderLayer*> >& negZOrderList) 5182 { 5164 5183 #if USE(ACCELERATED_COMPOSITING) 5165 5184 bool includeHiddenLayers = compositor()->inCompositingMode(); … … 5169 5188 for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) 5170 5189 if (!m_reflection || reflectionLayer() != child) 5171 child->collectLayers(includeHiddenLayers, m_posZOrderList, m_negZOrderList);5190 child->collectLayers(includeHiddenLayers, behavior, posZOrderList, negZOrderList); 5172 5191 5173 5192 // Sort the two lists. 5174 if ( m_posZOrderList)5175 std::stable_sort( m_posZOrderList->begin(), m_posZOrderList->end(), compareZIndex);5176 5177 if ( m_negZOrderList)5178 std::stable_sort( m_negZOrderList->begin(), m_negZOrderList->end(), compareZIndex);5193 if (posZOrderList) 5194 std::stable_sort(posZOrderList->begin(), posZOrderList->end(), compareZIndex); 5195 5196 if (negZOrderList) 5197 std::stable_sort(negZOrderList->begin(), negZOrderList->end(), compareZIndex); 5179 5198 5180 5199 #if ENABLE(DIALOG_ELEMENT) … … 5187 5206 if (childElement && childElement->isInTopLayer()) { 5188 5207 RenderLayer* layer = toRenderLayerModelObject(child)->layer(); 5189 m_posZOrderList->append(layer);5208 posZOrderList->append(layer); 5190 5209 } 5191 5210 } … … 5193 5212 #endif 5194 5213 5195 m_zOrderListsDirty = false;5196 5214 } 5197 5215 … … 5215 5233 } 5216 5234 5217 void RenderLayer::collectLayers(bool includeHiddenLayers, OwnPtr<Vector<RenderLayer*> >& posBuffer, OwnPtr<Vector<RenderLayer*> >& negBuffer)5235 void RenderLayer::collectLayers(bool includeHiddenLayers, CollectLayersBehavior behavior, OwnPtr<Vector<RenderLayer*> >& posBuffer, OwnPtr<Vector<RenderLayer*> >& negBuffer) 5218 5236 { 5219 5237 #if ENABLE(DIALOG_ELEMENT) … … 5224 5242 updateDescendantDependentFlags(); 5225 5243 5226 bool isStacking = isStackingContainer();5244 bool isStacking = behavior == StopAtStackingContexts ? isStackingContext() : isStackingContainer(); 5227 5245 // Overflow layers are just painted by their enclosing layers, so they don't get put in zorder lists. 5228 5246 bool includeHiddenLayer = includeHiddenLayers || (m_hasVisibleContent || (m_hasVisibleDescendant && isStacking)); … … 5245 5263 // Ignore reflections. 5246 5264 if (!m_reflection || reflectionLayer() != child) 5247 child->collectLayers(includeHiddenLayers, posBuffer, negBuffer);5265 child->collectLayers(includeHiddenLayers, behavior, posBuffer, negBuffer); 5248 5266 } 5249 5267 } … … 5253 5271 { 5254 5272 bool shouldUpdateDescendantsAreContiguousInStackingOrder = isStackingContext() && (m_zOrderListsDirty || m_normalFlowListDirty); 5255 5256 5273 updateZOrderLists(); 5257 5274 updateNormalFlowList(); … … 5262 5279 } 5263 5280 5264 if (shouldUpdateDescendantsAreContiguousInStackingOrder) 5281 if (shouldUpdateDescendantsAreContiguousInStackingOrder) { 5265 5282 updateDescendantsAreContiguousInStackingOrder(); 5283 // The above function can cause us to update m_needsCompositedScrolling 5284 // and dirty our layer lists. Refresh them if necessary. 5285 updateZOrderLists(); 5286 updateNormalFlowList(); 5287 } 5266 5288 } 5267 5289 -
trunk/Source/WebCore/rendering/RenderLayer.h
r140749 r140999 433 433 434 434 // A stacking container can have z-order lists. All stacking contexts are 435 // stacking containers, but the converse is not true. 436 bool isStackingContainer() const { return isStackingContext(); } 435 // stacking containers, but the converse is not true. Layers that use 436 // composited scrolling are stacking containers, but they may not 437 // necessarily be stacking contexts. 438 bool isStackingContainer() const { return isStackingContext() || needsCompositedScrolling(); } 437 439 438 440 // Gets the enclosing stacking container for this layer. … … 760 762 761 763 private: 764 enum CollectLayersBehavior { StopAtStackingContexts, StopAtStackingContainers }; 765 762 766 void updateZOrderLists(); 763 767 void rebuildZOrderLists(); 768 void rebuildZOrderLists(CollectLayersBehavior, OwnPtr<Vector<RenderLayer*> >&, OwnPtr<Vector<RenderLayer*> >&); 764 769 void clearZOrderLists(); 765 770 … … 832 837 LayoutUnit renderBoxY() const { return renderBoxLocation().y(); } 833 838 834 void collectLayers(bool includeHiddenLayers, OwnPtr<Vector<RenderLayer*> >&, OwnPtr<Vector<RenderLayer*> >&);839 void collectLayers(bool includeHiddenLayers, CollectLayersBehavior, OwnPtr<Vector<RenderLayer*> >&, OwnPtr<Vector<RenderLayer*> >&); 835 840 836 841 void updateCompositingAndLayerListsIfNeeded();
Note: See TracChangeset
for help on using the changeset viewer.