Reland "[A11yPerformance] Use AXBitset for bool attributes in AXNodeData" This is a reland of commit f697c0257aed084a7a892c37690e5ab85f673b87. The original change caused a 9% regression in blink_perf.accessibility [1]. The use of std::variant and the subsequent conditional checks make up the majority of the regression. Instead of std::variant, this CL introduces an abstract interface, AXBoolStore, and two implementations (AXVectorBoolStore and AXBitsetBoolStore) to resolve the performance issues. The new regression is now 2% (see first Pinpoint job on Patchset 13). The conversion (from map to bitset) during serialization and deserialization still contributes some overhead and will be addressed in a future CL. [1] https://buganizer.corp.google.com/issues/426648855 Original change's description: > Save boolean attributes in AXNodeDate with an AXBitset instead of a > vector. This is more performant and has a smaller footprint. > > For serialization, the bool_attributes getter in StructTraits iterates > through the set attributes. If an attribute is set, it's added to the > std::map that is returned for Mojo serialization. > > For deserialization, the Read method in StructTraits iterates over the > BoolAttribute map, populating entries in the AXBitset in the C++ > AXNodeData object. > > The choice between AXBitset and the existing std::vector implementation > is controlled with the feature flag kAccessibilityUseAXBitset and > std::variant. > > Change-Id: I82774f642c5ceeda82ac0c252842361581336f24 > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6526506 > Reviewed-by: Aaron Leventhal <aleventhal@chromium.org> > Reviewed-by: Kevin Ellis <kevers@chromium.org> > Reviewed-by: Joe Mason <joenotcharles@google.com> > Commit-Queue: Jocelyn Tran <jocelyntran@google.com> > Cr-Commit-Position: refs/heads/main@{#1475843} Bug: 426648855 Change-Id: I4c849e70675ed421127e60cab59d23930082eea6 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6673956 Commit-Queue: Jocelyn Tran <jocelyntran@google.com> Reviewed-by: Kevin Ellis <kevers@chromium.org> Reviewed-by: Chris Harrelson <chrishtr@chromium.org> Reviewed-by: Dominic Farolino <dom@chromium.org> Cr-Commit-Position: refs/heads/main@{#1486668}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure.
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.
If you found a bug, please file it at https://crbug.com/new.