From MozillaWiki
< Quantum(Redirected from Stylo)
Jump to: navigation, search

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.

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.

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 have zero blocking bugs.
  • Stylo should pass all (non-disabled) Gecko reftests and mochitests.
  • Stylo should have no more unimplemented properties on the Alexa Top 500 sites than Gecko.
  • Stylo should pass visual diff testing (bug 1331552) for the Alexa Top 500 (?) sites.
  • Stylo's Talos test performance should be faster than or equal to Gecko's.
  • Stylo's memory usage (both Talos and beta telemetry) 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.

Work Breakdown Structure

  • Tests
    • reftests: Shing
    • mochitests: TBD
  • Cargo
    • Build Support: Nathan, Ralph
      • Build Stylo: Lars
    • Vendoring Support: Ted, Yehuda
      • Vendor Servo: Lars
  • Glue (Gecko/C++/Rust/Servo): Manish, Simon, Xidorn, Michael
  • CSS Support
    • CSS Properties: Cameron, Xidorn, Simon, Emilio, Bobby, Brian
    • CSSOM: Xidorn, Simon
  • Autoland
    • Servo CI and Autolander: Emily
    • Gecko CI and Autolander: Emily



  • Run linux64-stylo tests in mozilla-central (bug 1330414)
    • Enable stop-gap vcs sync (bug 1317525)
    • Vendor servo in mozilla-central (bug 1322769)
    • Make all tests green (by skipping or expecting failure)
ID Priority Summary Whiteboard Keywords Assigned to
1333036 -- stylo: configure script should check whether paths provided from --with-{libclang,clang}-path are valid
1335302 -- stylo: build-time bindgen doesn't work on mac
1333054 -- don't complain about llvm-config if we're not building stylo bindgen leave-open Nathan Froyd [:froydnj]
1336540 -- stylo: the configuration information build_gecko.rs should not be in servo/servo
1318107 P2 Autoland servo/servo PRs on hg edunham
1310852 P2 Add build-time dependency on libclang 3.9+ so we can run Stylo bindgen at build-time
1330666 P2 enable linux64-stylo builds Kim Moir [:kmoir]
1170600 P3 Publish GitHub events to Pulse leave-open Gregory Szorc [:gps] (away until 2017-03-20)

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


  • Enable Stylo in Nightly (bug 1330412) (only on Linux first?)
    • 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 BugHunter
    • Manual QA sign-off
      • Smoke test Alexa Top N sites
      • Exploratory testing of browser UI and features
ID Priority Summary Whiteboard Keywords Assigned to
1303747 -- Update stylo reftest expectations meta Manish Goregaokar [:manishearth]
1323680 -- stylo: several tests crash under DebugVerifyStyleTree
1328503 -- stylo: tests timeout because of using unimplemented Animation API on new window
1331516 -- stylo: mask shorthand resets several subproperties to their non-initial value
1337599 -- [meta] Run all style system mochitest with stylo meta
1323716 -- stylo: layout/style/crashtests/1230408-1.html fatally asserts with "MOZ_ASSERT_UNREACHABLE: Any line break inside ruby box should have been suppressed"
1330503 -- stylo: URL values in CSSStyleSheet.insertRule and rule.style.setProperty are not recognized correctly Xidorn Quan [:xidorn] (UTC+10)
1334287 -- stylo: animation shorthand doesn't overwrite values of its longhands
1340009 -- stylo: dom/base/crashtests/1024428-1.html panics with: Calling styles() on unstyled ElementData
1310886 -- stylo: pass in correct sheet/base URI information when parsing style="" attributes
1323689 -- stylo: several tests fatally assert with "sheet->IsGecko() (GatherRuleProcessor must only be called for nsXBLPrototypeResources objects with Gecko-flavored style backends)"
1329119 -- [Stylo] Reftest crash: @ mozilla::ServoRestyleManager::RecreateStyleContexts
1331533 -- stylo: gfx/tests/crashtests/1317403-1.html fatally asserts with IsGecko() on a RestyleManagerHandle in PreEffectsVisualOverflowCollector::GetPreEffectsVisualOverflowRect
1337643 -- [Stylo] Talos g1 (non-e10s) test intermittent timeout
1323647 -- stylo: dom/base/crashtests/387460-1.html crashes in table layout code
1330589 -- [Stylo] Talos job "tcanvasmark" failed with timeout
1335998 -- stylo: Handle servo's interpolatematrix
1340607 -- stylo: Reenable the layout/reftests/css-display/display-contents-list-item-child.html test
1201802 -- Unleash jemalloc 4
1323696 -- stylo: layout/generic/crashtests/574958.xhtml fatally asserts "mEmbeddingStack.Length() (embedding/override underflow)"
1329454 -- stylo: ASSERTION: must have non-null aReflowInput.mLineLayout
1331560 -- stylo: some grid-fragmentation-dyn-* reftests fatally assert "Frame property OverflowContainersProperty should never be destroyed by the FramePropertyTable"
1337693 -- stylo: Pass the hashtable into Servo_AnimationValues_Uncompute directly
1323657 -- stylo: dom/xbl/crashtests/472260-1.xhtml times out
1336891 -- stylo: getComputedStyle returns empty for custom property
1323705 -- stylo: layout/style/crashtests/432561-1.html crashes with a stack overflow under cssparser::parser::consume_until_end_of_block Emilio Cobos Álvarez [:emilio]
1330051 -- stylo: Determine the style backend for all documents at application startup
1339091 -- Assertion failure: aRestyleHint == 0, at ServoRestyleManager.cpp:52 assertion
1323679 -- stylo: layout/base/crashtests/379105-1.xhtml times out
1326140 -- [Stylo] Release the linux64-stylo opt build on archive.mozilla.org
1331301 -- stylo: Attching new stylesheet via DOM API (rather than CSSOM API) doesn't trigger restyle as expected
1337229 -- stylo: Implement the deep operator==() for RawServoAnimationValue Shing Lyu [:shinglyu]
1323712 -- stylo: layout/style/crashtests/1161320-2.html times out
1339385 -- stylo: Hit MOZ_CRASH(unexpected child list) at nsBlockFrame.cpp:5282 crash
1323686 -- stylo: layout/base/crashtests/645572-1.html fatally asserts with "IsGecko()" at mozilla/DeclarationBlockInlines.h:15
1329118 -- [Stylo] Reftest crash: @ mozilla::CSSStyleSheet::AddRuleProcessor
1331529 -- stylo: Implement glue for flex-basis
1337615 -- [meta] stylo: non-fatal assertions on style system mochitests
1323939 -- stylo: layout/style/crashtests/439184-1.html crashes in opt builds
1330550 -- [Stylo] Talos fail with "Could not find report in browser output"
1335990 -- stylo: border-width is not computed to medium when border-style is specified
1340224 -- Terrible restyle performance on cleopatra
1323693 -- stylo: several tests fatally assert with "content->AsElement()->HasServoData()" in nsCSSFrameConstructor::AddFCItemsForAnonymousContent
1329121 -- [Stylo] Reftest crash: @ mozilla::nsCSSClipPathInstance::ComputeSVGReferenceRect
1331552 -- [Stylo] Stylo vs Gecko diffing on real sites
1337655 -- Try disabling moz-prefixed gradient functions by default dev-doc-needed, site-compat
1323648 -- stylo: dom/base/crashtests/401993-1.html times out
1324647 -- stylo: several tests non-fatally assert with "Need to flush before destroying!" leave-open
1330885 -- stylo: sibling combinators in selector do not respond to DOM tree change
1336863 -- stylo: style change via insertRule and deleteRule may not work
1234357 -- Process 0 as 0deg in CSS angular properties (e.g., gradients, transforms syntax) compat, dev-doc-needed
1323697 -- stylo: layout/generic/crashtests/1157011.html fatally asserts with "data.mPrevLines == 0 (Shouldn't have prev lines)"
1329871 -- stylo: List pseudo-classes in a list file like Gecko's nsCSSPseudoClassList.h Xidorn Quan [:xidorn] (UTC+10)
1331578 -- [Stylo] Stylo is slower than Gecko on etc/ci/performance TP5 tests
1338425 -- Consider dropping -moz-device-pixel-ratio media query dev-doc-needed
1296477 -- stylo: Implement content: {counter(..), counters(..), url(..), attr(..)}
1323672 -- stylo: image/test/crashtests/ownerdiscard.html times out
1324704 -- stylo: several tests non-fatally assert with "uninitialized content type"
1331291 -- stylo: URL is incorrectly resolved when it is from a stylesheet loaded via @import
1337068 -- stylo: implement support for :-moz-only-whitespace in rust-selectors
1323708 -- stylo: layout/style/crashtests/690990-1.html times out
1330069 -- Create Stylo performance tests based on old Gecko style system performance bugs
1339356 -- Assertion failure: aFrame || (aHint & nsChangeHint_ReconstructFrame) (must have frame), at nsStyleChangeList.cpp:20 assertion
1292285 P1 Stylo Assertion failure: sheet->IsGecko() (GatherRuleProcessor must only be called for nsXBLPrototypeResources objects with Gecko-flavored style backends), at dom/xbl/nsXBLPrototypeResources.cpp:154 [stylo:m2] assertion Matt Brubeck (:mbrubeck)
1324348 P1 [Stylo] Reftest failures
1330414 P1 Run linux64-stylo tests in mozilla-central meta Chris Peterson [:cpeterson]
1314045 P1 Stylo debug crash in layout/reftests/font-inflation/list-1.html: "ASSERTION: Bad loading table" assertion, crash, leave-open Matt Brubeck (:mbrubeck)
1321197 P1 [meta] stylo: Have stylo pass all style system mochitests meta Xidorn Quan [:xidorn] (UTC+10)
1322657 P1 stylo: support devtools meta
1323145 P2 Run Hixie's CSS Import Test Suite for @import
1320841 P2 Re-enable mochitests for Stylo builds Manish Goregaokar [:manishearth]
1324668 P2 [Stylo] Performance test for Stylo
1288269 P2 Stylo: Implement CSS animations Brian Birtles (:birtles)
1333171 P2 Fuzz Stylo
1301001 P2 stylo: Fix OS X build (cargo network access and build errors)
1289964 P2 stylo: reftest and crashtest crashes meta
1323140 P2 stylo: run test-stylo just after generating bindings at build time
1323643 P2 [Stylo] stylo-vs-gecko reftest crashes
1290237 P3 stylo: @font-face support [stylo:m3]
1294915 P3 stylo: Explore more robust checking against FFI race conditions Brian Hackett (:bhackett)
1330902 P3 Run BugHunter crash tests with linux64-stylo builds
1322656 P3 stylo: support Gecko profiler Nathan Froyd [:froydnj]
1333311 P3 stylo: Remove the duplicated code in KeyframeEffectReadOnly::ComposeStyle
1304797 P3 stylo: e10s support
1291355 P3 stylo: Measure the impact of multiple jemalloc arenas and evaluate the performance tradeoff for enabling them
1294570 P3 stylo: Style chrome documents with Servo
1288352 P3 Stylo-specific reftest.list
1333310 P3 stylo: Refactor AnimationRule Boris Chiou [:boris]

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


  • 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