Remove the last mixed-inheritance ComputedStyle groups.

The “svg” group is the only one left that have both inherited
and non-inherited members/subgroups, and thus may need to be
pieced together anew as opposed to just (lazily) copied.
We do some moves to remedy this:

 - Move “svg->svginherited” to the top.
 - Move the other inherited subgroups of “svg” into subgroups
   on “svginherited”.
 - Move Font from the top to “inherited” to not make
   ComputedStyle any bigger. (It was moved to the top at a
   point where Font wasn't on Oilpan and things were generally
   slightly different from today.)

Also add an assertion so that we don't introduce this anew
inadvertently.

We tried a couple of different alternatives (that involved
e.g. not moving Font), but this one seemed to benchmark
slightly better.

Style perftest (Zen 3, LTO but no PGO):

  Initial style (µs)     Before     After    Perf      95% CI (BCa)
  =================== ========= ========= ======= =================
  ECommerce                5532      5446   +1.6%  [ +1.1%,  +2.3%]
  Encyclopedia            43587     43650   -0.1%  [ -1.2%,  +0.9%]
  Extension               57426     56274   +2.0%  [ +1.5%,  +3.3%]
  News                    22293     22156   +0.6%  [ +0.1%,  +1.5%]
  Search                   7734      7640   +1.2%  [ +0.7%,  +2.4%]
  Social1                 14014     13914   +0.7%  [ +0.2%,  +1.5%]
  Social2                  8780      8650   +1.5%  [ +1.0%,  +2.6%]
  Sports                  26458     26285   +0.7%  [ -0.5%,  +1.5%]
  Video                   18143     17814   +1.8%  [ +1.2%,  +3.6%]
  Geometric mean                            +1.1%  [ +0.7%,  +1.5%]

  Recalc style (µs)      Before     After    Perf      95% CI (BCa)
  =================== ========= ========= ======= =================
  ECommerce                3000      2934   +2.2%  [ +1.7%,  +2.9%]
  Encyclopedia            33945     33294   +2.0%  [ +1.3%,  +2.5%]
  Extension               45428     44666   +1.7%  [ +1.1%,  +2.5%]
  News                    11069     10968   +0.9%  [ +0.3%,  +1.5%]
  Search                   2851      2824   +0.9%  [ +0.4%,  +1.6%]
  Social1                  6907      6798   +1.6%  [ +0.7%,  +3.6%]
  Social2                  4291      4225   +1.6%  [ +1.0%,  +2.1%]
  Sports                  12996     12765   +1.8%  [ +1.3%,  +2.4%]
  Video                    7575      7459   +1.5%  [ +0.5%,  +2.5%]
  Geometric mean                            +1.6%  [ +1.2%,  +2.0%]

Speedometer3 (M1 Pinpoint, LTO but no PGO, significant results
at 99% CI only):

  NewsSite-Next                               [ -0.6%,  -0.0%]
  TodoMVC-JavaScript-ES5                      [ -0.5%,  -0.1%]
  TodoMVC-Vue                                 [ -0.6%,  -0.1%]

Change-Id: I8a94056a275b731fe2955aa45c1435bb54101d75
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6321928
Reviewed-by: Anders Hartvoll Ruud <andruud@chromium.org>
Commit-Queue: Steinar H Gunderson <sesse@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1428214}
3 files changed
tree: f8d7dc37a8a8b043178a865238f8f1cd2d1449d6
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. crypto/
  16. dbus/
  17. device/
  18. docs/
  19. extensions/
  20. fuchsia_web/
  21. gin/
  22. google_apis/
  23. gpu/
  24. headless/
  25. infra/
  26. ios/
  27. ipc/
  28. media/
  29. mojo/
  30. native_client_sdk/
  31. net/
  32. pdf/
  33. ppapi/
  34. printing/
  35. remoting/
  36. rlz/
  37. sandbox/
  38. services/
  39. skia/
  40. sql/
  41. storage/
  42. styleguide/
  43. testing/
  44. third_party/
  45. tools/
  46. ui/
  47. url/
  48. webkit/
  49. .clang-format
  50. .clang-tidy
  51. .clangd
  52. .git-blame-ignore-revs
  53. .gitallowed
  54. .gitattributes
  55. .gitignore
  56. .gitmodules
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. ATL_OWNERS
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. CPPLINT.cfg
  68. CRYPTO_OWNERS
  69. DEPS
  70. DIR_METADATA
  71. LICENSE
  72. LICENSE.chromium_os
  73. OWNERS
  74. PRESUBMIT.py
  75. PRESUBMIT_test.py
  76. PRESUBMIT_test_mocks.py
  77. README.md
  78. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure.

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.