Performance Review - August 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.
2013 has seen a renewed focus on Gecko and Firefox performance. This has resulted in significant improvements to our desktop and mobile browsers. As the Tom's Hardware browser roundup victory demonstrates, the results are being recognized externally. This report summarizes the defined performance project activity and current projected windows for project completion.
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 23 (release)
- (start-up) Reduce impact of font name enumeration (bug 699331)
- (responsive) Remove unnecessary delay when clicking tab close buttons sequentially (bug 649216)
Firefox 24 (beta)
- (throughput) Eliminate costs of about:newtab on tab animation, and improve about:newtab loading time (3)
- (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 (aurora)
- (responsive) Remove localStorage (blocks the main thread) from browser about: pages
- (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 (nightly)
- (start-up) Reducing time to first paint for cold start-up on slow/old hardware
- (start-up) Replace Addon Manager SQLITE with JSON file to reduce impact on start-up due to disk IO
- (responsive) Keep JS-accessible APIs from blocking the main thread
- (responsive) Reduce Storage connections main-thread operations - API complete at this point, FHR conversion complete, 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
- (responsive) Complete asynchronous history API
- (responsive) Incremental Cycle Collection
- (throughput) Improve Text Performance
- Reduce impact of bookmarks backups
- (throughput) Network Cache Rewrite
- Improve Places Host Storage
- Improve Space Efficiency of Places URL Index