Quantum/Stylo: Difference between revisions

(Merge plan to bug section)
m (→‎Bugzilla Queries: Update crash report links for Beta 60 and Nightly 61)
 
(172 intermediate revisions by 7 users not shown)
Line 1: Line 1:
''Hello, Stylo!''
Stylo (a.k.a. [[Quantum]] [[CSS]]) will integrate Servo's CSS style system into Gecko, such that the style system code can be shared by Gecko and Servo. Stylo V1 will support Firefox on Windows, macOS, and Linux. Android support may ship in a later release. Stylo is a core part of [[Quantum|Project Quantum]].


Stylo will integrate Servo's CSS style system into Gecko, such that the style system code can be shared by Gecko and Servo. Stylo V1 will support Firefox on Windows, macOS, and Linux. Android support will ship in a later release.
To help test Stylo, download [https://www.mozilla.org/firefox/channel/desktop/#nightly Firefox Nightly]. To confirm that Stylo is enabled, check about:support for "Stylo: true (enabled by default)". If it's not, then set the about:config pref '''layout.css.servo.enabled''' to '''true'''.
 
For a deep dive into Stylo internals, check out [https://code-cartoons.com/ Lin Clark]'s Mozilla Hacks blog post [https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/ ''"Inside a super fast CSS engine: Quantum CSS (aka Stylo)"''].


= Getting Involved =
= Getting Involved =
Line 12: Line 14:


Some Stylo bugs that are good for new Servo contributors are tagged on GitHub as [https://github.com/servo/servo/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20label%3AA-content%2Fcss%20label%3AE-easy “easy” bugs] and [https://github.com/servo/servo/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20label%3AA-content%2Fcss%20label%3A%22E-less%20easy%22 “less-easy” bugs].
Some Stylo bugs that are good for new Servo contributors are tagged on GitHub as [https://github.com/servo/servo/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20label%3AA-content%2Fcss%20label%3AE-easy “easy” bugs] and [https://github.com/servo/servo/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20label%3AA-content%2Fcss%20label%3A%22E-less%20easy%22 “less-easy” bugs].
== Committing stylo changes ==
The process for committing a Stylo change that involves both Gecko and Servo changes is as follows:
# Create a Github PR against https://github.com/servo/servo with the Servo changes in question.
# Get that reviewed and checked into Servo's github repository.
# Wait for servo-vcs-sync to land the Servo changes on Gecko's autoland.
# Land the Gecko changes on autoland.
A more exhaustive / overwhelming description of the [https://public.etherpad-mozilla.org/p/stylo workflow] is also available.
== Try Syntax ==
For most Stylo changes, it should be sufficient to build on all platforms and test on Linux 64-bit only, which helps save resources in automation.  To do this, you can use:
./mach try -b do -p all -u all[x64]
To build and test all Stylo platforms running in automation, you can use:
./mach try -b do -p linux,linux64,linux64-haz,macosx64,win32,win64 -u all
To build all possible platforms to ensure code compiles everywhere, but only test with Stylo enabled, you can use:
./mach try -b do -p all -u all[linux32,linux64,linux64-stylo-sequential,macosx64,windows7-32,windows10-64]


= Release Criteria =
= Release Criteria =
Line 17: Line 44:
Stylo should not cause us to regress any CSS feature unless we explicitly decide that regressing that specific feature is acceptable. The existing test suite will be the primary benchmark of this, with cross-validation from an automated analysis and manual QA of the [https://github.com/WPO-Foundation/webpagetest/blob/master/bulktest/alexa-curated.txt Alexa Top 500 sites].
Stylo should not cause us to regress any CSS feature unless we explicitly decide that regressing that specific feature is acceptable. The existing test suite will be the primary benchmark of this, with cross-validation from an automated analysis and manual QA of the [https://github.com/WPO-Foundation/webpagetest/blob/master/bulktest/alexa-curated.txt Alexa Top 500 sites].


* Stylo should have [https://bugzilla.mozilla.org/showdependencytree.cgi?id=1243581&maxdepth=1&hide_resolved=1 zero blocking bugs].
* Stylo should be enabled by default on all desktop platforms.
* Stylo should pass all (non-disabled) Gecko reftests and mochitests.
* Stylo should have zero [https://bugzilla.mozilla.org/buglist.cgi?priority=P1&j_top=OR&f1=short_desc&columnlist=component%2Cpriority%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords%2Cstatus_whiteboard&o1=anywords&resolution=---&query_format=advanced&v1=stylo%3A&product=Core&product=Firefox P1] and [https://bugzilla.mozilla.org/buglist.cgi?j_top=OR&o1=anywords&v1=stylo%3A&priority=P2&f1=short_desc&columnlist=component%2Cpriority%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords%2Cstatus_whiteboard&resolution=---&query_format=advanced&product=Core&product=Firefox P2] bugs.
* Stylo should have no more unimplemented properties on the [https://github.com/WPO-Foundation/webpagetest/blob/master/bulktest/alexa-curated.txt Alexa Top 500 sites] than Gecko.
* Stylo should pass all (non-disabled) Gecko [https://bugzilla.mozilla.org/show_bug.cgi?id=stylo-reftest reftests] and [https://bugzilla.mozilla.org/show_bug.cgi?id=stylo-mochitest mochitests].
* Stylo's Talos test performance should be faster than or equal to Gecko's.
* Stylo should support at least as many [https://manishearth.github.io/css-properties-list/ CSS properties] as than Gecko. Firefox = 375. Stylo = 375. Chrome = 276. '''DONE!'''
* Stylo's memory usage (both Talos and beta telemetry) should be less than or equal to Gecko's.
* Stylo should pass visual diff testing for the Alexa top sites. ({{bug|1331552}}) '''DONE!'''
* Stylo's sequential mode performance on Talos tp5 and tp6 should be at least as fast as Gecko's.
* Stylo's parallel mode performance on Talos tp5 and tp6 should be faster than Gecko's. Ideally, Stylo should scale linearly with the number of cores.
* Stylo's performance on Speedometer should be at least as fast as Gecko's.
* Stylo's memory usage (as measured by AWSY and user telemetry) should not exceed to Gecko's by more than X% (TBD).
* Stylo's crash rate should be less than or equal to Gecko's.
* Stylo's crash rate should be less than or equal to Gecko's.
* Stylo's user engagement ratio (DAU/MAU) should be greater than or equal to Gecko's.
* Stylo's user engagement metrics should be greater than or equal to Gecko's.
 
{| class="wikitable"
!
! Linux32
! Linux64
! macOS
! Win32
! Win64
! Android
|-
! Build
| style="background-color: PaleGreen;" | {{bug|1366050}}
| style="background-color: PaleGreen;" | {{bug|1374824}}
| style="background-color: PaleGreen;" | {{bug|1375774}}
| style="background-color: PaleGreen;" | {{bug|1384258}}
| style="background-color: PaleGreen;" | {{bug|1384258}}
| style="background-color: PaleGreen;" | {{bug|1366049}}
(enabled 2017-11-23)
|-
! AWSY
| not tested
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1480724,1,4&series=autoland,1534468,1,4&series=autoland,1534518,1,4&series=autoland,1549358,1,4 1% regression]
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1514655,1,4&series=autoland,1535109,1,4&series=autoland,1549308,1,4 1% regression]
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1519077,1,4&series=autoland,1535212,1,4&series=autoland,1549620,1,4 2% regression]
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1535162,1,4&series=autoland,1519032,1,4&series=autoland,1549566,1,4 3% regression]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1455599,1,4&series=autoland,1545819,1,4&series=autoland,1543160,1,4 0% change]
|-
! Speedometer
| not tested
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1571040,1,1&series=mozilla-central,1571041,1,1&series=mozilla-central,1651675,1,1 linux64 Perfherder]
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1569261,1,1&series=mozilla-central,1569301,1,1&series=mozilla-central,1647998,1,1 macOS Perfherder]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1571694,1,1&series=mozilla-central,1572189,1,1&series=mozilla-central,1652023,1,1 win7-32 Perfherder]
[https://arewefastyet.com/#machine=17&view=single&suite=speedometer-misc&subtest=score win8-32 desktop]


= Work Breakdown Structure =
[https://arewefastyet.com/#machine=37&view=single&suite=speedometer-misc&subtest=score win10-32 reference laptop]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1571711,1,1&series=autoland,1652898,1,1&series=autoland,1569047,1,1 win10-64 Perfherder]
[https://arewefastyet.com/#machine=35&view=single&suite=speedometer-misc&subtest=score win8-64 desktop]


* '''Tests'''
[https://arewefastyet.com/#machine=36&view=single&suite=speedometer-misc&subtest=score win10-64 reference laptop]
** reftests: Shing
| not tested
** mochitests: TBD
|-
* '''Cargo'''
! StyleBench
** Build Support: Nathan, Ralph
| not tested
*** Build Stylo: Lars
| [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1634248,1,1&series=autoland,1647733,1,1 linux64 Perfherder]
** Vendoring Support: Ted, Yehuda
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1633971,1,1&series=autoland,1646521,1,1 macOS Perfherder]
*** Vendor Servo: Lars
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1634778,1,1&series=autoland,1652806,1,1 win7-32 Perfherder]
* '''Glue''' (Gecko/C++/Rust/Servo): Manish, Simon, Xidorn, Michael
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1634566,1,1&series=autoland,1653144,1,1 win10-64 Perfherder]
* '''CSS Support'''
| not tested
** CSS Properties: Cameron, Xidorn, Simon, Emilio, Bobby, Brian
|-
** CSSOM: Xidorn, Simon
! tp5
* '''Autoland'''
| not tested
** Servo CI and Autolander: Emily
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1481782,1,1&series=mozilla-central,1551044,1,1&series=mozilla-central,1353152,1,1&series=mozilla-central,1652392,1,1 linux64]
** Gecko CI and Autolander: Emily
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1339033,1,1&series=mozilla-central,1542424,1,1&series=mozilla-central,1549874,1,1 macOS]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1316248,1,1&series=mozilla-central,1538582,1,1&series=mozilla-central,1552822,1,1 win7-32]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1503157,1,1&series=mozilla-central,1538597,1,1&series=mozilla-central,1552369,1,1 win10-64]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=5184000&series=autoland,1543681,1,3&series=autoland,1574400,1,3&series=autoland,1574392,1,3&series=autoland,1567232,1,3 tp4m] (tiny improvement)
|-
! tp6a
| not tested
| not tested
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1541745,1,1&series=mozilla-central,1540857,1,1&series=mozilla-central,1549764,1,1&series=autoland,1540759,1,1 macOS]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1552302,1,1&series=autoland,1535549,1,1&series=autoland,1535545,1,1 win7-32]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1535521,1,1&series=autoland,1535525,1,1&series=mozilla-central,1552125,1,1 win10-64]
| not tested
|-
! tp6f
| not tested
| not tested
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1540858,1,1&series=mozilla-central,1549765,1,1&series=mozilla-central,1541746,1,1&series=autoland,1540760,1,1&series=autoland,1556447,1,1 macOS]
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1535550,1,1&series=mozilla-central,1535614,1,1&series=mozilla-central,1552303,1,1 win7-32]
| style="background-color: Tomato;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1535526,1,1&series=autoland,1535522,1,1&series=mozilla-central,1552126,1,1 win10-64]
| not tested
|-
! tp6g
| not tested
| not tested
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1540855,1,1&series=mozilla-central,1541743,1,1&series=mozilla-central,1549762,1,1&series=autoland,1540757,1,1&series=autoland,1556444,1,1 macOS]
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1535547,1,1&series=autoland,1535543,1,1&series=mozilla-central,1552300,1,1 win7-32]
| style="background-color: Tomato;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1535523,1,1&series=autoland,1535519,1,1&series=mozilla-central,1552123,1,1 win10-64]
| not tested
|-
! tp6y
| not tested
| not tested
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=mozilla-central,1540856,1,1&series=mozilla-central,1541744,1,1&series=mozilla-central,1549763,1,1&series=autoland,1540758,1,1&series=autoland,1556445,1,1 macOS]
| style="background-color: PaleGreen;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1535548,1,1&series=autoland,1535544,1,1&series=mozilla-central,1552301,1,1 win7-32]
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=2592000&series=autoland,1535524,1,1&series=autoland,1535520,1,1&series=mozilla-central,1552124,1,1 win10-64]
| not tested
|-
! Autophone
| not tested
| not tested
| not tested
| not tested
| not tested
| style="background-color: LightYellow;" | [https://treeherder.mozilla.org/perf.html#/graphs?timerange=5184000&series=autoland,1543797,1,3&series=autoland,1544207,1,3&series=autoland,1544451,1,3&series=autoland,1543832,1,3 remote-blank] (tiny improvement)
[https://treeherder.mozilla.org/perf.html#/graphs?timerange=5184000&series=autoland,1543790,1,3&series=autoland,1574418,1,3&series=autoland,1544458,1,3 remote-nytimes] (tiny regression)


= Bugs =
[https://treeherder.mozilla.org/perf.html#/graphs?timerange=5184000&series=autoland,1574382,1,3&series=autoland,1574408,1,3&series=autoland,1567250,1,3&series=autoland,1567240,1,3 remote-tsvg] (tiny regression {{bug|1420369}})
 
[https://treeherder.mozilla.org/perf.html#/graphs?timerange=5184000&series=autoland,1543762,1,3&series=autoland,1543783,1,3&series=autoland,1574425,1,3 remote-twitter] (tiny regression {{bug|1420369}})
|}


* Stylo meta {{bug|1243581}}
= Milestones =
* [https://bugzilla.mozilla.org/showdependencytree.cgi?id=1243581 Stylo dependencies]


== stylo-central ==
== stylo-central ==


* '''Run linux64-stylo tests in mozilla-central''' ({{bug|1330414}})
* '''Run linux64-stylo tests in mozilla-central''' ({{bug|1330414}}) ([https://bugzilla.mozilla.org/showdependencytree.cgi?id=1330414 dependencies])
** Enable stop-gap vcs sync ({{bug|1317525}})
** Enable stop-gap vcs sync ({{bug|1317525}})
** Vendor servo in mozilla-central ({{bug|1322769}})
** Vendor servo in mozilla-central ({{bug|1322769}})
** Make all tests green (by skipping or expecting failure)
** Make all tests green (by skipping or expecting failure)
* Stylo-central meta {{bug|1330414}}
* [https://bugzilla.mozilla.org/showdependencytree.cgi?id=1330414 Stylo-central dependencies]
<bugzilla>
{
  "blocked": "1330414",
  "resolution": "---",
  "include_fields": "id, priority, summary, whiteboard, keywords, assigned_to",
  "order": "priority"
}
</bugzilla>


== stylo-nightly ==
== stylo-nightly ==


* '''Enable Stylo in Nightly''' ({{bug|1330412}}) (only on Linux first?)
* '''Enable Stylo in Nightly''' ({{bug|1330412}}) ([https://bugzilla.mozilla.org/showdependencytree.cgi?id=1330412 dependencies])
** Implement parsing of all [https://manishearth.github.io/css-properties-list/ CSS properties supported by Firefox]
** Implement parsing of all [https://manishearth.github.io/css-properties-list/ CSS properties supported by Firefox]
** Fix and enable all tests (without skipping or expecting failure)
** Fix and enable all tests (without skipping or expecting failure)
** Fix all crashes and assertion failures
** Fix all crashes and assertion failures
*** Fuzz Stylo
*** Fuzz Stylo
*** Pass BugHunter
*** Pass [Auto-tools/Projects/BugHunter Bughunter]
** Manual QA sign-off
** Manual QA sign-off
*** Smoke test Alexa Top N sites
*** Smoke test Alexa Top N sites
*** Exploratory testing of browser UI and features
*** Exploratory testing of browser UI and features
* Stylo-nightly meta {{bug|1330412}}
* [https://bugzilla.mozilla.org/showdependencytree.cgi?id=1330412 Stylo-nightly dependencies]
<bugzilla>
{
  "blocked": "1330412",
  "resolution": "---",
  "include_fields": "id, priority, summary, whiteboard, keywords, assigned_to",
  "order": "priority"
}
</bugzilla>


== stylo-release ==
== stylo-release ==


* Stylo meta {{bug|1243581}} ([https://bugzilla.mozilla.org/showdependencytree.cgi?id=1243581 dependencies])
* '''Run experiment comparing Stylo vs Gecko''' on engagement ratio, performance, crash rate, and memory usage.
* '''Run experiment comparing Stylo vs Gecko''' on engagement ratio, performance, crash rate, and memory usage.
* '''Let Stylo ride the trains'''
* '''Let Stylo ride the trains'''
Line 98: Line 187:
*** Pass QA on all platforms (tests, fuzzing, BugHunter)
*** Pass QA on all platforms (tests, fuzzing, BugHunter)
* '''Ship Stylo to Release'''
* '''Ship Stylo to Release'''
= Bugs =
== P1 Bugs ==
<bugzilla> {
  "f2": "status_whiteboard",
  "o2": "nowords",
  "v2": "[stylo",
  "short_desc": "stylo",
  "priority": "P1",
  "resolution": "---",
  "include_fields": "id, priority, summary, keywords, assigned_to",
  "order": "assigned_to"
} </bugzilla>
[stylo:p1] bugs:
<bugzilla> {
  "status_whiteboard": "[stylo:p1]",
  "resolution": "---",
  "include_fields": "id, priority, summary, keywords, assigned_to",
  "order": "assigned_to"
} </bugzilla>
== P2 Bugs ==
<bugzilla> {
  "f2": "status_whiteboard",
  "o2": "nowords",
  "v2": "[stylo",
  "short_desc": "stylo",
  "priority": "P2",
  "resolution": "---",
  "include_fields": "id, priority, summary, keywords, assigned_to",
  "order": "assigned_to"
} </bugzilla>
[stylo:p2] bugs:
<bugzilla> {
  "status_whiteboard": "[stylo:p2]",
  "resolution": "---",
  "include_fields": "id, priority, summary, keywords, assigned_to",
  "order": "assigned_to"
} </bugzilla>
== P3 Bugs ==
<bugzilla> {
  "f2": "status_whiteboard",
  "o2": "nowords",
  "v2": "[stylo",
  "short_desc": "stylo",
  "priority": "P3",
  "resolution": "---",
  "include_fields": "id, priority, summary, keywords, assigned_to",
  "order": "assigned_to"
} </bugzilla>
[stylo:p3] bugs:
<bugzilla> {
  "status_whiteboard": "[stylo:p3]",
  "resolution": "---",
  "include_fields": "id, priority, summary, keywords, assigned_to",
  "order": "assigned_to"
} </bugzilla>
== Bugzilla Queries ==
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P1&j_top=OR&f1=short_desc&list_id=13705345&columnlist=component%2Cpriority%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords%2Cstatus_whiteboard&o1=anywords&resolution=---&query_format=advanced&v1=stylo%3A&product=Core&product=Firefox P1 stylo: bugs]
* [https://bugzilla.mozilla.org/buglist.cgi?j_top=OR&list_id=13705342&o1=anywords&v1=stylo%3A&priority=P2&f1=short_desc&columnlist=component%2Cpriority%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords%2Cstatus_whiteboard&resolution=---&query_format=advanced&product=Core&product=Firefox P2 stylo: bugs]
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P3&j_top=OR&f1=short_desc&list_id=13705343&columnlist=component%2Cpriority%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords%2Cstatus_whiteboard&o1=anywords&resolution=---&query_format=advanced&v1=stylo%3A&product=Core&product=Firefox P3 stylo: bugs]
* [https://bugzilla.mozilla.org/buglist.cgi?priority=--&j_top=OR&f1=short_desc&order=Importance&list_id=13520154&columnlist=component%2Cpriority%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords%2Cstatus_whiteboard&o1=substring&resolution=---&query_format=advanced&f2=status_whiteboard&v1=stylo%3A&product=Core&product=Firefox Unprioritized "stylo:" bugs to be triaged]
* [https://sql.telemetry.mozilla.org/queries/6154#table Stylo experiment client count]
* [https://bugzilla.mozilla.org/showdependencytree.cgi?hide_resolved=1&id=stylo-crash-reports stylo-crash-reports bugs]
* [https://bugzilla.mozilla.org/showdependencytree.cgi?hide_resolved=1&id=stylo-site-issues stylo-site-issues bugs]
* Stylo milestone bug trees:
** [https://bugzilla.mozilla.org/showdependencytree.cgi?id=1356991&hide_resolved=1 Build Stylo in Nightly] (but pref'd off)
** [https://bugzilla.mozilla.org/showdependencytree.cgi?id=1330412&hide_resolved=1 Enable Stylo in Nightly]
** [https://bugzilla.mozilla.org/showdependencytree.cgi?id=1374034&hide_resolved=1 Let Stylo ride the trains]
* [https://bugzilla.mozilla.org/buglist.cgi?list_id=13751432&o1=nowords&o2=nowordssubstr&chfield=%5BBug%20creation%5D&chfieldfrom=1m&v1=stylo%2CIntermittent&v2=%5Bstylo&f1=short_desc&resolution=---&classification=Components&chfieldto=Now&query_format=advanced&f2=status_whiteboard&component=CSS%20Parsing%20and%20Computation&product=Core CSS bugs filed within the last month that are not labeled "stylo"]
* '''[https://bugzilla.mozilla.org/buglist.cgi?o5=notsubstring&o2=substring&v5=%5Bstylo&v2=stylo&priority=--&f1=OP&order=Importance&o3=anywords&v6=stylo%3A&v3=1243581%2C1289864%2C1289964%2C1321197%2C1324348%2C1324620%2C1330412%2C1330414%2C1337599%2C1341102%2C1343597%2C1345200&resolution=---&o6=notsubstring&f4=CP&query_format=advanced&j1=OR&f3=blocked&f2=short_desc&f5=status_whiteboard&f6=short_desc Unprioritized "stylo" whiteboard bugs to be triaged]''' (Chris's list)
* [https://bugzilla.mozilla.org/buglist.cgi?j_top=OR&o1=anywords&o2=substring&v1=stylo&v2=%5Bstylo&priority=P4&f1=short_desc&columnlist=component%2Cpriority%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords%2Cstatus_whiteboard&resolution=---&query_format=advanced&f2=status_whiteboard All P4 bugs]
* [https://bugzilla.mozilla.org/buglist.cgi?j_top=OR&o1=anywords&o2=substring&v1=stylo&v2=%5Bstylo&priority=P5&f1=short_desc&columnlist=component%2Cpriority%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords%2Cstatus_whiteboard&resolution=---&query_format=advanced&f2=status_whiteboard All P5 bugs]
* [https://wiki.mozilla.org/Quantum/Stylo/Team Bugs by developer]
* Crash queries:
** [https://crash-stats.mozilla.com/search/?signature=~Gecko_&signature=~Servo_&signature=~geckoservo&signature=~style%3A%3A&signature=~core%3A%3A&proto_signature=%21~webrender&product=Firefox&version=61.0a1&date=%3E%3D2018-03-05T16%3A06%3A35.000Z&date=%3C2018-03-12T17%3A06%3A35.000Z&page=1&_sort=-date&_facets=signature&_columns=date&_columns=signature&_columns=product&_columns=version&_columns=build_id&_columns=platform#facet-signature Nightly 61 crash reports with Stylo function names]
** [https://crash-stats.mozilla.com/search/?signature=~Gecko_&signature=~Servo_&signature=~geckoservo&signature=~style%3A%3A&signature=~core%3A%3A&proto_signature=%21~webrender&product=Firefox&version=60.0b&date=%3E%3D2018-03-05T16%3A06%3A39.000Z&date=%3C2018-03-12T17%3A06%3A39.000Z&_sort=-date&_facets=signature&_columns=date&_columns=signature&_columns=product&_columns=version&_columns=build_id&_columns=platform#facet-signature Beta 60 crash reports with Stylo function names]
* Skipped or asserting tests: (these do not necessarily indicate Stylo bugs!)
** [https://searchfox.org/mozilla-central/search?q=-if%28stylo&path=crashtests.list crashtests]
** [https://searchfox.org/mozilla-central/search?q=skip-if+%3D+stylo&path=.ini mochitests]
** [https://searchfox.org/mozilla-central/search?q=-if(stylo&path=reftest.list reftests]
'''Priority Definitions:'''
* '''P1''': Blocks shipping, more urgent. We should be working on these now/ASAP.
* '''P2''': Blocks shipping, less urgent. We can wait a few weeks to start working on these.
* '''P3''': Might block shipping. Needs re-evaluation, potentially closer to the deadline.
* '''P4''': Doesn't block shipping, but nice to have.
* '''P5''': Don't need to track.


= Links =
= Links =

Latest revision as of 00:44, 13 March 2018

Stylo (a.k.a. Quantum CSS) will integrate Servo's CSS style system into Gecko, such that the style system code can be shared by Gecko and Servo. Stylo V1 will support Firefox on Windows, macOS, and Linux. Android support may ship in a later release. Stylo is a core part of Project Quantum.

To help test Stylo, download Firefox Nightly. To confirm that Stylo is enabled, check about:support for "Stylo: true (enabled by default)". If it's not, then set the about:config pref layout.css.servo.enabled to true.

For a deep dive into Stylo internals, check out Lin Clark's Mozilla Hacks blog post "Inside a super fast CSS engine: Quantum CSS (aka Stylo)".

Getting Involved

If you're interested in contributing to Stylo or Servo, drop by the #servo IRC channel on Mozilla's IRC server.

One front where you can help out is adding new properties to Servo's CSS parsing crate. This requires familiarity with Rust, but is otherwise a good way to dip your toes into Servo's style system. To get started, see Servo's CSS property hacking guide for more information.

If you do not know Rust, you can help implement keyword properties. See the Stylo hacking guide for more details. The Stylo hacking guide also has instructions for building Stylo if you wish to play with it yourself. If you know C++, Firefox bug 1277133 has information about easy Gecko bugs that will assist Stylo's integration with Gecko.

Some Stylo bugs that are good for new Servo contributors are tagged on GitHub as “easy” bugs and “less-easy” bugs.

Committing stylo changes

The process for committing a Stylo change that involves both Gecko and Servo changes is as follows:

  1. Create a Github PR against https://github.com/servo/servo with the Servo changes in question.
  2. Get that reviewed and checked into Servo's github repository.
  3. Wait for servo-vcs-sync to land the Servo changes on Gecko's autoland.
  4. Land the Gecko changes on autoland.

A more exhaustive / overwhelming description of the workflow is also available.

Try Syntax

For most Stylo changes, it should be sufficient to build on all platforms and test on Linux 64-bit only, which helps save resources in automation. To do this, you can use:

./mach try -b do -p all -u all[x64]

To build and test all Stylo platforms running in automation, you can use:

./mach try -b do -p linux,linux64,linux64-haz,macosx64,win32,win64 -u all

To build all possible platforms to ensure code compiles everywhere, but only test with Stylo enabled, you can use:

./mach try -b do -p all -u all[linux32,linux64,linux64-stylo-sequential,macosx64,windows7-32,windows10-64]

Release Criteria

Stylo should not cause us to regress any CSS feature unless we explicitly decide that regressing that specific feature is acceptable. The existing test suite will be the primary benchmark of this, with cross-validation from an automated analysis and manual QA of the Alexa Top 500 sites.

  • Stylo should be enabled by default on all desktop platforms.
  • Stylo should have zero P1 and P2 bugs.
  • Stylo should pass all (non-disabled) Gecko reftests and mochitests.
  • Stylo should support at least as many CSS properties as than Gecko. Firefox = 375. Stylo = 375. Chrome = 276. DONE!
  • Stylo should pass visual diff testing for the Alexa top sites. (bug 1331552) DONE!
  • Stylo's sequential mode performance on Talos tp5 and tp6 should be at least as fast as Gecko's.
  • Stylo's parallel mode performance on Talos tp5 and tp6 should be faster than Gecko's. Ideally, Stylo should scale linearly with the number of cores.
  • Stylo's performance on Speedometer should be at least as fast as Gecko's.
  • Stylo's memory usage (as measured by AWSY and user telemetry) should not exceed to Gecko's by more than X% (TBD).
  • Stylo's crash rate should be less than or equal to Gecko's.
  • Stylo's user engagement metrics should be greater than or equal to Gecko's.
Linux32 Linux64 macOS Win32 Win64 Android
Build bug 1366050 bug 1374824 bug 1375774 bug 1384258 bug 1384258 bug 1366049

(enabled 2017-11-23)

AWSY not tested 1% regression 1% regression 2% regression 3% regression 0% change
Speedometer not tested linux64 Perfherder macOS Perfherder win7-32 Perfherder

win8-32 desktop

win10-32 reference laptop

win10-64 Perfherder

win8-64 desktop

win10-64 reference laptop

not tested
StyleBench not tested linux64 Perfherder macOS Perfherder win7-32 Perfherder win10-64 Perfherder not tested
tp5 not tested linux64 macOS win7-32 win10-64 tp4m (tiny improvement)
tp6a not tested not tested macOS win7-32 win10-64 not tested
tp6f not tested not tested macOS win7-32 win10-64 not tested
tp6g not tested not tested macOS win7-32 win10-64 not tested
tp6y not tested not tested macOS win7-32 win10-64 not tested
Autophone not tested not tested not tested not tested not tested remote-blank (tiny improvement)

remote-nytimes (tiny regression)

remote-tsvg (tiny regression bug 1420369)

remote-twitter (tiny regression bug 1420369)

Milestones

stylo-central

stylo-nightly

  • Enable Stylo in Nightly (bug 1330412) (dependencies)
    • Implement parsing of all CSS properties supported by Firefox
    • Fix and enable all tests (without skipping or expecting failure)
    • Fix all crashes and assertion failures
      • Fuzz Stylo
      • Pass [Auto-tools/Projects/BugHunter Bughunter]
    • Manual QA sign-off
      • Smoke test Alexa Top N sites
      • Exploratory testing of browser UI and features

stylo-release

  • Stylo meta bug 1243581 (dependencies)
  • Run experiment comparing Stylo vs Gecko on engagement ratio, performance, crash rate, and memory usage.
  • Let Stylo ride the trains
    • Enable Stylo on all platforms (bug stylo-nightly)
      • Pass QA on all platforms (tests, fuzzing, BugHunter)
  • Ship Stylo to Release

Bugs

P1 Bugs

No results.

0 Total; 0 Open (0%); 0 Resolved (0%); 0 Verified (0%);


[stylo:p1] bugs:

No results.

0 Total; 0 Open (0%); 0 Resolved (0%); 0 Verified (0%);


P2 Bugs

Full Query
ID Priority Summary Keywords Assigned to
1406622 P2 stylo: use invalidation framework to handle restyles needed in response to content insertion/removal perf:responsiveness Emilio Cobos Álvarez (:emilio)
1420369 P2 stylo: 6.21 - 6.54% remote-tsvg / remote-twitter (android-6-0-armv8-api16, android-7-1-armv8-api16) regression on push db56323cd08f4883e4824199b441a3141be655e5 (Thu Nov 23 2017) perf, regression Makoto Kato [:m_kato]
1391341 P2 stylo: Font size inherits differently than in Gecko dev-doc-complete, regression
1406996 P2 stylo: Investigate crash reports around Rust HashMaps sec-audit
1413654 P2 stylo: We rely on the initial ResolveStyleFor call when computing the body style for scroll propagation to deal with updating the stylist
1418902 P2 stylo: Stop updating animation data on pseudo elements whose content value is changed to 'none' reproducible
1422615 P2 stylo: Stop cascading an element for restyling if the element has display:none
1426295 P2 stylo: SVG images use more memory than Gecko
1430706 P2 stylo: geckoservo::glue::Servo_ParseStyleAttribute is slower than Gecko's old CSS parser on ARM

9 Total; 9 Open (100%); 0 Resolved (0%); 0 Verified (0%);


[stylo:p2] bugs:

No results.

0 Total; 0 Open (0%); 0 Resolved (0%); 0 Verified (0%);


P3 Bugs

Full Query
ID Priority Summary Keywords Assigned to
1358955 P3 stylo: Update SMIL animations that depend on the cascade Brian Birtles (:birtles)
1395488 P3 stylo: shrink nsStyleDisplay, nsStylePosition and ServoComputedData Emilio Cobos Álvarez (:emilio)
1388566 P3 stylo: Don't flush throttled animations if the root element has normal dirty descendants bit in PreTraverse() Hiroyuki Ikezoe (:hiro)
1413497 P3 stylo: tests/editor/reftests/824080-2.html test bug fails on Android/styloVsGecko Makoto Kato [:m_kato]
1375225 P3 Stylo: Redundant object copies in style::properties::PropertyDeclaration::parse_into
1376082 P3 stylo: The hover generation is never updated, and we seem to be fine with it.
1616236 P3 "tp5n time_to_session_store_window_restored_ms opt e10s stylo" is too variable to be useful in a single 5-run
1375222 P3 Stylo: Lots of 48-byte stack locals being copied in style::properties::PropertyDeclaration::parse_into
1370604 P3 stylo: Consider preloading the style sharing cache with styled siblings during incremental restyle
1397380 P3 stylo: Investigate sources of stylo memory overhead on the html single-page spec
1400510 P3 stylo: Add refcount logging for servo_arc so we can detect reference cycles that cause leaks
1400771 P3 stylo: preshints (mapped attributes) not handled correctly for elements created from non-docshell-associated document
1400915 P3 stylo: Still have a lot of Display, Position, Border structs on the HTML5 page even with STYLO_THREADS=1
1401074 P3 stylo: handle modifications to UA sheets by invalidating UA CascadeData cache
1402212 P3 stylo: display value of non-existent pseudo flex item is not blockified
1405633 P3 stylo: Run other stylo tests in rusttests tasks
1408323 P3 stylo: consider generating nsStyleConsts.h values from Servo
1411119 P3 stylo: Assertion failure: !preTransformOverflows (GetVisualOverflowRect() won't return the pre-effects rect!), at /builds/worker/workspace/build/src/layout/svg/nsSVGIntegrationUtils.cpp:104 assertion, testcase
1412441 P3 stylo: Merge structs.rs into bindings.rs
1412774 P3 stylo: 1133905-4-v-rtl.html is always failure on Android/styloVsGecko
1345688 P3 stylo: align binary representations of computed keyword values and eliminate the match statements
1413731 P3 stylo: Investigate whether opaquing types more aggressively can help reduce build time
1414902 P3 stylo: Assertion failure: !GetStyleContextInMap(aMap, aContent) (Already have an entry for aContent), at /builds/worker/workspace/build/src/layout/base/nsFrameManager.cpp:205 assertion, testcase
1414941 P3 stylo: Assertion failure: mAllowZoom == aNewData.mAllowZoom (expected mAllowZoom to be the same on both nsStyleFonts) [@ nsStyleFont::CalcDifference] assertion, testcase
1415236 P3 enable-stylo build fails probably when system-nspr is used
1417578 P3 stylo: Audit internal properties that are accidentally exposed.
1419943 P3 stylo-chrome: permafailure browser_aboutURLs.js | leaked 2 window(s) until shutdown [url = about:downloads]
1420423 P3 [meta] stylo: Large regression on some talos tests when enabling stylo-chrome meta
1560981 P3 use the bindgen executable for stylo rather than building bindgen at build time
1423964 P3 stylo-chrome: Gecko_GetDocumentLWTheme and ThreadSafeGetDocumentLWTheme show up in profile
1424253 P3 stylo: non-default "font.minimum-size." pref value breaks table layout
1427679 P3 stylo: Drop some tables in stylist for SVG-as-image when no SMIL presents
1428036 P3 stylo: Add the CSS string which is parsed to crash report annotations
1435940 P3 stylo: Consider using invalidation for media feature values change
1435949 P3 stylo: Consider changing how media_feature_affected_matches works
1436676 P3 Remove the telemetry probe for parallel stylo traversals.
1437785 P3 stylo: Author style disabling doesn't stop using @page, @font-face, @counter-style, etc. rules from author sheets
1440180 P3 stylo: Some computed values are not reported in memory report
1440222 P3 stylo: Computed values for anonymous content of nsCanvasFrame are not reported in memory report
1440561 P3 stylo: Figure out a better way to allow sync load of font when possible
1440640 P3 stylo: The search suggestions hint is not vertically centred with Dark/Light themes on Linux after dynamically switching theme
1445566 P3 stylo-chrome: <tab> element and its descendants are styled twice for each new tab
1446971 P3 A couple reftests for bug 883987 fail on stylo, but look invalid.
1474789 P3 Stylo accesses the preference service from multiple threads.
1500512 P3 Cleanup stylo handling in AWSY
1422416 P3 stylo: No need to mark uncacheable for style adjustment based on reset properties only Xidorn Quan [:xidorn] UTC+10
1383868 P3 stylo: Incorrect blockification of kids of display:inline-flex element that is not a flex container Xidorn Quan [:xidorn] UTC+10

47 Total; 47 Open (100%); 0 Resolved (0%); 0 Verified (0%);


[stylo:p3] bugs:

No results.

0 Total; 0 Open (0%); 0 Resolved (0%); 0 Verified (0%);


Bugzilla Queries

Priority Definitions:

  • P1: Blocks shipping, more urgent. We should be working on these now/ASAP.
  • P2: Blocks shipping, less urgent. We can wait a few weeks to start working on these.
  • P3: Might block shipping. Needs re-evaluation, potentially closer to the deadline.
  • P4: Doesn't block shipping, but nice to have.
  • P5: Don't need to track.

Links