Orca LogoFirefox LogoWhen 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.

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed

This blog copyright 2009 by wwalker