Monday 20 August 2007
What a week!
On Sunday I met with Eli and Fantasai to talk about vertical breaking issues. It was quite productive and we scoped out what should be done for 1.9 and beyond. For 1.9 we plan to do something hacky that will fix printing of pages where most of the page is in an abs-pos block that starts on the first page. This will solve most of the abs-pos printing pain. We will probably not be able to deal with abs-pos blocks starting after the first page, unfortunately. That will require changes that don't fit into 1.9. We also agreed that post-1.9 we should eliminate continuation frames for float placeholders; I used to be unsure whether this would be an overall simplification, but now that abs-pos placeholders are in the mix, it's clear this will be a win.
In fact I've become convinced that our entire continuation model is a bad idea. It's nice in some ways that our frame tree corresponds (mostly) to the CSS box tree, so that elements that generate a chain of CSS boxes create a chain of corresponding nsIFrames; but mostly it's just an enormous mountain of pain. Managing the continuations during DOM changes and dynamic layout is a ton of code, it's fragile, and leads to memory safety errors. It also leads to performance problems. For example, if you have a big chunk of text in inlines nested K levels deep, spread over N lines, then there are at least NK CSS boxes and therefore we create NK nsIFrame objects. This is both memory-hungry and slow especially for certain pages. If we just had one "frame" per element and stored the positions of line breaks and some other selected geometry data (like the Y-offset of each line's baseline and each line's overflow area) we would only need O(N + K) storage and I think we could still paint and layout as efficiently as we do now, probably better. Webkit doesn't have this continuation model and I'm sure that helps them a lot (although Webkit's architecture doesn't accomodate advanced cases of vertical breaking so I wouldn't just copy it).
On Monday I went to VMWare to give a talk about Chronicle and speak to people there. I had a great time and learned many interesting things. One thing I learned is that the overheads of VM record and replay are significantly higher than I'd believed --- probably a minimum of 20 or 30 percent. It's still a very interesting technology, though, and there's great potential synergy between VM replay and Chronicle-like tools. I hope that we can do some low effort cooperation there.
Tuesday through Thursday was the Mozilla Corporation all-hands meeting. It was all very good and as usual it was fun to see people I'd worked with but not yet met face to face. Some sessions were particularly interesting. There was a good discussion of Mercurial which pretty much convinced me to start using it via hg.mozilla.org's cvs-trunk-mirror. There was a spirited pair of sessions on post-1.9 planning. There are a number of interesting Gecko features that are well under way but I think will slip out of 1.9, and I'm also doubtful that a meaningful Mozilla2 release can happen next year, so I think it behoves us to ship a 1.9.1 release subject to constraints:
- New features for 1.9.1 should be substantially done by the time we wrap up 1.9.
- New features for 1.9.1 should not affect compatibility with existing Web pages.
- We should be conservative about fixing bugs for existing features in 1.9.1, i.e., stick to fixing regressions, security bugs, or other critical bugs.
Given the first constraint, I think we could just about write down the list of 1.9.1 features right now. That also tells us who will be focused on 1.9.1; the rest of us --- much the majority --- should be focused on Mozilla2. I think that my compositor proposal should not be in 1.9.1, given my third constraint, which lets me focus on Mozilla2.
Doing 1.9.1 has additional advantages, like relieving pressure on 1.9, allowing us to tidy up after 1.9 in a timely manner, adding some dazzle to a 2008 Firefox front-end release, and gratifying contributors. There are of course disadvantages, like the cost of doing a release, and the potential to drain resources from Mozilla2. I trust in the iron fist of our Mozilla overlords to avoid the latter.
I enjoyed the MoCo social events, although I felt subdued and a bit withdrawn on Tuesday and Wednesday. It might have been my natural difficulty adjusting to large groups (unless immersed in a comforting bath of technical discussion).
I worked with David Baron during the week to explore down a cycle collector fault that I captured in a Chronicle trace weeks ago. It went much as I'd hoped: we'd explore with my tools for a little while, then we'd realize the UI needed a new feature, so that night I'd add it and we'd try again the next day. We eventually succeeded in tracking down the issue, so score one for Chronicle! I have prepared a open-source release of the UI (thanks to Mozilla); I will post again soon to announce it. I'm just waiting until I've made a good screencast of the UI in action.
Friday was a fun quiet day at the office. Chris Double and I met with Ian Hickson to discuss stuff. I also had a good chance to chat with Mozilla people in greater detail. Chris amazed all with his Silverlight-alike SVG-with-video demo --- as Vlad commented, "it works shockingly well!"
I flew out on Friday night and arrived home on Sunday morning. We've got new hires joining the Auckland office in next couple of months and I need to find new office space and organize a few other things. I will of course be mostly working on 1.9 blocker bugs, especially text bugs.
During the flights I managed to watch a bunch of movies, thanks to Air New Zealand's somewhat-annoying but mostly great video on demand system:
- Spider-Man 3: okay, more of the same.
- Hot Fuzz: Pretty good, a good mix of parody and actual plot.
- 300: ahistorical, prurient, philosophically revolting, but very memorable and occasionally intriguing --- worth watching if you can stomach it.
- Black Sheep: achieves its aims of being an unsophisticated splatter-fest full of Kiwi in-jokes --- so okay, but could have been a lot better.
- Amazing Grace: brilliant acting, moving, inspiring. Recommended.
- Next: only moments when it threatened to be more than rubbish. I like Nicholas Cage, but he seems to be in a rut of terrible vehicles.
- Shrek 3: okay, more of the same.