Bug 1344971 - Part 5: Don't track multiple DLBI rects for nsDisplayBorder. r?mstange draft
authorMatt Woodrow <mwoodrow@mozilla.com>
Tue, 07 Mar 2017 14:07:33 +1300
changeset 494305 43b3f8d994a0f2e085ff3b827fa6e2b989359721
parent 494304 a711a499b9174c5531cf51106979e0d937a74a3d
child 494306 97530ab7ea2df876c9b41236cc475ec7c7753354
push id48011
push usermwoodrow@mozilla.com
push dateTue, 07 Mar 2017 01:18:12 +0000
reviewersmstange
bugs1344971
milestone55.0a1
Bug 1344971 - Part 5: Don't track multiple DLBI rects for nsDisplayBorder. r?mstange We shouldn't need both of those, any reflow should trigger them both to change, and a style change would set the invalid bit on the frame. MozReview-Commit-ID: IOlY0LB4N4G
layout/painting/nsDisplayList.cpp
layout/painting/nsDisplayListInvalidation.cpp
layout/painting/nsDisplayListInvalidation.h
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -4531,18 +4531,17 @@ nsDisplayBorder::AllocateGeometry(nsDisp
 void
 nsDisplayBorder::ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder,
                                            const nsDisplayItemGeometry* aGeometry,
                                            nsRegion* aInvalidRegion)
 {
   const nsDisplayBorderGeometry* geometry = static_cast<const nsDisplayBorderGeometry*>(aGeometry);
   bool snap;
 
-  if (!geometry->mBounds.IsEqualInterior(GetBounds(aBuilder, &snap)) ||
-      !geometry->mContentRect.IsEqualInterior(GetContentRect())) {
+  if (!geometry->mBounds.IsEqualInterior(GetBounds(aBuilder, &snap))) {
     // We can probably get away with only invalidating the difference
     // between the border and padding rects, but the XUL ui at least
     // is apparently painting a background with this?
     aInvalidRegion->Or(GetBounds(aBuilder, &snap), geometry->mBounds);
   }
 
   if (aBuilder->ShouldSyncDecodeImages() &&
       geometry->ShouldInvalidateToSyncDecodeImages()) {
--- a/layout/painting/nsDisplayListInvalidation.cpp
+++ b/layout/painting/nsDisplayListInvalidation.cpp
@@ -43,26 +43,18 @@ nsDisplayItemBoundsGeometry::nsDisplayIt
 {
   nscoord radii[8];
   mHasRoundedCorners = aItem->Frame()->GetBorderRadii(radii);
 }
 
 nsDisplayBorderGeometry::nsDisplayBorderGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder)
   : nsDisplayItemGeometry(aItem, aBuilder)
   , nsImageGeometryMixin(aItem, aBuilder)
-  , mContentRect(aItem->GetContentRect())
 {}
 
-void
-nsDisplayBorderGeometry::MoveBy(const nsPoint& aOffset)
-{
-  nsDisplayItemGeometry::MoveBy(aOffset);
-  mContentRect.MoveBy(aOffset);
-}
-
 nsDisplayBackgroundGeometry::nsDisplayBackgroundGeometry(nsDisplayBackgroundImage* aItem,
                                                          nsDisplayListBuilder* aBuilder)
   : nsDisplayItemGeometry(aItem, aBuilder)
   , nsImageGeometryMixin(aItem, aBuilder)
   , mPositioningArea(aItem->GetPositioningArea())
   , mDestRect(aItem->GetDestRect())
 {}
 
--- a/layout/painting/nsDisplayListInvalidation.h
+++ b/layout/painting/nsDisplayListInvalidation.h
@@ -181,20 +181,16 @@ public:
 };
 
 class nsDisplayBorderGeometry
   : public nsDisplayItemGeometry
   , public nsImageGeometryMixin<nsDisplayBorderGeometry>
 {
 public:
   nsDisplayBorderGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder);
-
-  virtual void MoveBy(const nsPoint& aOffset) override;
-
-  nsRect mContentRect;
 };
 
 class nsDisplayBackgroundGeometry
   : public nsDisplayItemGeometry
   , public nsImageGeometryMixin<nsDisplayBackgroundGeometry>
 {
 public:
   nsDisplayBackgroundGeometry(nsDisplayBackgroundImage* aItem, nsDisplayListBuilder* aBuilder);