Log Message
Use posZOrderList() / negZOrderList() everywhere to avoid querying dirtied lists https://bugs.webkit.org/show_bug.cgi?id=86416
Reviewed by Simon Fraser. Covered by existing tests that are not ASSERTing after this change. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): * rendering/RenderLayer.cpp: (WebCore::RenderLayer::update3DTransformedDescendantStatus): Added a call to updateZOrderLists() to the previous sites as nothing guarantees that we have recomputed our z-order lists. (WebCore::RenderLayer::paintLayerContents): (WebCore::RenderLayer::hitTestLayer): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::needsContentsCompositingLayer): Converted those functions to use the safe getters. * rendering/RenderLayer.h: (WebCore::RenderLayer::hasNegativeZOrderList): Newly added funtion to return if we have a negative z-order list.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (117161 => 117162)
--- trunk/Source/WebCore/ChangeLog 2012-05-15 21:29:19 UTC (rev 117161)
+++ trunk/Source/WebCore/ChangeLog 2012-05-15 21:33:41 UTC (rev 117162)
@@ -1,3 +1,29 @@
+2012-05-15 Julien Chaffraix <[email protected]>
+
+ Use posZOrderList() / negZOrderList() everywhere to avoid querying dirtied lists
+ https://bugs.webkit.org/show_bug.cgi?id=86416
+
+ Reviewed by Simon Fraser.
+
+ Covered by existing tests that are not ASSERTing after this change.
+
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::update3DTransformedDescendantStatus):
+ Added a call to updateZOrderLists() to the previous sites as nothing guarantees
+ that we have recomputed our z-order lists.
+
+ (WebCore::RenderLayer::paintLayerContents):
+ (WebCore::RenderLayer::hitTestLayer):
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::needsContentsCompositingLayer):
+ Converted those functions to use the safe getters.
+
+ * rendering/RenderLayer.h:
+ (WebCore::RenderLayer::hasNegativeZOrderList):
+ Newly added funtion to return if we have a negative z-order list.
+
2012-05-15 Abhishek Arya <[email protected]>
Crash due shadow tree parent confusion in SVG.
Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (117161 => 117162)
--- trunk/Source/WebCore/rendering/RenderLayer.cpp 2012-05-15 21:29:19 UTC (rev 117161)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp 2012-05-15 21:33:41 UTC (rev 117162)
@@ -741,17 +741,19 @@
if (m_3DTransformedDescendantStatusDirty) {
m_has3DTransformedDescendant = false;
+ updateZOrderLists();
+
// Transformed or preserve-3d descendants can only be in the z-order lists, not
// in the normal flow list, so we only need to check those.
- if (m_posZOrderList) {
- for (unsigned i = 0; i < m_posZOrderList->size(); ++i)
- m_has3DTransformedDescendant |= m_posZOrderList->at(i)->update3DTransformedDescendantStatus();
+ if (Vector<RenderLayer*>* positiveZOrderList = posZOrderList()) {
+ for (unsigned i = 0; i < positiveZOrderList->size(); ++i)
+ m_has3DTransformedDescendant |= positiveZOrderList->at(i)->update3DTransformedDescendantStatus();
}
// Now check our negative z-index children.
- if (m_negZOrderList) {
- for (unsigned i = 0; i < m_negZOrderList->size(); ++i)
- m_has3DTransformedDescendant |= m_negZOrderList->at(i)->update3DTransformedDescendantStatus();
+ if (Vector<RenderLayer*>* negativeZOrderList = negZOrderList()) {
+ for (unsigned i = 0; i < negativeZOrderList->size(); ++i)
+ m_has3DTransformedDescendant |= negativeZOrderList->at(i)->update3DTransformedDescendantStatus();
}
m_3DTransformedDescendantStatusDirty = false;
@@ -3087,7 +3089,7 @@
}
// Now walk the sorted list of children with negative z-indices.
- paintList(m_negZOrderList, rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags);
+ paintList(negZOrderList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags);
}
if (localPaintFlags & PaintLayerPaintingCompositingForegroundPhase) {
@@ -3134,7 +3136,7 @@
paintList(m_normalFlowList, rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags);
// Now walk the sorted list of children with positive z-indices.
- paintList(m_posZOrderList, rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags);
+ paintList(posZOrderList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags);
}
if ((localPaintFlags & PaintLayerPaintingCompositingMaskPhase) && shouldPaintContent && renderer()->hasMask() && !selectionOnly) {
@@ -3553,7 +3555,7 @@
RenderLayer* candidateLayer = 0;
// Begin by walking our list of positive layers from highest z-index down to the lowest z-index.
- RenderLayer* hitLayer = hitTestList(m_posZOrderList, rootLayer, request, result, hitTestRect, hitTestPoint,
+ RenderLayer* hitLayer = hitTestList(posZOrderList(), rootLayer, request, result, hitTestRect, hitTestPoint,
localTransformState.get(), zOffsetForDescendantsPtr, zOffset, unflattenedTransformState.get(), depthSortDescendants);
if (hitLayer) {
if (!depthSortDescendants)
@@ -3589,7 +3591,7 @@
}
// Now check our negative z-index children.
- hitLayer = hitTestList(m_negZOrderList, rootLayer, request, result, hitTestRect, hitTestPoint,
+ hitLayer = hitTestList(negZOrderList(), rootLayer, request, result, hitTestRect, hitTestPoint,
localTransformState.get(), zOffsetForDescendantsPtr, zOffset, unflattenedTransformState.get(), depthSortDescendants);
if (hitLayer) {
if (!depthSortDescendants)
Modified: trunk/Source/WebCore/rendering/RenderLayer.h (117161 => 117162)
--- trunk/Source/WebCore/rendering/RenderLayer.h 2012-05-15 21:29:19 UTC (rev 117161)
+++ trunk/Source/WebCore/rendering/RenderLayer.h 2012-05-15 21:33:41 UTC (rev 117162)
@@ -394,6 +394,8 @@
return m_posZOrderList;
}
+ bool hasNegativeZOrderList() const { return negZOrderList() && negZOrderList()->size(); }
+
Vector<RenderLayer*>* negZOrderList() const
{
ASSERT(!m_zOrderListsDirty);
Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (117161 => 117162)
--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2012-05-15 21:29:19 UTC (rev 117161)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2012-05-15 21:33:41 UTC (rev 117162)
@@ -325,6 +325,8 @@
RenderLayerCompositor* compositor = this->compositor();
RenderObject* renderer = this->renderer();
+ m_owningLayer->updateZOrderLists();
+
bool layerConfigChanged = false;
if (updateForegroundLayer(compositor->needsContentsCompositingLayer(m_owningLayer)))
layerConfigChanged = true;
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (117161 => 117162)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2012-05-15 21:29:19 UTC (rev 117161)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2012-05-15 21:33:41 UTC (rev 117162)
@@ -1748,7 +1748,7 @@
// object.
bool RenderLayerCompositor::needsContentsCompositingLayer(const RenderLayer* layer) const
{
- return (layer->m_negZOrderList && layer->m_negZOrderList->size() > 0);
+ return layer->hasNegativeZOrderList();
}
bool RenderLayerCompositor::requiresScrollLayer(RootLayerAttachment attachment) const
_______________________________________________ webkit-changes mailing list [email protected] http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes
