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!