Perilous Performance Proportions
Recently, I started working on one of our Q3 goals to reduce “dirty” profile startup time to be only 20% of normal startup time. It is a pretty big and scary problem, and is probably the hardest problem I have ever worked on for the Mozilla project (I have had some doozies in the past too…). So far I have only spent time trying to get consistent results of startup time with a dirty profile (of the Firefox kind) so I can then compare profiles (of the program profile kind) to a clean profile (of the Firefox kind). For now, I am just using a copy of my own profile to get some data (no, you cannot have a copy of it).
Unfortunately, I immediately hit a bit of a speed bump. I think a picture best explains this:
This is a chart of the 20 runs talos does when measuring startup time. As you can see, the dirty profile kept on increasing each and every run. After about a day of investigating this, the cause is finally known: tabs. Turns out, talos tries to quit the browser before calling window.close(), which results in the tabs not closing. As a result, at the end of the 20 cycles, we were loading 19 more tabs than the first cycle. I filed a bug about this behavior against talos. It does not matter now, but if we ever decide to change the default preference in Firefox to load your windows and tabs from last time this will come back to bite us.
I did learn something useful out of all of this though: startup time scales linearly with the number of tabs session restore has to restore. I confirmed this by running talos with 200 cycles instead of the normal 20, and it was clearly a linear increase. We should probably figure out a way to mitigate that, but I have not filed a bug on it (yet!).
sdwilsh Status Update: 2010-07-24
Done:
- Caught up on bugmail after vacation
- A few reviews
- Started to work on "dirty" profile startup goal. Found an issue with the testing methodology, so I'm revising it and trying again. Target is to get some ideas on what we need to fix for the goal by Tuesday's platform meeting.
- Fixed the following blockers:
- Bug 581000 - Upgrade to SQLite 3.7.0
- Bug 578939 - Storage service cannot be initialized off of the main thread
- Fixed the following bugs:
- Bug 575667 - split about:memory reporting into more detailed sections for SQLite (blog post about it)
Next:
- Get a plan of attack together for "dirty" profile startup goal.
- Tackle some of the 15 reviews in my review queue (blockers first!)
- Look into fixing another blocker (I have no more b3 blockers, just beta N ones.)
