When executing events other than focus, only take running tree interceptors into account#11653
When executing events other than focus, only take running tree interceptors into account#11653LeonarddeR wants to merge 1 commit into
Conversation
…eptors into account
|
@michaelDCurran I'm aware of the fact that this solution is probably not ideal, though I'm sure we must somehow fix the way tree interceptors are getting in the way here. |
See test results for failed build of commit 7a677ca2cb |
|
event_scrollingStart in the gecko_ia2 virtualBuffer will not be handled anymore, plus event_valueChange in the adobeAcrobat virtualBuffer. |
|
Currently, NVDA is creating a treeInterceptor for the root of the app (The read-only document that contains everything). However, its only child is an application, thus we don't actually ever render anything. |
|
Do all Electron apps have this problem? Or will they get it if an app like Slack or Discord also introduce an application role on their respective body elements, or as in the Slack case already, somewhere further down the tree structure? |
I wonder, why don't we ask the vbuf itself whether an object is part of it? Is that less reliable?
While I think this is a sane workaround for now, I'm afraid that we aren't fixing the actual underlying issue in that case. @MarcoZehe raised a valid point here. Though not all electron apps might have this issue, I'm pretty sure there are more apps using an application role like this. We'd have to add an exception for all of these.
Interesting enough, the performance hit caused when there is a virtual buffer on the application object is much less prevalent.
Also feels a bit like a workaround to me, honestly. |
|
This pr has too much regressions. It will have to be another approach. I think I'll start with reintroducing the appModule as @michaelDCurran suggested. |
|
Filed #11657 |
Link to issue number:
Fixes #11533
Closes #11652
Summary of the issue:
When an event is fired, NVDA tries to fetch the tree interceptor for the object on which the event is fired. This includes a check whether the object belongs to every running tree interceptor. If an object in Chromium belongs to the same window but not to the same tree interceptor as another tree interceptor, this check can take some time, therefore causing major performance degradation. This happens in VS Code where the root node of the Electron application has a tree interceptor but most child nodes are part of an application.nodes are part of
Description of how this pull request fixes the issue:
treeInterceptorHandler.getTreeInterceptorTesting performed:
Tested by several people that performance issues in VS Code are gone, see #11533.
Known issues with pull request:
I think this needs to be tested more broadly. I can think of some possible regressions:
Change log entry: