Add accessibility performance regression coverage

- Add inactive and active accessibility benchmarks to protect against startup, notification, and AT-SPI scaling regressions.

  - Extend the AT-SPI benchmark with text, focus, action, value, geometry, hit-testing, and model-update operations. Run both benchmarks in Linux CI and preserve their JSON results as artifacts.

  - Add an explicit null accessibility backend for baseline measurements and optional accessibility disabling.

  - Harden the Windows UIA backend by caching client availability per update, validating root providers, and preventing recursive window procedure forwarding.
This commit is contained in:
Martín Lucas Golini
2026-09-11 14:57:16 -03:00
parent 3751e05df6
commit d6d52032b0
9 changed files with 377 additions and 94 deletions
+18 -1
View File
@@ -22,7 +22,8 @@ jobs:
sudo add-apt-repository -y universe
sudo add-apt-repository -y multiverse
sudo apt update
sudo apt install -y gcc-13 g++-13 wget libsdl2-2.0-0 libsdl2-dev mesa-utils xvfb gdb
sudo apt install -y gcc-13 g++-13 wget libsdl2-2.0-0 libsdl2-dev mesa-utils xvfb gdb \
python3-gi gir1.2-atspi-2.0 at-spi2-core dbus-x11
wget https://cdn.ensoft.dev/eepp-assets/premake-5.0.0-beta6-linux.tar.gz
tar xvzf premake-5.0.0-beta6-linux.tar.gz
- name: Build
@@ -74,6 +75,22 @@ jobs:
run: |
cd projects/scripts
bash ./run_gdb_tests.sh
- name: Inactive Accessibility Benchmark
timeout-minutes: 2
run: |
mkdir -p bin/unit_tests/output
env -u AT_SPI_BUS_ADDRESS dbus-run-session -- projects/scripts/xvfb-run-eepp \
/usr/bin/python3 projects/scripts/benchmark_accessibility_inactive.py --json \
> bin/unit_tests/output/accessibility-inactive-benchmark.json
cat bin/unit_tests/output/accessibility-inactive-benchmark.json
- name: AT-SPI Benchmark
timeout-minutes: 5
run: |
mkdir -p bin/unit_tests/output
env -u AT_SPI_BUS_ADDRESS dbus-run-session -- projects/scripts/xvfb-run-eepp \
/usr/bin/python3 projects/scripts/benchmark_atspi.py --json \
> bin/unit_tests/output/atspi-benchmark.json
cat bin/unit_tests/output/atspi-benchmark.json
- name: Upload artifacts
if: always()
uses: actions/upload-artifact@v4