On Aug 23, 2010, at 12:47 AM, Eric Seidel wrote:

> Does anyone know why AXObjectCache is not ref counted?  It has some
> manual scheme which seems likely to have bugs in it.
> 
> http://trac.webkit.org/browser/trunk/WebCore/dom/Document.cpp#L1742
> 
> There just seems to be a lot of code in Document to manage this simple cache.

I don't know the history of this code, but I suspect refcounting would work.

Note: a bunch of the complexity there is to ensure there is only one 
AXObjectCache per frame/document tree, but still keep it in a member of 
Document. Using refcounting would get rid of the explicit new/delete calls, but 
would not greatly simplify the overall logic.

If there is only supposed to be one per top-level document rather than one per 
document, perhaps it should live off of Page. Then it could follow single 
ownership and be held by an OwnPtr. It would add more indicrection to accessing 
it, but would save multiple function calls and branches, so probably not a 
performance issue. I believe there is no need to ever get AXObjects for a 
Document that is not currently held by a Frame that belongs to a Page. 

Of course, refcounting would still be fine in this case, these objects are not 
so common that a refcount field is an extravagant expense. My point is mainly 
this: I believe the key design problem is that the AXObject cache is held by 
Document instead of Page even though our goal is to have one per Page.

I expect we have enough regression tests for accessibility to try this change.

Regards,
Maciej

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to