Skip to content

Query Quick Access UI providers in a single UI-thread pass#4123

Open
vogella wants to merge 1 commit into
eclipse-platform:masterfrom
vogella:lv/quickaccess-single-ui-pass
Open

Query Quick Access UI providers in a single UI-thread pass#4123
vogella wants to merge 1 commit into
eclipse-platform:masterfrom
vogella:lv/quickaccess-single-ui-pass

Conversation

@vogella

@vogella vogella commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Quick Access computes proposals on a background job, but for every provider that requires UI access it scheduled a separate UIJob and blocked the worker on join(0). With around seven UI-access providers (editors, parts, perspectives, commands, actions, preferences, properties) that meant seven serialized worker-to-UI round-trips per keystroke, so the time to fill the table scaled with UI-thread scheduling latency.

This queries all UI-access providers together in one UIJob and looks the results up per provider when assembling the table; non-UI providers still run directly on the worker. Result ordering and behavior are unchanged, only the number of thread hops drops from one-per-provider to one. This should also reduce the intermittent macOS timeout in QuickAccessDialogTest.testCommandEnableContext, where the repeated round-trips occasionally pushed the compute past the test's wait.

@github-actions

github-actions Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Test Results

   855 files  ±0     855 suites  ±0   48m 41s ⏱️ - 2m 44s
 8 075 tests ±0   7 832 ✅ ±0  243 💤 ±0  0 ❌ ±0 
20 127 runs  ±0  19 473 ✅ ±0  654 💤 ±0  0 ❌ ±0 

Results for commit ba04fc6. ± Comparison against base commit 552c9e4.

♻️ This comment has been updated with latest results.

QuickAccessContents computed proposals on a background job but, for every
provider that requires UI access, scheduled a separate UIJob and blocked the
worker on join(0). With roughly seven UI-access providers (editors, parts,
perspectives, commands, actions, preferences, properties) that meant seven
serialized worker-to-UI round-trips per keystroke, so the total time to
populate the table scaled with UI-thread scheduling latency.

Query all UI-access providers together in a single Display.syncExec and look
the results up per provider when assembling the table. Non-UI providers still
run directly on the worker. A per-provider try/catch keeps one failing provider
from aborting the whole pass, matching the previous per-job isolation. Behavior
and result ordering are unchanged; only the number of thread hops drops from
one-per-provider to one.
@vogella vogella force-pushed the lv/quickaccess-single-ui-pass branch from 4244263 to ba04fc6 Compare June 19, 2026 13:00
@vogella vogella marked this pull request as ready for review June 19, 2026 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant