New issue
Advanced search Search tips

Issue 636954 link

Starred by 2 users

Issue metadata

Status: Verified
Owner:
Closed: Oct 2016
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 2
Type: Bug
Team-Accessibility



Sign in to add a comment

Performance: ChromeVox Next lags on large site

Project Member Reported by dtseng@chromium.org, Aug 11 2016

Issue description

blindcooltech.com

result:
navigation is noticeably laggy
 

Comment 1 by dtseng@chromium.org, Aug 11 2016

Specific numbers:
var pre = new Date();
ChromeVoxState.instance.currentRange.move('node', 'forward');
new Date() - pre;

on blindcooltech.com:
300

on google.com
11
Project Member

Comment 2 by bugdroid1@chromium.org, Aug 11 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6247dd22f8cc3628271a6ca5e818042c73772714

commit 6247dd22f8cc3628271a6ca5e818042c73772714
Author: dtseng <dtseng@chromium.org>
Date: Thu Aug 11 20:08:12 2016

Make ChromeVox navigation 100x faster on some sites.

It turns out that there is a very tangible cost to context switching into and out of V8 as was advised by others in the past. Since the major native rewrite of automation into C++, there hasn't been a good illustration of the actual perf implications until now.

The issue.
The current implementation of AutomationNode.children makes several calls to native to fetch child id's. On a large site, where a node has many children, this adds up quickly. Since the actual js objects are created on the initial node data event, it's not js object creation causing any perf issues.

The data
On a site like blindcooltech.com:
there are about 4000 children of the root in the automation tree.

root.children takes around 60 ms.
Next/previous sibling calls to any child of root  takes around 100 ms.

This results in a significant lag when navigating the site and things like incremental search take about a few minutes to find a text match.

Mitigation

Since ChromeVox rarely needs to ask for children, we are fine with using next/previous sibling. The previous impl of sibling traversal relies upon asking for the parent's children. This cl changes it so we directly ask the native bindings for the child id at index.

With this change, next/previous sibling calls take about 0
ms.
BUG= 636954 

Review-Url: https://codereview.chromium.org/2243463002
Cr-Commit-Position: refs/heads/master@{#411412}

[modify] https://crrev.com/6247dd22f8cc3628271a6ca5e818042c73772714/chrome/renderer/resources/extensions/automation/automation_node.js

Components: UI>Accessibility
Labels: -Pri-3 Phase3 Pri-2

Comment 5 by dtseng@chromium.org, Oct 13 2016

Status: Fixed (was: Started)
Status: Verified (was: Fixed)
verified on 56.0.2903.0

Sign in to add a comment