Fennec 1.0 Beta 1 – New and Notable

We released Fennec 1.0 Beta 1 for Maemo! Go read Stuart’s announcement for a good overview of the release. Be sure to watch Madhava’s video walkthrough too. Like Stuart, I am now using Fennec as the default browser on my N810 tablet. We have reached a solid milestone for performance and stability.

What’s New

Most of the work for this release was not visible UI features. Getting the Flash plugin to render onto Fennec’s canvas display surface was a big step. We also added the ability to pan any scrollable list in the chrome UI. So the bookmark list, add-on list, download list, preference list – and so on – now support scrolling/panning just like the main web content. We still need to add support for iframes and web content lists, which are trickier since they kind of conflict with panning the content itself.

Another area that has seen a lot of work is the rendering mechanism – the code that takes the content of the hidden browser element and renders it to the visible canvas display surface. Fennec Beta 1 has better pageload times and much better panning performance because of this work. For more background on what I’m talking about, read this post and the referenced article.

We did add some visible UI features. A big one is the new bookmark list. Fennec now supports bookmark folders and has capabilities for managing your bookmarks and folders. We still have some polish work to do, but the basics are all functional.

The default font size is a bit larger too, making it easier to read text content when Fennec auto-zooms web pages.

I almost forgot – JavaScript JIT is on by default for web content. It makes a big difference. The ARM related fixes to the JIT code made that possible.

What’s Notable

Our never ending struggle to make Fennec (and the Mozilla platform in general) as fast as possible on mobile devices has yielded a few more nuggets. Vlad and Taras have been hammering away on the rendering mechanism. Some parts of the process we can control better than others. The actual drawWindow call still dominates the time to render. We still try to improve the drawWindow performance, but there is only so much we can do. Instead, we try to limit the calls to drawWindow and limit the size of area we need to render.

Another area we can make improvements is overhead of XPConnect – the bridge between JavaScript and C++. On mobile devices, the overhead from XPConnect is non-trivial so we are reducing the XPConnect-able calls. We might also try adding more “quickstubs” – code that short circuits the XPConnect bridge, making the call faster.

Finally, we are noticing slowdowns related to the Places (bookmarks and history) system. Likely to be SQLite file I/O related. Two examples are: during startup the Places system is initialized, and when Fennec loads the bookmark list. I’ll note that neither of these examples is noticeable at all on desktop machines.

The startup issue is caused by a XPCOM component being initialized and in turn, initializes the Places core system. It results in a 250 ms speed bump during startup. We are currently working on a fix for this issue. The bookmark list load time is slowed by accessing the bookmark system for information used to display in the list, for each bookmark. In a simple test using just 10 bookmarks, it can take almost 3 seconds to load the list. Luckily, we were able to avoid some of the calls to the bookmark system and have improved load time by almost 40%.

We already have several performance related patches ready to land for the next release. Also, just about all the performance improvements we make for Fennec on Maemo are directly applicable to Fennec on Windows Mobile – win/win!

Fennec Windows Mobile – Update

I previously reported that we found a memory-related problem in the Fennec Windows Mobile pre-alpha release. Bug 477956 was the primary place to track our efforts to fix the problem. However, it became clear that porting jemalloc to WinCE was the best way to handle the situation, so bug 478044 became the bug to watch. As you can see, we are in the process of getting the fix reviewed and landed.

Using our own memory allocator gives us much more flexibility and control. We can workaround the memory management limitations found in WinCE. The next version of WinCE makes some nice changes to memory management.

A few internal test builds have been made, and with a high level of confidence, we can say that the memory problems have been solved. Once we get the fix landed, you can expect new Fennec builds for Windows Mobile.


While I was on vacation last week, the newest official XULRunner was spun up and has now been released. XULRunner matches the Firefox 3.0.7 release. For XULRunner developers, most of the changes in are related to security fixes. There are some cookie and XHR fixes in there too. You can also look at the full list of fixed bugs.

Source tarball

Thanks to Dave Townsend and Nick Thomas for getting out the door.

Want to get started building XULRunner applications? We have an article for that.