Closed Bug 521973 Opened 12 years ago Closed 12 years ago

Roboform uses Accessibility API and suffers performance hit.


(Tech Evangelism Graveyard :: English US, defect)

Windows XP
Not set


(Not tracked)



(Reporter: kia1980, Unassigned)


(Blocks 1 open bug)


(Keywords: access, perf)


(1 file)

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: Gecko/20090303 SeaMonkey/1.1.15
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: Gecko/20090303 SeaMonkey/1.1.15

When Accessibility Service enabling makes Firefox slow on pages which modifies DOM tree.
With Accessibility enabled replace HTML Element operation takes about 10 times more time.
Call stack for Firefox 3.0 is attached.

Reproducible: Always

 	gklayout.dll!nsIFrame::GetContent()  Line 580	C++
 	gklayout.dll!nsCSSFrameConstructor::FindFrameWithContent(nsFrameManager * aFrameManager=0x051b01ec, nsIFrame * aParentFrame=0x07117d1c, nsIContent * aParentContent=0x070567c0, nsIContent * aContent=0x06530f48, nsFindFrameHint * aHint=0x00000000)  Line 10851 + 0x8 bytes	C++
 	gklayout.dll!nsCSSFrameConstructor::FindPrimaryFrameFor(nsFrameManager * aFrameManager=0x051b01ec, nsIContent * aContent=0x06530f48, nsIFrame * * aFrame=0x0012d03c, nsFindFrameHint * aHint=0x00000000)  Line 10960 + 0x21 bytes	C++
 	gklayout.dll!nsCSSFrameConstructor::FindPrimaryFrameFor(nsFrameManager * aFrameManager=0x051b01ec, nsIContent * aContent=0x06530f48, nsIFrame * * aFrame=0x0012d03c, nsFindFrameHint * aHint=0x0012d034)  Line 11011 + 0x16 bytes	C++
 	gklayout.dll!nsFrameManager::GetPrimaryFrameFor(nsIContent * aContent=0x06530f48, int aIndexHint=0xffffffff)  Line 396	C++
 	gklayout.dll!PresShell::GetRealPrimaryFrameFor(nsIContent * aContent=0x06530f48)  Line 4886 + 0x15 bytes	C++
 	accessibility.dll!nsAccessibilityService::GetAccessible(nsIDOMNode * aNode=0x06530f68, nsIPresShell * aPresShell=0x051b01d0, nsIWeakReference * aWeakShell=0x06fb59a8, nsIFrame * * aFrameHint=0x0012d2e4, int * aIsHidden=0x0012d2ec, nsIAccessible * * aAccessible=0x0012d2d0)  Line 1396 + 0x16 bytes	C++
 	accessibility.dll!nsAccessibleTreeWalker::GetAccessible()  Line 289 + 0x69 bytes	C++
 	accessibility.dll!nsAccessibleTreeWalker::GetNextSibling()  Line 198 + 0x25 bytes	C++
 	accessibility.dll!nsAccessible::CacheChildren()  Line 770	C++
 	accessibility.dll!nsHyperTextAccessible::CacheChildren()  Line 211	C++
 	accessibility.dll!nsAccessible::GetChildCount(int * aAccChildCount=0x0012d3a0)  Line 786	C++
 	accessibility.dll!nsAccessible::GetFirstChild(nsIAccessible * * aFirstChild=0x0012d3cc)  Line 660	C++
 	accessibility.dll!nsAccessible::NextChild(nsCOMPtr<nsIAccessible> & aAccessible={...})  Line 734 + 0x2a bytes	C++
 	accessibility.dll!nsHyperTextAccessible::DOMPointToHypertextOffset(nsIDOMNode * aNode=0x0700e544, int aNodeOffset=0xffffffff, int * aHyperTextOffset=0x0012d4f0, nsIAccessible * * aFinalAccessible=0x0012d4f4, int aIsEndOffset=0x00000000)  Line 684 + 0xf bytes	C++
 	accessibility.dll!nsDocAccessible::CreateTextChangeEventForNode(nsIAccessible * aContainerAccessible=0x09f697d4, nsIDOMNode * aChangeNode=0x0700e544, nsIAccessible * aAccessibleForChangeNode=0x00000000, int aIsInserting=0x00000000, int aIsAsynch=0x00000000)  Line 1412 + 0x33 bytes	C++
 	accessibility.dll!nsDocAccessible::InvalidateCacheSubtree(nsIContent * aChild=0x0700e528, unsigned int aChangeEventType=0x00000002)  Line 1922 + 0x36 bytes	C++
 	accessibility.dll!nsAccessibilityService::InvalidateSubtreeFor(nsIPresShell * aShell=0x051b01d0, nsIContent * aChangeContent=0x0700e528, unsigned int aEvent=0x00000002)  Line 1997 + 0x21 bytes	C++
>	gklayout.dll!nsGenericElement::doRemoveChildAt(unsigned int aIndex=0x0000003d, int aNotify=0x00000001, nsIContent * aKid=0x0700e528, nsIContent * aParent=0x070567c0, nsIDocument * aDocument=0x06fc63a8, nsAttrAndChildArray & aChildArray={...})  Line 2805	C++
 	gklayout.dll!nsGenericElement::RemoveChildAt(unsigned int aIndex=0x0000003d, int aNotify=0x00000001)  Line 2776 + 0x2a bytes	C++
 	gklayout.dll!nsGenericElement::doReplaceOrInsertBefore(int aReplace=0x00000001, nsIDOMNode * aNewChild=0x051555fc, nsIDOMNode * aRefChild=0x0700e544, nsIContent * aParent=0x070567c0, nsIDocument * aDocument=0x06fc63a8, nsIDOMNode * * aReturn=0x0012da38)  Line 3259 + 0x13 bytes	C++
 	gklayout.dll!nsGenericElement::ReplaceChild(nsIDOMNode * aNewChild=0x051555fc, nsIDOMNode * aOldChild=0x0700e544, nsIDOMNode * * aReturn=0x0012da38)  Line 2997 + 0x20 bytes	C++
 	gklayout.dll!nsHTMLTableSectionElement::ReplaceChild(nsIDOMNode * newChild=0x051555fc, nsIDOMNode * oldChild=0x0700e544, nsIDOMNode * * _retval=0x0012da38)  Line 62 + 0x18 bytes	C++
 	xpcom_core.dll!NS_InvokeByIndex_P(nsISupports * that=0x00000010, unsigned int methodIndex=0x00000003, unsigned int paramCount=0x0012da18, nsXPTCVariant * params=0x001e0000)  Line 102	C++
Here the test script (ZIP archive with JavaScript included files and main html)
Unzip -> open test.html -> to click by lines (By ...) in "To sort" section
Without RoboForm 6.9.96 anything works quickly, with Roboform 6.9.96 - very very slow
The developer of Roboform tells to me that this is buggy Mozilla Accessibility
Please check up these test with other applications using a Mozilla Accessibility
Yes, it also put Firefox (3.5.5) into a loop, for a minute or so.
xref query
Keywords: access, perf
Yes, this is covered by other bugs. Improving accessibility performance is ongoing.

Ivan, thanks for the report. Converting summary, let's if we can help Roboform not use A11y API. Do you have a good contact at Roboform?
Assignee: nobody → english-us
Blocks: a11yperf
Component: General → English US
Ever confirmed: true
Product: Firefox → Tech Evangelism
QA Contact: general → english-us
Summary: Bad Accessibility API design → Roboform uses Accessibility API and suffers performance hit.
Thanks for reply. A11y API usage will be removed from Roboform. It is already in process.
Ivan, that's great news. Closing this as a dupe, covered by out a11y perf meta bug.
Closed: 12 years ago
Resolution: --- → DUPLICATE
Duplicate of bug: a11yperf
I should note that the attached testcase seems to be fast for me on m-c even with a11y enabled.
Product: Tech Evangelism → Tech Evangelism Graveyard
You need to log in before you can comment on or make changes to this bug.