Mozilla Servo



< Quantum(Redirected from Stylo)

Samsung and Mozilla are teaming up on the future of Web browsing. The Firefox maker is collaborating with Samsung on a new Web browser engine known as Servo, which Mozilla said 'is an attempt to. Servo is a prototype web browser engine written in the Rust language. It is currently developed on 64-bit macOS, 64-bit Linux, 64-bit Windows, and Android. Servo welcomes contribution from everyone. See CONTRIBUTING.md and HACKINGQUICKSTART.md for help getting started.

  1. Servo is a browser engine being developed for application and embedded use. In August 2020, during the COVID-19 pandemic, due to lack of funds and organization restructuring, Mozilla laid off most of the Servo development team. The team was disbanded.
  2. Servo’s new home Servo has left the Mozilla nest.

Stylo (a.k.a. QuantumCSS) 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.

Fallout tactics divine favor. 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)'.

  • 1Getting Involved
  • 3Milestones
  • 4Bugs

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

Servo

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:

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

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

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
Buildbug 1366050bug 1374824bug 1375774bug 1384258bug 1384258bug 1366049

(enabled 2017-11-23)

AWSY not tested1% regression1% regression2% regression3% regression0% change
Speedometer not testedlinux64 PerfherdermacOS Perfherderwin7-32 Perfherderwin10-64 Perfherder not tested
StyleBench not testedlinux64 PerfherdermacOS Perfherderwin7-32 Perfherderwin10-64 Perfherder not tested
tp5 not testedlinux64macOSwin7-32win10-64tp4m (tiny improvement)
tp6a not tested not testedmacOSwin7-32win10-64 not tested
tp6f not tested not testedmacOSwin7-32win10-64 not tested
tp6g not tested not testedmacOSwin7-32win10-64 not tested
tp6y not tested not testedmacOSwin7-32win10-64 not tested
Autophone not tested not tested not tested not tested not testedremote-blank (tiny improvement)

remote-nytimes (tiny regression)

remote-tsvg (tiny regression bug 1420369) Greatland outdoors 3 room tent manual.

remote-twitter (tiny regression bug 1420369)

stylo-central

  • Run linux64-stylo tests in mozilla-central (bug 1330414) (dependencies)
    • Enable stop-gap vcs sync (bug 1317525)
    • Vendor servo in mozilla-central (bug 1322769)
    • Make all tests green (by skipping or expecting failure)

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

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
IDPrioritySummaryKeywordsAssigned to
1406622P2stylo: use invalidation framework to handle restyles needed in response to content insertion/removalEmilio Cobos Álvarez (:emilio)
1420369P2stylo: 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, regressionMakoto Kato [:m_kato]
1413654P2stylo: We rely on the initial ResolveStyleFor call when computing the body style for scroll propagation to deal with updating the stylist
1422615P2stylo: Stop cascading an element for restyling if the element has display:none
1441389P2stylo: Regression on tsvg_static on Linux when stylo-chrome is enabled
1426295P2stylo: SVG images use more memory than Gecko
1418902P2stylo: Stop updating animation data on pseudo elements whose content value is changed to 'none'reproducible
1430706P2stylo: geckoservo::glue::Servo_ParseStyleAttribute is slower than Gecko's old CSS parser on ARM
1391341P2stylo: Font size inherits differently than in Geckodev-doc-complete, regression
1422416P2stylo: No need to mark uncacheable for style adjustment based on reset properties onlyXidorn Quan [:xidorn] UTC+11

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


[stylo:p2] bugs:

No results.

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

Status


P3 Bugs

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

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


[stylo:p3] bugs:

No results.

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


Mozilla Servo

Bugzilla Queries

  • Stylo milestone bug trees:
    • Build Stylo in Nightly (but pref'd off)
  • Unprioritized 'stylo' whiteboard bugs to be triaged (Chris's list)
  • Crash queries:
  • Skipped or asserting tests: (these do not necessarily indicate Stylo bugs!)

Mozilla Servo Status

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.

Mozilla Servo Vs Gecko

Retrieved from 'https://wiki.mozilla.org/index.php?title=Quantum/Stylo&oldid=1190224'