Bug 1834079 - Move stroke fallback heuristic to after we attempt AA-Stroke. r=jrmuizel

We have a heuristic that falls back from stroking certain paths with acceleration because
both WGR and the texture cache can have slow output as the size of the path increases in
screen area. AA-Stroke tends to have better output for these paths, or at least, this heuristic
tends to have a detrimental effect on AA-Stroke usage and performance in important tests.
Lets move the heuristic to after we use AA-Stroke for now.

Differential Revision: https://phabricator.services.mozilla.com/D178549
This commit is contained in:
Lee Salzman 2023-05-20 02:30:12 +00:00
Родитель dc797352d3
Коммит 82c989cfaf
8 изменённых файлов: 23 добавлений и 14 удалений

Просмотреть файл

@ -3024,14 +3024,6 @@ bool DrawTargetWebgl::SharedContext::DrawPathAccel(
} }
// Nudge the bounds to account for the quantization rounding. // Nudge the bounds to account for the quantization rounding.
Rect quantBounds = Rect(intBounds) + (realOrigin - quantizedOrigin); Rect quantBounds = Rect(intBounds) + (realOrigin - quantizedOrigin);
// If a stroke path covers too much screen area, it is likely that most is
// empty space in the interior. This usually imposes too high a cost versus
// just rasterizing without acceleration.
if (aStrokeOptions &&
intBounds.width * intBounds.height >
(mViewportSize.width / 2) * (mViewportSize.height / 2)) {
return false;
}
// If the pattern is a solid color, then this will be used along with a path // If the pattern is a solid color, then this will be used along with a path
// mask to render the path, as opposed to baking the pattern into the cached // mask to render the path, as opposed to baking the pattern into the cached
// path texture. // path texture.
@ -3221,6 +3213,17 @@ bool DrawTargetWebgl::SharedContext::DrawPathAccel(
} }
} }
// If a stroke path covers too much screen area, it is likely that most is
// empty space in the interior. This usually imposes too high a cost versus
// just rasterizing without acceleration. Note that AA-Stroke generally
// produces more acceptable amounts of geometry for larger paths, so we do
// this heuristic after we attempt AA-Stroke.
if (aStrokeOptions &&
intBounds.width * intBounds.height >
(mViewportSize.width / 2) * (mViewportSize.height / 2)) {
return false;
}
// If there isn't a valid texture handle, then we need to rasterize the // If there isn't a valid texture handle, then we need to rasterize the
// path in a software canvas and upload this to a texture. Solid color // path in a software canvas and upload this to a texture. Solid color
// patterns will be rendered as a path mask that can then be modulated // patterns will be rendered as a path mask that can then be modulated

Просмотреть файл

@ -1,5 +1,5 @@
== bug863728-1.html bug863728-1-ref.html == bug863728-1.html bug863728-1-ref.html
fuzzy(0-1,0-10) fuzzy-if(winWidget&&browserIsFission,47-137,211-251) == bug863728-2.html bug863728-2-ref.html # fission: bug 1717838 fuzzy(0-128,0-281) fuzzy-if(winWidget&&browserIsFission,47-137,211-251) == bug863728-2.html bug863728-2-ref.html # fission: bug 1717838
== bug863728-3.html bug863728-3-ref.html == bug863728-3.html bug863728-3-ref.html
== bug945215-1.html bug945215-1-ref.html == bug945215-1.html bug945215-1-ref.html
fuzzy(0-1,0-10) fuzzy-if(winWidget&&browserIsFission,47-137,211-251) == bug945215-2.html bug945215-2-ref.html # fission: bug 1717838 fuzzy(0-128,0-281) fuzzy-if(winWidget&&browserIsFission,47-137,211-251) == bug945215-2.html bug945215-2-ref.html # fission: bug 1717838

Просмотреть файл

@ -165,7 +165,7 @@ fuzzy(0-95,0-2206) == attachment-local-clipping-image-5.html attachment-local-cl
fuzzy(0-109,0-908) fuzzy-if(geckoview&&device,64-64,2010-2830) == attachment-local-clipping-image-6.html attachment-local-clipping-image-6-ref.html fuzzy(0-109,0-908) fuzzy-if(geckoview&&device,64-64,2010-2830) == attachment-local-clipping-image-6.html attachment-local-clipping-image-6-ref.html
fuzzy(0-1,0-84) == background-multiple-with-border-radius.html background-multiple-with-border-radius-ref.html fuzzy(0-1,0-84) == background-multiple-with-border-radius.html background-multiple-with-border-radius-ref.html
fuzzy(0-11,0-49600) fails-if(useDrawSnapshot) == background-repeat-large-area.html background-repeat-large-area-ref.html # bug 1734383 fuzzy(0-74,0-49600) fails-if(useDrawSnapshot) == background-repeat-large-area.html background-repeat-large-area-ref.html # bug 1734383
fuzzy(0-31,0-474) fails-if(useDrawSnapshot) == background-tiling-zoom-1.html background-tiling-zoom-1-ref.html # drawSnapshot doesn't deal with zoom properly fuzzy(0-31,0-474) fails-if(useDrawSnapshot) == background-tiling-zoom-1.html background-tiling-zoom-1-ref.html # drawSnapshot doesn't deal with zoom properly

Просмотреть файл

@ -1166,7 +1166,7 @@ fails-if(Android) == 455826-1.html 455826-1-ref.html
== chrome://reftest/content/bugs/456147.xhtml 456147-ref.html == chrome://reftest/content/bugs/456147.xhtml 456147-ref.html
fuzzy(24-110,110-800) == 456219-1a.html 456219-1-ref.html # bug 1128229 fuzzy(24-110,110-800) == 456219-1a.html 456219-1-ref.html # bug 1128229
fuzzy(24-110,107-1251) == 456219-1b.html 456219-1-ref.html # bug 1128229 fuzzy(24-110,107-1251) == 456219-1b.html 456219-1-ref.html # bug 1128229
fuzzy(24-110,107-2940) == 456219-1c.html 456219-1-ref.html # bug 1128229 fuzzy(24-110,107-3051) == 456219-1c.html 456219-1-ref.html # bug 1128229
fuzzy(0-10,0-8) == 456219-2.html 456219-2-ref.html fuzzy(0-10,0-8) == 456219-2.html 456219-2-ref.html
== 456330-1.gif 456330-1-ref.png == 456330-1.gif 456330-1-ref.png
== 456484-1.html 456484-1-ref.html == 456484-1.html 456484-1-ref.html

Просмотреть файл

@ -165,7 +165,7 @@ test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animati
test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") == partial-prerender-translate-4.html partial-prerender-expansion-ref.html test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") == partial-prerender-translate-4.html partial-prerender-expansion-ref.html
# This reftest doesn't fail on WebRender, this reftest fails only if there is a jank mechanism and the mechanism does inproperly handle position:fixed scroll target # This reftest doesn't fail on WebRender, this reftest fails only if there is a jank mechanism and the mechanism does inproperly handle position:fixed scroll target
test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") == partial-prerender-translate-5.html partial-prerender-translate-5-ref.html test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") == partial-prerender-translate-5.html partial-prerender-translate-5-ref.html
random-if(useDrawSnapshot) test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") fuzzy(0-46,0-1250) fuzzy-if(Android,0-255,0-9900) random-if(gtkWidget&&isDebugBuild) == partial-prerender-translate-6.html partial-prerender-translate-6-ref.html skip-if(useDrawSnapshot) test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") fuzzy(0-46,0-1250) fuzzy-if(Android,0-255,0-9900) random-if(gtkWidget&&isDebugBuild) random-if(useDrawSnapshot) == partial-prerender-translate-6.html partial-prerender-translate-6-ref.html
test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") fuzzy(0-4,0-1200) == partial-prerender-translate-7.html partial-prerender-translate-2-ref.html test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") fuzzy(0-4,0-1200) == partial-prerender-translate-7.html partial-prerender-translate-2-ref.html
# This reftest doesn't fail on WebRender, this reftest fails only if there is a jank mechanism and the mechanism doesn't properly clip transform in iframes. # This reftest doesn't fail on WebRender, this reftest fails only if there is a jank mechanism and the mechanism doesn't properly clip transform in iframes.
test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") == partial-prerender-translate-8.html partial-prerender-translate-8-ref.html test-pref(layout.animation.prerender.partial.jank,true) test-pref(layout.animation.prerender.partial,true) test-pref(layout.animation.prerender.viewport-ratio-limit,"1.125") == partial-prerender-translate-8.html partial-prerender-translate-8-ref.html

Просмотреть файл

@ -1,3 +1,3 @@
[position-fixed-scroll-nested-fixed.html] [position-fixed-scroll-nested-fixed.html]
expected: expected:
if os == "android": FAIL if os == "android": [PASS, FAIL]

Просмотреть файл

@ -0,0 +1,3 @@
[offset-path-ray-contain-004.html]
fuzzy:
maxDifference=0-1;totalPixels=0-50

Просмотреть файл

@ -0,0 +1,3 @@
[devicepixel.html]
fuzzy:
maxDifference=0-191;totalPixels=0-2188