Skip to content

Check EO sources concurrently in the format goal - #6626

Open
Thayorns wants to merge 2 commits into
objectionary:masterfrom
Thayorns:6263
Open

Check EO sources concurrently in the format goal#6626
Thayorns wants to merge 2 commits into
objectionary:masterfrom
Thayorns:6263

Conversation

@Thayorns

Copy link
Copy Markdown
Contributor

eo:format is the single most expensive goal in the whole build. On the last master run it took 51 seconds inside eo-runtime alone — that is a fifth of the 4 minutes the Ubuntu leg spends end to end, and it grows with every .eo file we add. Two things made it that slow.

First, it walked its 170 sources one at a time, in a plain for loop, while every other goal in the plugin already hands its sources to Threaded and uses all the cores the runner has. The mojo is declared threadSafe and nothing in the check is shared state — the only thing the loop accumulated was a list whose size was all report ever looked at, so it collapses into the count Threaded.total() already returns.

Second, canonical parsed the same text twice for every file that was already formatted, which is nearly all of them: once to settle the moniker layout and again to lay the settled structure out with the configured weights. Parsing is by far the costliest step here, so the tree is now carried out of the settling loop instead of being thrown away and rebuilt. That is exactly one parse saved per source, on every source.

The remaining redundancy is across goals rather than inside this one: format parses each source and drops the tree, then compile parses the very same text again a few seconds later. Handing the settled tree over to Parsing would halve that too, and it is left as a puzzle.

Closes #6263

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

🚀 Performance Analysis

All benchmarks are within the acceptable range. No critical degradation detected (threshold is 100%). Please refer to the detailed report for more information.

Click to see the detailed report
Test Base Score PR Score Change % Change Unit Mode
benchmarks.XslBench.manySheetsOnLargeXmir 839.237 836.869 -2.368 -0.28% ms/op Average Time

✅ Performance gain: benchmarks.XslBench.manySheetsOnLargeXmir is faster by 2.368 ms/op (0.28%)

@sonarqubecloud

Copy link
Copy Markdown

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.

Excessive build time for mvn clean install -PskipITs in CI severely impedes quick iteration per PR

1 participant