Performance Review - November 2013
The goal of this report is to clearly summarize the active engineering performance work so that we can make deliberate decisions with respect to the projects that we choose to invest in and the allocation of our people.
Smooth tab animation work has been completed. This work impacts both Mozilla Central and Australis.
The new Telemetry server was enabled on Oct 1, 2013. The team continues to optimize the Telemetry backend and are starting additional work on the Telemetry dashboards.
A lot of effort continues to be targeted at removing work from the main thread. This work is distributed across the graphics, front-end, and performance teams.
The current high level engineering performance focus areas are:
- (start-up) A reduction of Firefox desktop start-up time. Start-up time was identified as a key retention driver in the Chrome attrition study.
- (responsive) Improved responsiveness through the removal of main thread IO. Main thread IO is a key cause of visible 'jank' (periods of unresponsiveness) in Firefox products.
- (throughput) Improved content load time. Perceived time-to-load is a visual differentiator between browsers.
- (tooling) Improved test automation and profiling tools for desktop and mobile.
Project definitions including team, product impact, and work tracking are listed at https://wiki.mozilla.org/Performance. High level project activity and current projected targets are listed below.
Firefox 25 (release)
- (responsive) Remove localStorage (blocks the main thread) from browser about: pages
- (responsive) Off main thread compositing (OMTC) for OSX 10.7 and 10.8
- notable fixes
- (start-up) Session Store I/O and initial session improvements (bug 891360, bug 887394), Reduction in Firefox for Android APK size due to reenabling Elfhack - regression from Firefox 20 (bug 892355), Firefox for Android BrowserToolbar optimization (bug 886528)
- (responsive) JS file handing improvement via not flushing OS.File.writeAtomic by default (bug 886997), Firefox for Android memory improvements via and libxul size reduction (bug 887902)
- (throughput) Session Store caching improvements (bug 867143)
- (tooling) Profiling improvement on ARM - EXIDX unwinding speedup; makes sampling in the 200+ Hz range on ARM viable (bug 883126)
Firefox 26 (beta)
- (start-up) Replace Addon Manager SQLITE with JSON file to reduce impact on start-up due to disk IO
- (responsive) Reduce Storage connections main-thread operations - API complete at this point, FHR conversion complete, Sqlite.jsm and asyncClose consumers already getting perf wins, additional consumer migration to follow
- (responsive) Downloads API rewrite to remove noticeable UI pauses due to writing files on the main thread - downloads are a top cause of main thread jank
- (tooling) Improved Talos tests that really stress svg/scroll performance
- (tooling) TART, new tab animation test framework
- notable fixes
- (start-up) Small start-up improvement on Android due to Telemetry change (bug 905759, bug 906088)
- (responsive) Off-main-thread sqlite AsyncClose (bug 874814), Don't load images that aren't visible - was a cause of jank and out of memory (OOM) errors on image heavy sites (bug 847223), Blocklist fewer graphics cards (bug 901494, bug 904266)
- (tooling) Better error reporting for Promise and Task (bug 908955), Support for Task-based asynchronous tests in mochitest-browser (bug 872229)
Firefox 27 (aurora)
- (responsive) Off main thread compositing (OMTC) for Windows
- (responsive) e10s-style asynchronous session store tab state collection
Firefox 28 (nightly)
- (start-up) Reducing time to first paint for cold start-up on slow/old hardware1
- (responsive) Complete asynchronous history API2
- (responsive) Reduce impact of bookmarks backups2
- (responsive) Reduce impact of session store cookie collection2
- (responsive) Reduce impact of session store thread communication2
- (responsive) SQLite for chrome workers2
- (responsive) OMTC image animation
- (responsive) Unification of mobile platform graphics (buffer rotation / tiling)
- (responsive) Remove main-thread I/O from the Login Manager
- (start-up) Skip recursive directory scans for unpacked add-ons
- (responsive) Reduce impact of thumbnailing by moving work to background thread
- (throughput) Network Cache Rewrite
- (tooling) New unwind library for profiling on mobile
- (responsive) Incremental Cycle Collection4
- (responsive) Browser responsiveness benchmark
- (responsive) OMTC CSS animations
- Improve Places Host Storage3
- Improve Space Efficiency of Places URL Index3
Reducing time to first paint for cold start-up on slow/old hardware pushed back to Firefox 28 (was previously targeted at Firefox 26) due to focus on other projects.
A number of projects have been retargeted from Firefox 27 to Firefox 28 due to competing priorities.
Projects on hold due to lack of resources.
Planning to land incremental cycle collection preffed off by end of 2013. Not yet sure when this work will be able to be preffed on.