From MozillaWiki
Jump to: navigation, search

Performance Program Review - July 2013

Active Projects

Project Status ETA (weeks)
Incremental Cycle Collection (ICC)
  • rebased over other ongoing CC work
  • investigating and fixing leakiness and crashes
Keep JS-accessible APIs from blocking the main thread
  • done:
    • Async mozStorage connections
    • Module loader for chrome workers
    • Various tweaks to OS.File
  • in progress:
    • Workers
      • Refactoring OS.File for module loader
        • ETA: End of July for the next batch
        • ETA: End of August for everything, unless something high-priority happens
    • Storage
      • Closing async mozthreadStorage connections off the main
        • ETA: End of July
    • APIs
      • Async downloads API for JavaScript
      • Async module for detecting crashes
        • No ETA (mentored bug)
    • Refactorings
      • Improving asynchronousness + performance of SessionRestore startup
        • blocked on reviews by ttaubert, who has some other regressions and other work to complete
      • Adapting various modules to new-style Promise
      • Making mozStorage clients async
    • To begin
      • Investigate DOM Promise
        • ETA: End of August, unless something higher priority happens
      • Port modules to async mozStorage connection
Workers: End Aug, mozthreadStorage: End July
Profiler Backend for Mobile
  • done:
    • Multi-thread support for GUI (Anton Kovalyov)
    • Multi-thread support for backend (BenWa + others?)
    • Java profiling on Android (BenWa?)
    • Native unwind for ARM/Android using EXIDX (in nightlies) at circa 200Hz / 100MB
  • In progress:
    • Improve breakpad unwind performance for EXIDX and CFI (jseward) <- Android and possibly Linux
      • Have an in-principle plan, but don't know how hard it will be to implement
    • Reduce mem use for EXIDX/CFI unwind. Closely related to previous point.
    • Fix stability problems related to breakpad/faulty.lib interface (glandium, bug 887685)
      • glandium holds the token on this; not sure how hard it will be to fix
  • Other stuff we should consider
    • Testing
Breakpad unwind speedups: late august.
Reducing time to first paint - Phase 1

The project hasn't reached the 10% improvement goal, partly because of regressions and partly because Vladan's time hasn't been devoted exclusively to this project. Retargeting for the end of July.

  • done:
  • todo:
    • reduce number of DLLs loaded at startup
      • revisit decision to prefetch gkmedias.dll to dependentlibs.list (it gets read on startup)
    • Improve SafeBrowsing behavior on startup (after firstpaint)
    • new way to do startup crash detection that avoids main thread fsyncs
End of July
Replace Addon Manager SQLITE with JSON file
  • All core work is done and either reviewed or up for review
  • Try builds exposed a small number of platform-specific test failures; fixes for those should be done this week
  • Waiting for reviews on several key patches.
AddonRepository should land in the next few days, XPIProvider hopefully within a couple of weeks
Smooth Tab Animation
  • Newtab preload turned on by tim.
  • Talos tab animation test: in progress (works, needs refinements - will leave some to v2).
  • Scroll smoothness test: in progress (works, looking for better metric to correlete to smoothness).
Network Cache Rewrite
  • Testing on old iMac and Samsung with Android.
  • Blog post with results from testing and optimizing on this hardware
  • Stuff not mentioned in the post:
    • shutdown time regression due to closing all the files before data has been written
    • gum needs to merge with m-c to get rid of a page reload crash on Android
  • Notes:
  • There is clearly a regression for cold cached load. Block files perform much better. We may consider to create bundle files and not just single files per entry. Needs definitely more discussion and testing.
  • I'm using the event tracer to check on how stuff behaves - it's priceless to me! I can see that time to first paint is kinda volatile. It triggers randomly from 5 seconds to 30 seconds when doing a cold cached load (see the post). We may need similar resource scheduling as we have for network also in the cache code. Also, there could be a bug in thread implementation. Sometimes events are just hanging in the queue and not being triggered for e.g. 13 seconds, but that is a theory since I may not monitor all events happening on the given thread. More work on the cache I/O thread is definitely needed. Maybe just the better scheduling will revert that large regression.
Remove localStorage From Browser Pages
  • removed usage from all about: pages
    • currently investigating possible regression of about:home (bug 890409)
  • made patch to disallow using DOM Storage in about: page
End of July
Complete Asynchronous History API
  • investigating an history regression caused by the new GetPlacesInfo API (bug 892454)
  • Mano working on consumers conversion from GetPageTitle to GetPlacesInfo
    • Writing a new Places transactions manager to take async into account for undo/redo of bookmarks
  • restarting the work on RemovePlaces
Mid Sept
Reduce Impact Of Bookmarks Backups On Shutdown Late Sept
Reduce Storage Connections Main-Thread Operations
  • Yoric working on off-main-thread asyncClose, blocked on complex database close sequence causing leaks. Investigation ongoing
  • Marco working on conversion of autocomplete to the async API, to avoid jank on first locationbar search
  • Note: Consumers need to be converted after API is complete.
API: End July
Asynchronous Places Annotations
  • Mock of the API filed, Mano will implement prototype module
  • on hold while working on GetPlacesInfo consumers conversion
  • Note: Consumers need to be converted after API is complete.
Components: Late Sept
Improve Text Performance
  • Lots of fixes came in with bug 863248 - new shaping engine with a bunch of perf fixes
  • More to come from bug 834609 (improve talos tests to be less noisy wrt text), bug 885689 (checks to ensure rtl text doesn't regress perf for ltr text) and others
    • need to start with metrics so that we can prioritize bugs
  • jdagget, jq, simon on this project
Downloads API rewrite
  • Work completed:
    • Support for serializing to JSON file and file format definition (bug 835885, bug 851454)
    • Methods to remove downloads when the related history entry is removed (bug 836485)
    • Support for the becauseBlocked property on DownloadError (bug 852599)
  • Next, only two bugs left to reach the "consumer interface complete" milestone:
    • Add the ability to resume a download from where it stopped (bug 836437)
    • Add methods to execute actions on completed downloads (bug 852482)
  • Work to reach the "initial features" milestone (tracked in bug 881062) is proceeding in parallel
Mid Aug

Project Proposals

Nothing to report.