Joanie Kicking Butt on Firefox Performance

When we first started working on Firefox accessibility via Orca, we were running into a number of bugs that basically forced us to do some very brute force navigation techniques. The core of this brute force navigation was to analyze the content character by character in a pretty rudimentary way. Following a common mantra of programming (1. Make it work, 2. Make it work right, 3. Make it faster/smaller), we didn't do any smart tricks to speed things up. Instead, we stayed on Step 2 for a while: we just wanted to get things working so we could learn more about the user experience. We also couldn't jump to Step 3 because we needed changes made to Firefox's Gecko layout engine.
After much work with the Mozilla team, we finally had a chance to work on Step 3 of the problem. Joanmarie 'I work for free because I love Orca so much' Diggs jumped into it with great fervor. Marco's recent blog entry describes the very positive end user impact of Joanie's work on the problem. While the perception of end users is king, Joanie did some further analysis to quantify the improvements, summarizing them in the Orca Performance Metabug:
Revision 3387 (pre-Gecko performance)
vs
Current Orca plus latest patch to Bug 506360 (rev.4)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Reading the Wiki by Line
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4166839 function calls in 201.149 CPU seconds
958015 function calls in 139.656 CPU seconds
-----------------------------------------------------------------
getLineContentsAtOffset
ncalls tottime percall cumtime percall
372 0.956 0.003 50.363 0.135
148 0.007 0.000 4.011 0.027
-----------------------------------------------------------------
goPreviousLine
ncalls tottime percall cumtime percall
66 0.014 0.000 43.315 0.656
72 0.005 0.000 13.542 0.188
-----------------------------------------------------------------
goNextLine
ncalls tottime percall cumtime percall
86 0.014 0.000 39.971 0.465
72 0.005 0.000 12.087 0.168
-----------------------------------------------------------------
findPreviousCaretInOrder
ncalls tottime percall cumtime percall
6469/5001 0.314 0.000 12.537 0.003
588/164 0.174 0.000 3.849 0.023
-----------------------------------------------------------------
findNextCaretInOrder
ncalls tottime percall cumtime percall
8688/26781 1.128 0.000 37.050 0.001
362/146 0.116 0.000 2.582 0.018
-----------------------------------------------------------------
getExtents
ncalls tottime percall cumtime percall
32972 11.495 0.000 17.228 0.001
1090 1.214 0.001 2.363 0.002
-----------------------------------------------------------------
updateBraille
ncalls tottime percall cumtime percall
154 0.111 0.001 22.425 0.146
148 0.162 0.001 2.600 0.018
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. Tabbing through the Bugzilla Advanced Search Form
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3675201 function calls in 193.921 CPU seconds
548400 function calls in 96.273 CPU seconds
-----------------------------------------------------------------
onFocus
ncalls tottime percall cumtime percall
115 0.006 0.000 75.807 0.659
115 0.006 0.000 10.105 0.088
-----------------------------------------------------------------
locusofFocusChanged
ncalls tottime percall cumtime percall
58 0.005 0.000 75.714 1.305
59 0.009 0.000 9.397 0.159
-----------------------------------------------------------------
guessTheLabel
ncalls tottime percall cumtime percall
35 0.007 0.000 25.423 0.726
34 0.006 0.000 2.538 0.075
Way cool work, and many thanks to Joanie and the Mozilla team. This is a wonderful example of the open source community working together in a constructive way to solve very difficult problems. Yeah!
PS - If you're wondering how we got the numbers, please refer to the Orca Regression Testing page, or just know that we have been using the cProfile module for Python.