nvda
83773504 - Gecko VBufBackend: greatly speed up subtree re-renders when part of a document has changed (#8678)

Commit
7 years ago
Gecko VBufBackend: greatly speed up subtree re-renders when part of a document has changed (#8678) * VirtualBuffers: try re-using existing subtrees in renders. * MSHTML vbufBackend: don't do partial re-renders as strange things happen when moving nodes with javascript. * VBufStorage and VBufBackend: remove unneeded code changes and clarify comments. * VBufStorage: allow nodes to control when they can be reused in a re-render with requiresUparentUpdate and allowReuseInAncestorUpdate properties. * VBufStorage and backends: If a part of a table needs re-rendering, make sure to rerender any part of the table after that. E.g. If a row is added, then all rows after that also need to be re-rendered. * VBufStorage and backends: ensure that a node and its descendants are all re-rendered if a node has been given alternative text because the node had no useful descendants (E.g. an empty link). * VBufStorage and backends: remove some log calls, beeps, and also switch gecko_ia2 virtualBuffer from AccessibleObjectFromEvent to accChild for getNVDAObjectFromIdentifier. * Gecko virtualBuffer: ensure that getNVDAObjectFromIdentifier still works with Google Chrome. * VBufStorage and backends: Ensure that reuse is denied when previous siblings have changed, only if a node's denyReuseIfPreviousSiblingsChanged property is actually set (woops). Also, remove ensureDescendantsRequireParentUpdate method and replace it with a alwaysRerenderDescendants property instead. * Mozilla NVDAObject's setFocus method: ensure this blocks until a focus event is received by NVDA. * Address review comments: * Add suggested comments. * Gecko vbufBackend: move the setting of rerender control properties for parts of tables down to where the rest of the table code is, which means that the resetting of some of them on tabel cells is no longer necessary. The code remains at same scope, and the function never returned or recursed between where the code was to where it is now, so this is safe. * Gecko vbufBackend: it is no longer necesary to update table counts if a cell is rerendered. If the cell was being rerendered because it was specifically invalidated, then the row/column counts would not have changed, and if the cell was re-rendered due to an ancestor row / row group being invalidated, then the table node would have been rerendered anyway due to requiresParentUpdate being true on the row or row group. However, we still need the tableID from the table to set as an attribute on table cell nodes. Therefore, rename and rewrite updateTableCounts to getTableIDFromCell. * VBufBackend_t::update: remove the inUpdate check. This issue never actually seems to occur, and no code changes in this pr make it any more likely than it used to be. * Mozilla NVDAObject's _getPhysicalFocus method: handle case where accParent is None. Probably happens when an IAccessible is removed from the tree after we have fetched it... Happens quite a bit on facebook.com/ * Fix comments. * Update what's new
Parents
Loading