Posted: October 6th, 2008
Tab Sidebar is probably my favourite extension that I’ve created. It is certainly the most polished, thanks mostly to other people pushing me to make it so. For those that haven’t used it it creates a thumbnail preview of all of your tabs in the sidebar. The thumbnails automatically update whenever the page changes, even things like popup menus generally show up. This automatic updating comes at a cost though.
In order to detect changes to the page content the extension mostly uses DOM mutation events. These are in theory sent out whenever a change to the page’s structure happens, which covers adding/removing content, style changes, text entry and all manner of things. What I wasn’t aware of when I first used this technique was that Gecko performs certain optimisations when there are no DOM mutation listeners registered for a document (the normal case). Simply the presence of a mutation listener impacts the speed of any DOM manipulation by the page. How much? Well nothing like a graph to illustrate things.

Performance impact of mutation listeners
These are numbers gathered from the Dromaeo test suite, averaging 5 runs with and without Tab Sidebar installed. A little perf loss is inevitable as the extension must perform some checks on the mutation and occasionally repaint the thumbnail, but nowhere near the sort of regression that actually occurs. I’ve combined some of the test results for simplicity but it is pretty clear that while the regular JS tests are essentially unaffected, the DOM tests can have wildly different results. Don’t ask me why DOM Queries get faster with the extension installed, but DOM modifications are a nice round 4 times slower.
That isn’t to say that using mutation listeners is a complete sin to be avoided at all costs. In some cases they are the only safe option. I discovered this problem some time ago and never before found a better way to detect the changes for Tab Sidebar. Last I checked Firebug uses them in similar ways. The point I think is that there are many features in the platform that can have unexpected side effects.
Of course I guess I wouldn’t be making this post if I hadn’t finally come up with a solution. While I’m no longer actively working on my extensions, I’m afraid I couldn’t resist the opportunity of the new MozAfterPaint event that landed on trunk recently. Quite simply whenever an area of the page is repainted on the screen this event is dispatched with details of what the area painted was. This is absolutely perfect for Tab Sidebar, which isn’t surprising since the use case it was written for is essentially what Tab Sidebar is doing anyway. After a few hours of ripping out most of the event handling code I now have a working prototype that redraws solely based on this event, only painting the areas that might have changed.

Performance impact of the MozAfterPaint listener
Boy does it work well. As you can see from the graph essentially all of the performance loss is gone. For some reason the faster DOM queries are still there (who am I to complain if my extension makes Firefox run faster!). And what’s more the previews are now updated not just for DOM changes, on OSX at least it even sees repaints of plugins. It is quite bizarre to be watching a movie on youtube and see the little thumbnail at the side showing the movie as well.
I guess now I have whetted your appetite it would be unfair not to make the test version available. Use at your own risk of course, the sheer amount of code change means there are likely some problems lurking, but you can install Tab Sidebar 2.5a1 and see how it goes. If you set the preference extensions.tabsidebar.selecteddelay to -1 then it won’t even delay before repainting and just repaint the thumbnail as soon as the main page is painted, this actually seems to work out best for me, particularly on sites with fast animations.
Tags: extensions, performance
5 Comments »
Categories: extensions, mozilla
Posted: August 26th, 2008
I guess it isn’t going to come as much of a surprise to people when I say I’ve been having a hard time finding the time to maintain the extensions I develop. I’ll go over some of the reasons why shortly, but I guess the highlight (or lowlight depending on your point of view) of this post is that I’m no longer going to really put in any effort to keep them updated.
Nightly Tester Tools will probably continue to get the odd update here and there where I find something interesting to add, and Update Channel Selector is due to get an update to make it actually work on most platforms, but otherwise I would not expect to see any further updates for any of my other extensions.
I came to this conclusion last week when doing some updates and I realised that I really wasn’t enjoying it. The things I generally enjoy doing in my spare time are things that are new and interesting. All of my main extensions were born out of finding something cool to do with the platform. Fast ways to perform regular expressions on large html documents, painting thumbnails of webpages (back when it was actually new and exciting), taking enough control of the toolbar customisation service to be able to dynamically add many instances of the same widgets. All of this stuff was interesting enough to make me knock up a quick extension to play with it. When they seemed useful I would go through and try to iron out some of the rough edges to make it something I’d consider release-worthy. Only Tab Sidebar had real effort put into it to try to make it into a real user friendly product.
I’ve also had quite a large change in my life since I last really actively worked on my extensions. Back then I was a small business owner, most of my day to day work was IT support and web development. Getting home and sitting down for a few hours hacking away on extensions worked as quite a diversion, completely taking my mind off the stresses at work. Now I work for Mozilla. Working on extensions is basically no different from what I do during the day. It is no longer a diversion, it is just like work. How many of you like to get home from work, kick back and then go back over more work to relax?
These things, as well as other issues, have left me really uninterested in doing anything except the exciting new stuff. Turning that into a usable tool, fixing bugs, making things work in new releases, all of that is just dull and no longer worth the spare time it loses me.
And that is pretty much that. I’m not totally out of the extensions game, while I might still create a few experimental add-ons in the future, they probably won’t be fully useful, just little things for fun. I’m not really going to be interested in hearing about bugs in my existing stuff or that it hasn’t yet been updated to the latest version of Firefox. I’m not going to do anything about it. Of course all of my add-ons are open source, under the MPL/GPL/LGPL tri-license, and I’d happily talk to anyone thinking of taking over official development of them for the future.
To those of you who have kept using my extensions and let me know how much you liked them I’d like to say thank you, and I’m sorry that there will be nothing more even though I know you were hoping. It’s taken me a while to reach this decision and I’m sure some will feel a little left in the lurch by it, but I can’t keep fooling myself that I’ll find the time to put in the effort you all deserve.
Tags: extensions
15 Comments »
Categories: extensions
Posted: February 19th, 2008
I’ve finally taken the plunge and switched my website to a more modern blogging software (Wordpress) and a dedicated media gallery (Gallery 2). Hopefully through the magic of redirects most shouldn’t notice much difference. I just hope planet hasn’t decided to dump all my posts onto the front page, if it has then I apologise.
I’ve also taken this opportunity to move all my extensions to addons.mozilla.org. Most are currently still in the sandbox, hopefully they will come public soon. I’m also using the nice new AMO API service to populate details on the add-on homepages, means there is only one place I need to make most changes to.
Tags: amo
No Comments »
Categories: extensions, general
Posted: August 19th, 2007
One of the main parts of my work for Mozilla at the moment is about securing add-on updates. The spec is now pretty near complete and the implementation is also pretty much complete so hopefully we can start pushing out the necessary tools to add-on authors real soon then land the work shortly after.
Of course it wouldn’t be right for me to push this out without first making my own extensions comply with the new requirements. So today I am rolling out updates to all of them, mostly just changing the update url to an SSL one, though a couple of the extensions (Nightly Tester Tools and /Find Bar/) have some additional updates.
Using SSL really will be the easiest way of hosting secure updates for your extensions and I urge you to use it. Assuming you have a sensible hosting package, adding SSL is really not as expensive as many expect. Godaddy offer SSL certificates for $18 per year (minimum of 2 years) and if you are like me and hosting open source extensions then you can get the first year for free (though that seems to take a few weeks longer than if you pay). It’s also pretty simple to set up assuming you have a decent webhost, Dreamhost just has one form to fill in.
It turns out that the hardest part of getting SSL was fixing the bugs in my CMS since it’s current version had never been used in an SSL environment before
Tags: addons, hosting, security
No Comments »
Categories: extensions
Posted: July 20th, 2007
For some time now I’ve promised myself that I’d sort out a simple system to view stats about how many people are using my extensions. The idea is a simple one, on a daily basis Firefox (or whatever app) will ping my site checking for an update for the extension. Counting the number of checks in a day gives you a rough idea of the number of users. You can’t take the numbers literally of course but as ballpark figures go it’s probably not bad.
Finally I have got around to doing it and there have been some interesting results. Not surprisingly Nightly Tester Tools is my most popular extension. However it’s distressing to see how many updated to the broken 1.3b1 and still haven’t gone to 1.3b2. Not surprising of course, but it makes me wonder when these 30,000 people or so will update again.
The most surprising result is that of the second most popular extension. Turns out it’s JavaScript Options, something I had never considered to be popular at all based on the number of questions/complaints I get about it.I may well have to reconsider my decision to cease further work on it.
Then of course you get the freaky results. Who’d have though that people on Solaris are using my extensions. And even more bizarre, why has someone installed Tab Sidebar into Thunderbird?
You can peruse the stats yourself if you like, there’s a few different views to play with. Some of the old data isn’t highly accurate, my back-filling script needs some work, and many of the extensions simply aren’t reporting the more detailed information about OS and version so some of those graphs are a little misleading, still there it is.
I understand that AMO are planning on rolling out some stats for add-on authors based on the same update pings that I use. I urge all authors to take a good look at them when they do, you never know what you might find that surprises you and makes you re-evaluate your priorities for your extensions.
Tags: addons, stats
3 Comments »
Categories: extensions
Posted: July 3rd, 2007
I don’t normally do announcements of new versions of my extensions here but unfortunately there was a problem with the packaging of the last version of Nightly Tester Tools so if you want to get the latest and greatest version then you’ll have to download it manually.
Sorry, I’ll try not to let it happen again.
Tags: ntt
2 Comments »
Categories: extensions
Posted: June 13th, 2007
David Baron recently put out the call for there to be more leak testing on trunk builds. We have a number of regressions that we need to find and fix before Firefox 3 goes out the door. The best way to do leak testing has always been to use his excellent leak-gauge script which catches more leaks than the leak monitor extension. Unfortunately the leak-gauge script is not the easiest of beasts to play around with.
Thankfully for some time now Nightly Tester Tools has had the leak-gauge script included in it to hopefully make this process a bit easier. I discovered today that that functionality has actually been broken on trunk builds so make sure you pick up the latest version 1.3b1 if you want to use it (don’t worry i should be pretty stable as betas go). Once installed just go to Tools - Nightly Tester Tools - Analyse Leak Log. Tell it where to find your log and it will create a leak report that you can copy to the clipboard at the touch of a button.
Unfortunately you still need to actually create the leak log, I suggest a script something like this (will need adapting for other platforms):
cp -f nspr.log lastnspr.log
export NSPR_LOG_MODULES=DOMLeak:5,DocumentLeak:5,nsDocShellLeak:5
export NSPR_LOG_FILE=/Users/dave/nspr.log
/Applications/Minefield.app/Contents/MacOS/firefox-bin
Then you can analyse lastnspr.log while still logging the current run. In Firefox you can even set the log analyser as the home page so it automatically loads the last log on startup.
Note that you can’t analyse the log being generated by a currently running app, nor one from a crashed session in an app, both will look hideously leaky. Please be sure to file good memory leak bugs and good leak hunting.
Tags: leaks, ntt
No Comments »
Categories: extensions
Posted: March 31st, 2007
Obviously for those keeping up with this rather minimal blog I’m somewhat behind where I hoped to be since my last post. Still no new release of Nightly Tester Tools so I thought it worth giving a quick roundup of the few extension’s I’m still working actively on and what’s happening with them:
Nightly Tester Tools is getting the main development work right now. My previous few weekends have been spent working on coding zip support so that it can update an extension’s compatibility info on the fly in the xpi file. This will allow the Mozilla extension manager to do it’s job, which is handling the safe install of the extension itself. Right now I’ve slowed down because I’m about to start talking to Mozilla about getting the zip writing component into the Mozilla platform which will undoubtedly require some API changes. That and I don’t have a Linux or Windows platform to do a build of the component on. If anyone wants to volunteer to assist (you need to already have experience of building a mozilla app) then please get in touch.
Tab Sidebar is an extension that many are waiting for the updates that I currently have in development. A lot of it is there and working, unfortunately there are also some broken bits so it’s really a case of finding the time to get those fixed.
/Find Bar/ is now totally broken on trunk builds of Firefox, but should still be ok on 2.0.0.x builds, though I have had a few error reports and suggestions on how to proceed. The next steps are to make this handle block content in pages as paragraphs and then to try to find and fix what’s causing a rare crash. I also need to work out how toadd to the new find bar widget on trunk without duplicating too much of it, but so far that’s proving to be tough.
Toolbar Thinger is not receiving a lot of attention. I have had some good reports that people are finding it very useful, also a couple of reports of problems unfortunately not in enough detail for me to be able to track the issues down. At some point I want to find a nice icon for it, do a full track through for any issues I’ve missed and then do a first proper release.
Update Channel Selector was always a very simple extension and so unsurprisingly it’s not needed a lot of work. Unfortunately it seems that Vista has changed that. In order to change the channel, the extension has to overwrite a file in the application’s installation directory. Vista doesn’t let you do that as easily as previous versions of Windows did. Unfortunately I do not have a Vista machine to play with so resolving that could take time.
Finally I have taken the step of marking JavaScript Options and Cookie Extras as officially discontinued. It’s unfortunate but I do all this work in my spare time and as you can see from above, I simply do not have enough of it to be able to keep up with the extensions that I want to spend time on, let alone those that I have lost interest in. I will continue to make the extension’s available on my site and I have decided that if enough people let me know that the extension works flawlessly in newer versions of the application then I will update the compatibility information (I am about to do this for Cookie Extras). However I will be releasing no new versions of these extensions.
Since both those extensions are open source (as are all my extensions) if anyone particularly wants to take over development of them then I am happy to discuss that possibility.
Tags: extensions, ntt, status
No Comments »
Categories: extensions