Bug 1365333 - Avoid quadratic performance in nsDisplayLayerEventRegions::AddFrame() when the maybe-hit region has many rects. r=tnikkel draft
authorBotond Ballo <botond@mozilla.com>
Wed, 31 May 2017 14:42:59 -0400
changeset 587205 07201ca9b9728e9b1fa77755614ce8cd95753430
parent 587183 5892eea589227df0511e63bc260d99ece9cbf9a4
child 587396 1ab1d812674d321d76e634953284b3983774d798
push id61663
push userbballo@mozilla.com
push dateWed, 31 May 2017 19:10:00 +0000
reviewerstnikkel
bugs1365333
milestone55.0a1
Bug 1365333 - Avoid quadratic performance in nsDisplayLayerEventRegions::AddFrame() when the maybe-hit region has many rects. r=tnikkel MozReview-Commit-ID: 99QrhFpHw15
layout/painting/nsDisplayList.cpp
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -4417,16 +4417,20 @@ nsDisplayLayerEventRegions::AddFrame(nsD
     if (clip->GetRoundedRectCount() > 0) {
       borderBoxHasRoundedCorners = true;
     }
   }
 
   if (borderBoxHasRoundedCorners ||
       (aFrame->GetStateBits() & NS_FRAME_SVG_LAYOUT)) {
     mMaybeHitRegion.Or(mMaybeHitRegion, borderBox);
+
+    // Avoid quadratic performance as a result of the region growing to include
+    // an arbitrarily large number of rects, which can happen on some pages.
+    mMaybeHitRegion.SimplifyOutward(8);
   } else {
     mHitRegion.Or(mHitRegion, borderBox);
   }
 
   if (aBuilder->IsBuildingNonLayerizedScrollbar() ||
       aBuilder->GetAncestorHasApzAwareEventHandler())
   {
     // Scrollbars may be painted into a layer below the actual layer they will