Performance Review - September 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.
Notably absent from this report: e10s and B2G specific performance work.
A lot of effort is currently targeted at removing work from the main thread. This work is distributed across the graphics, front-end, and performance teams.
The initial work to reduce the impact of the add-on manager on start-up is in Firefox 26. Additional add-on manager work is currently being investigated.
The initial implementation of the network cache rewrite is set to land on Nightly preffed off in the Firefox 27 cycle and is expected to take several months to harden and prepare for release.
The performance tooling continues to improve with the new TART framework for measuring tab animations and continued improvement to the profiler to support mobile.
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 24 (release)
- (throughput) Eliminate costs of about:newtab on tab animation, and improve about:newtab loading time
- notable fixes
- (start-up) Small improvements to reduce start-up I/O (bug 881578, bug 879957)
- (responsive) VSync support on Windows (bug 856427), Reduced IPC deserialization overhead on ARM (bug 871596), Removed all main-thread I/O from form history/autocomplete (bug 876002, bug 566746, bug 697377), Content pref consumers migrated to async API (bug 831208)
- (tooling) Updated profiler to track all main-thread I/O (bug 867762), Updated debugger to support tracking reflows to help eliminate issues with inefficient layout (bug 453650)
Firefox 25 (beta)
- (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 (aurora)
- (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 (nightly)
- (start-up) Reducing time to first paint for cold start-up on slow/old hardware1
- (responsive) Complete asynchronous history API
- (responsive) Reduce impact of bookmarks backups
- (responsive) Incremental Cycle Collection
- (responsive) Off main thread compositing (OMTC) for Windows
- (responsive) Reduce impact of session store cookie collection2
- (responsive) Reduce impact of session store thread communication2
- (responsive) e10s-style asynchronous session store tab state collection2
- (responsive) SQLite for chrome workers2
- (responsive) OMTC image animation
- (responsive) Unification of mobile platform graphics (buffer rotation / tiling)
- Improve Places Host Storage
- Improve Space Efficiency of Places URL Index
- (responsive) Reduce impact of thumbnailing by moving work to background thread
- (responsive) OMTC CSS animations
- (throughput) Network Cache Rewrite
- (tooling) New unwind library for profiling on mobile
Reducing time to first paint for cold start-up on slow/old hardware pushed back to Firefox 27 (was previously targeted at Firefox 26) due to focus on other projects.
The Keep JS-accessible APIs from blocking the main thread project now reports each individual component in the project in this report.
The Improve Text Performance project has been removed and will be replaced by a more specific project that is not yet well defined.