Over the past few months we’ve heard from a number of users asking us to focus on performance optimizations for the next version of Songbird. Today, we’re excited to share our progress. If you can’t wait for Songbird 0.6 to ship (it lands in early June) you can try our latest blessed nightlies and judge our performance improvements for yourself. Alternatively, you can watch the following video to see the progress we’re making!
Songbird Library Performance Enhancements from Songbird on Vimeo.
The screencast linked to above focuses on the performance gains we made during this release specific to optimizations around the library. You’ll note Songbird now supports importing and managing significantly larger media libraries, scrolling in the application is now fluid, and filtering media is much faster.
But wait, there’s more!
We have made some huge improvements that should greatly reduce memory usage on Windows and Linux. We now have jemalloc turned on for the base framework, XULRunner, on Win32 and Linux. We followed Mozilla’s lead and didn’t turn it on on the Mac because the OS X allocator performs well. On Linux, jemalloc has been turned on for over a month, but Win32 took a little more work.
We provide packages to the developer community of the Mozilla base of our code (XULRunner) in both release and debug mode. When we first tried to enable jemalloc + XULRunner the application would not compile out of the box when set to debug mode. We spent a lot of time and effort getting that specific configuration working, which was the cause of the delay for Win32. We’re currently working on upstreaming that patch, since Mozilla engineers ran into the same exact problem with Firefox a few days ago.
The performance improvement in memory is about 15-20%, depending on task. jemalloc is currently only used for the XULRunner stack; while this represents a significant portion of where we spend our processing time (as can be seen by the memory usage improvement), we’re investigating using jemalloc as the allocator for our Songbird stack.
jemalloc’s design goal was a “scaleable, concurrent” allocator. Since we make more use of multiple threads than many applications, we’re excited at the prospect of another possible performance gain.
Songbird 0.6 is still a few weeks out from launching, stay tuned for some additional performance improvements that will land that improve our search functionality!