gecko-dev/testing
Glenn Watson 9a83835d67 Bug 1749380 - Part 1 - Improve how WR handles bounding rects for off-screen surfaces r=gfx-reviewers
This patch introduces a number of subtle but important changes
to how we deal with off-screen surfaces. The overall goals are:

 - Improve rendering correctness in a number of edge cases.
 - Begin reducing complexity related to surfaces, scaling
   factors, surface size adjustments and clipping.
 - Improve CPU performance by removing some per-primitive work.
 - Simplify implementation of future SVG and CSS filters by
   having explicit support for picture rects + inflation regions.
 - Lay the groundwork for caching child picture surfaces,
   reduction of per-primitive work during visibility pass,
   simplifying picture code.

Unfortunately, the nature of the changes make it impossible to
split up in to small isolated patches. Details below:

* Introduce `LocalRectKind` concept. This allows us to separate
  out the bounding rect of the surface (a group of primitives
  backed by a texture) from the bounding rect of the picture
  compositing that surface (e.g. a drop-shadow which draws the
  surface once at the local origin and once at a specific offset
  + blur-radius). This fixes a number of correctness bugs we have
  related to culling, clipping, invalidation regions of complex
  primitives such as drop-shadows and blur filters. Importantly,
  it makes it simpler to implement (or fix) SVG filter chains,
  backdrop-filter implementations.

* Establish raster roots for all off-screen surfaces. Every off-screen
  surface uses the spatial node of the enclosing stacking context as
  a coordinate system root, ensuring that each off-screen surface is
  drawn in a 2D coordinate system, with appropriate scaling factors
  applied to ensure high quality rendering. The primary goal is to make
  it possible to correctly inflate and clip off-screen surfaces, removing
  some correctness issues we currently have with complex filters interacting
  with transforms. The initial work here doesn't reduce complexity a huge
  amount, but will allow us to simplify large parts of the picture/surface
  handling code in future, as well as simplify a number of shaders that
  currently must handle arbitrarily complex transform matrices. This will
  also allow us to simplify the implementation of features such as
  mix-blend-mode and backdrop-filter, which rely on readback and UV mapping
  from the parent surface.

* Remove concepts of `estimated` and `precise` local rects for pictures. This
  is both a performance optimization and a code simplification. Instead, we
  only determine the estimated local rect during bounding rect propagation,
  and rely on the clipping regions from the tile dirty regions to reduce which
  parts of the picture we allocate if drawing to an off-screen surface. This
  removes some per-primitive work during the visibility pass, and also means
  we can rely on the final picture bounding rect from the start of the visibility
  pass. This also removes much of the complexity in `take_context` where we
  previously determined surface scale factors and device pixel ratio - instead
  these can be determined earlier during `propagate_bounding_rects`.

* Remove some complexity in `update_prim_visibility`. This is still recursive,
  but follow up patches will aim to remove this recursion and integrate this
  pass with the picture graph (similar to how `propagate_bounding_rects` works).

* Remove `PictureOptions` struct. Instead, store `inflate_if_required` with
  the Blur filter enum, which is the only place that uses it.

* Remove `root_scaling_factor` from text runs - this is handled implicitly
  by the surface device-pixel scale.

* Skip calling `update_clip_task` for pass-through pictures (since they have
  no defined local rect).

* Improve scaling factors used for determining the render task cache size for
  complex line decorations.

Differential Revision: https://phabricator.services.mozilla.com/D137569
2022-02-23 20:49:26 +00:00
..
awsy Bug 1751239 Review and Update AWSY test owners r=perftest-reviewers,AlexandruIonescu 2022-01-31 13:18:33 +00:00
condprofile Bug 1753413 - fx doc: Remove whitespaces, trailing lines & windows CR r=andi,perftest-reviewers,sparky 2022-02-03 18:34:58 +00:00
config
crashtest Bug 1747114 - Test correctly for end-of-span before attempting to decode surrogate pair. r=m_kato 2021-12-24 09:29:20 +00:00
docs Bug 1740027 - Migrate "Test Verification" MDN doc to Firefox Source Docs. r=jmaher 2022-02-08 19:28:37 +00:00
extensions
firefox-ui Bug 1755088: Replace all usages of unittest deprecated aliases r=webdriver-reviewers,ahal,whimboo 2022-02-17 15:21:41 +00:00
fxrecord/perfdocs
geckodriver Bug 1751196 - [geckodriver] androidPackage and binary capabilities are mutual exclusive. r=webdriver-reviewers,jgraham 2022-02-03 18:56:16 +00:00
gtest Bug 1743907 - remove webrender from harnesses and taskcluster. r=MasterWayZ,webdriver-reviewers,perftest-reviewers,AlexandruIonescu,whimboo,ahal 2022-01-04 20:07:45 +00:00
jsshell
marionette Bug 1732795: Resolve upcoming pytest deprecations r=webdriver-reviewers,ahal,whimboo 2022-02-18 14:27:18 +00:00
mochitest Bug 1754613 - split a11y tests out of mochitest-browser-chrome into mochitest-browser-a11y. r=releng-reviewers,Jamie,gbrown 2022-02-15 16:47:57 +00:00
modules Bug 1754015 - Assert.jsm should throw when comparing a NaN number, r=Gijs. 2022-02-16 09:56:34 +00:00
mozbase Bug 1725622 - [mozdevice-rust] Add support for pulling a directory from the device. r=webdriver-reviewers,jgraham 2022-02-18 17:23:27 +00:00
mozharness Bug 1755088: Replace all usages of unittest deprecated aliases r=webdriver-reviewers,ahal,whimboo 2022-02-17 15:21:41 +00:00
perfdocs Bug 1756212 - Disable netflix temporarily due to perma on macOS r=perftest-reviewers,sparky 2022-02-23 18:21:22 +00:00
performance Bug 1749967 - Automated recording for android r=perftest-reviewers,sparky 2022-02-21 07:32:13 +00:00
profiles Backed out changeset f3359063687e (bug 1754955) for causing multiple wpt failures. CLOSED TREE 2022-02-23 07:12:23 +02:00
raptor Bug 1753592 - Update google-docs page load test to mitm7 and add secondary url r=perftest-reviewers,AlexandruIonescu 2022-02-11 11:00:40 +00:00
runtimes Bug 1754613 - split a11y tests out of mochitest-browser-chrome into mochitest-browser-a11y. r=releng-reviewers,Jamie,gbrown 2022-02-15 16:47:57 +00:00
specialpowers Bug 1753308 fix extension startup in tests, remove delayed startup pref r=rpl,robwu 2022-02-19 15:52:26 +00:00
talos Bug 1752593 - Poll for TopSitesFeed in Talos getInfo shutdown routine instead of assuming it exists. r=perftest-reviewers,sparky 2022-02-03 17:05:37 +00:00
tools Bug 1388894 - Replace list of mach modules to load with a dict of mach commands r=mhentges 2022-02-02 20:25:21 +00:00
tps Bug 1713137 - Fixed sync TPS tests r=markh 2022-02-08 23:46:03 +00:00
web-platform Bug 1749380 - Part 1 - Improve how WR handles bounding rects for off-screen surfaces r=gfx-reviewers 2022-02-23 20:49:26 +00:00
webcompat Bug 1756051 - add more site intervention tests; r=denschub 2022-02-22 15:59:02 +00:00
webdriver Bug 1732622 - Enable allowing given hosts and origins for geckodriver, r=webdriver-reviewers,freddyb,whimboo 2022-01-17 15:37:20 +00:00
xpcshell Bug 1756827 validate add_task properties r=jmaher,rpl 2022-02-23 18:22:32 +00:00
README.txt
addtest.py
cppunittest.ini
mach_commands.py Bug 1743907 - remove webrender from harnesses and taskcluster. r=MasterWayZ,webdriver-reviewers,perftest-reviewers,AlexandruIonescu,whimboo,ahal 2022-01-04 20:07:45 +00:00
moz.build
parse_build_tests_ccov.py
remotecppunittests.py Bug 1743907 - remove webrender from harnesses and taskcluster. r=MasterWayZ,webdriver-reviewers,perftest-reviewers,AlexandruIonescu,whimboo,ahal 2022-01-04 20:07:45 +00:00
runcppunittests.py Bug 1743907 - remove webrender from harnesses and taskcluster. r=MasterWayZ,webdriver-reviewers,perftest-reviewers,AlexandruIonescu,whimboo,ahal 2022-01-04 20:07:45 +00:00
testinfo.py
testsuite-targets.mk

README.txt

Common testing tools for mozilla codebase projects, test suite definitions
for automated test runs, tests that don't fit anywhere else, and other fun
stuff