Skip to content

feat(#1284): benchmark unlint-non-existing-defect with +unlint metas - #1285

Open
VasilevNStas wants to merge 3 commits into
objectionary:masterfrom
VasilevNStas:fix/issue-1284-unlint-benchmark
Open

feat(#1284): benchmark unlint-non-existing-defect with +unlint metas#1285
VasilevNStas wants to merge 3 commits into
objectionary:masterfrom
VasilevNStas:fix/issue-1284-unlint-benchmark

Conversation

@VasilevNStas

Copy link
Copy Markdown
Contributor

fix #1284

What

Adds a JMH benchmark that measures LtUnlintNonExistingDefect on an XMIR that actually contains +unlint metas.

Why

The existing scansXmir benchmark is driven by real-world bytecode-derived XMIR (com.sun.jna.*, org.apache.hadoop...FSNamesystem), none of which contains a single +unlint meta. So it only measures the "no +unlint at all" fast path of LtUnlintNonExistingDefect.

#1233 changed the other path too: when +unlint metas are present, the lint now filters this.lints down to the referenced names before computing existing(). Until now there was no fixture exercising that path, so a regression there would go unnoticed by the benchmark.

How

New benchmark method scansXmirWithUnlints in SourceBench, which parses the existing fixture unlint-ascii-only.eo (it has +unlint ascii-only and a non-ASCII comment that produces a real defect) and runs the full lint set on it.

Measured result (JMH, average time):

SourceBench.scansXmirWithUnlints  N/A  avgt  3  9.097 ± 31.283  ms/op

This gives a timing signal for the +unlint code path, so future changes to LtUnlintNonExistingDefect (faster, same or slower) become visible.

Both mvn test (606 tests) and mvn clean install -Pqulice pass.

@VasilevNStas

Copy link
Copy Markdown
Contributor Author

@volodya-lombrozo plz review this

@volodya-lombrozo volodya-lombrozo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@VasilevNStas Currently we create S ... XXL benchmarks using jeo-maven-plugin which works pretty well, but it generates XMIR that is a bit of artifical. Maybe we can reconsider our strategy to generating these files? Maybe it's better to generate them by parsing real EO programs? At least, we can substitute S, M examples. What do u think?

@VasilevNStas VasilevNStas left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@volodya-lombrozo

Good suggestion about using real EO programs instead of bytecode-derived XMIR for the S/M benchmarks. That would make the benchmark data closer to what the lints actually process in production. I see two ways to do it and would like your call on the scope:

  1. A focused follow-up that only adds this scansXmirWithUnlints benchmark for the +unlint path (what this PR does), and
  2. A bigger refactor that replaces jeo-maven-plugin fixtures for S/M (or all sizes) with parsed EO programs.

I kept this PR to option 1 because switching the existing S..XXL fixtures touches SourceSize, BenchmarkState and the README table, and it is a separate concern from #1284 (which is specifically about the +unlint path having no coverage at all).

If you prefer, I can prepare option 2 as another PR after this one lands. Meanwhile, note this PR also surfaced a pre-existing infra issue: the proguard profile (active on JDK < 22) fails on the rultor merge (JDK 21) and locally on JDK 21 with Obfuscation failed, unrelated to the diff — I described it in #1238 with the MAVEN_OPTS/-P!proguard suggestion.

Happy to proceed either way.

@VasilevNStas

Copy link
Copy Markdown
Contributor Author

@volodya-lombrozo
plz re-review

@volodya-lombrozo

Copy link
Copy Markdown
Member

/benchmark

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark comparison for #1285

Comparing this branch against the master baseline in benchmark/lint-timings.csv. Positive deltas are slower, negative are faster.

Biggest changes

lint (size) before after delta
unlint-non-existing-defect (XXL) 14513 ms 0 ms -14513 ms
unlint-non-existing-defect (XL) 2790 ms 1 ms -2789 ms
unlint-non-existing-defect (L) 1559 ms 0 ms -1559 ms
unlint-non-existing-defect (M) 1256 ms 1 ms -1255 ms
duplicate-as-attribute (XXL) 797 ms 1344 ms +547 ms
bytes-without-data (S) 50 ms 316 ms +266 ms
application-without-as-attributes (XXL) 3157 ms 2906 ms -251 ms
duplicate-as-attribute (S) 282 ms 51 ms -231 ms
unlint-non-existing-defect (S) 226 ms 2 ms -224 ms
duplicate-as-attribute (XL) 169 ms 382 ms +213 ms
Full results (430 entries)
lint (size) before after delta
alias-too-long (L) 1 ms 1 ms +0 ms
alias-too-long (M) 1 ms 1 ms +0 ms
alias-too-long (S) 39 ms 38 ms -1 ms
alias-too-long (XL) 1 ms 1 ms +0 ms
alias-too-long (XXL) 1 ms 1 ms +0 ms
anemic-getter (L) 13 ms 12 ms -1 ms
anemic-getter (M) 6 ms 9 ms +3 ms
anemic-getter (S) 41 ms 33 ms -8 ms
anemic-getter (XL) 21 ms 23 ms +2 ms
anemic-getter (XXL) 120 ms 90 ms -30 ms
anonymous-formation (L) 25 ms 33 ms +8 ms
anonymous-formation (M) 15 ms 23 ms +8 ms
anonymous-formation (S) 78 ms 66 ms -12 ms
anonymous-formation (XL) 42 ms 65 ms +23 ms
anonymous-formation (XXL) 221 ms 235 ms +14 ms
anonymous-objects-inside-formation (L) 15 ms 20 ms +5 ms
anonymous-objects-inside-formation (M) 12 ms 12 ms +0 ms
anonymous-objects-inside-formation (S) 49 ms 44 ms -5 ms
anonymous-objects-inside-formation (XL) 26 ms 26 ms +0 ms
anonymous-objects-inside-formation (XXL) 118 ms 110 ms -8 ms
application-without-as-attributes (L) 346 ms 340 ms -6 ms
application-without-as-attributes (M) 507 ms 327 ms -180 ms
application-without-as-attributes (S) 117 ms 108 ms -9 ms
application-without-as-attributes (XL) 597 ms 567 ms -30 ms
application-without-as-attributes (XXL) 3157 ms 2906 ms -251 ms
ascii-only (L) 1 ms 1 ms +0 ms
ascii-only (M) 0 ms 1 ms +1 ms
ascii-only (S) 2 ms 1 ms -1 ms
ascii-only (XL) 1 ms 0 ms -1 ms
ascii-only (XXL) 2 ms 1 ms -1 ms
atom-and-base (L) 25 ms 39 ms +14 ms
atom-and-base (M) 11 ms 16 ms +5 ms
atom-and-base (S) 67 ms 63 ms -4 ms
atom-and-base (XL) 56 ms 39 ms -17 ms
atom-and-base (XXL) 202 ms 190 ms -12 ms
atom-in-atom (L) 24 ms 24 ms +0 ms
atom-in-atom (M) 20 ms 17 ms -3 ms
atom-in-atom (S) 44 ms 73 ms +29 ms
atom-in-atom (XL) 42 ms 40 ms -2 ms
atom-in-atom (XXL) 246 ms 192 ms -54 ms
atom-with-data (L) 38 ms 24 ms -14 ms
atom-with-data (M) 18 ms 20 ms +2 ms
atom-with-data (S) 55 ms 42 ms -13 ms
atom-with-data (XL) 42 ms 41 ms -1 ms
atom-with-data (XXL) 201 ms 189 ms -12 ms
atom-without-rt (L) 25 ms 24 ms -1 ms
atom-without-rt (M) 11 ms 16 ms +5 ms
atom-without-rt (S) 47 ms 56 ms +9 ms
atom-without-rt (XL) 42 ms 39 ms -3 ms
atom-without-rt (XXL) 270 ms 189 ms -81 ms
bad-test-name (L) 16 ms 18 ms +2 ms
bad-test-name (M) 12 ms 12 ms +0 ms
bad-test-name (S) 39 ms 47 ms +8 ms
bad-test-name (XL) 26 ms 31 ms +5 ms
bad-test-name (XXL) 124 ms 132 ms +8 ms
broken-alias-first (L) 1 ms 1 ms +0 ms
broken-alias-first (M) 2 ms 1 ms -1 ms
broken-alias-first (S) 44 ms 35 ms -9 ms
broken-alias-first (XL) 1 ms 1 ms +0 ms
broken-alias-first (XXL) 1 ms 1 ms +0 ms
broken-alias-second (L) 2 ms 1 ms -1 ms
broken-alias-second (M) 1 ms 1 ms +0 ms
broken-alias-second (S) 33 ms 39 ms +6 ms
broken-alias-second (XL) 1 ms 1 ms +0 ms
broken-alias-second (XXL) 1 ms 1 ms +0 ms
bytes-without-data (L) 52 ms 24 ms -28 ms
bytes-without-data (M) 27 ms 27 ms +0 ms
bytes-without-data (S) 50 ms 316 ms +266 ms
bytes-without-data (XL) 79 ms 48 ms -31 ms
bytes-without-data (XXL) 376 ms 181 ms -195 ms
comment-is-too-wide (L) 0 ms 1 ms +1 ms
comment-is-too-wide (M) 2 ms 2 ms +0 ms
comment-is-too-wide (S) 51 ms 50 ms -1 ms
comment-is-too-wide (XL) 1 ms 1 ms +0 ms
comment-is-too-wide (XXL) 2 ms 2 ms +0 ms
comment-not-capitalized (L) 1 ms 0 ms -1 ms
comment-not-capitalized (M) 1 ms 2 ms +1 ms
comment-not-capitalized (S) 53 ms 29 ms -24 ms
comment-not-capitalized (XL) 1 ms 0 ms -1 ms
comment-not-capitalized (XXL) 1 ms 0 ms -1 ms
comment-starts-with-article (L) 1 ms 1 ms +0 ms
comment-starts-with-article (M) 1 ms 1 ms +0 ms
comment-starts-with-article (S) 27 ms 43 ms +16 ms
comment-starts-with-article (XL) 1 ms 1 ms +0 ms
comment-starts-with-article (XXL) 1 ms 1 ms +0 ms
comment-too-short (L) 1 ms 1 ms +0 ms
comment-too-short (M) 1 ms 2 ms +1 ms
comment-too-short (S) 31 ms 41 ms +10 ms
comment-too-short (XL) 1 ms 1 ms +0 ms
comment-too-short (XXL) 1 ms 1 ms +0 ms
comment-without-dot (L) 1 ms 1 ms +0 ms
comment-without-dot (M) 1 ms 1 ms +0 ms
comment-without-dot (S) 40 ms 49 ms +9 ms
comment-without-dot (XL) 1 ms 1 ms +0 ms
comment-without-dot (XXL) 1 ms 1 ms +0 ms
compound-name (L) 78 ms 70 ms -8 ms
compound-name (M) 25 ms 42 ms +17 ms
compound-name (S) 133 ms 62 ms -71 ms
compound-name (XL) 96 ms 89 ms -7 ms
compound-name (XXL) 469 ms 455 ms -14 ms
decorated-formation (L) 14 ms 15 ms +1 ms
decorated-formation (M) 9 ms 12 ms +3 ms
decorated-formation (S) 50 ms 43 ms -7 ms
decorated-formation (XL) 25 ms 23 ms -2 ms
decorated-formation (XXL) 113 ms 106 ms -7 ms
direct-phi (L) 27 ms 28 ms +1 ms
direct-phi (M) 16 ms 22 ms +6 ms
direct-phi (S) 66 ms 59 ms -7 ms
direct-phi (XL) 33 ms 30 ms -3 ms
direct-phi (XXL) 161 ms 170 ms +9 ms
duplicate-aliases (L) 1 ms 1 ms +0 ms
duplicate-aliases (M) 1 ms 1 ms +0 ms
duplicate-aliases (S) 38 ms 51 ms +13 ms
duplicate-aliases (XL) 1 ms 1 ms +0 ms
duplicate-aliases (XXL) 1 ms 1 ms +0 ms
duplicate-as-attribute (L) 67 ms 27 ms -40 ms
duplicate-as-attribute (M) 75 ms 57 ms -18 ms
duplicate-as-attribute (S) 282 ms 51 ms -231 ms
duplicate-as-attribute (XL) 169 ms 382 ms +213 ms
duplicate-as-attribute (XXL) 797 ms 1344 ms +547 ms
duplicate-metas (L) 1 ms 1 ms +0 ms
duplicate-metas (M) 1 ms 2 ms +1 ms
duplicate-metas (S) 29 ms 48 ms +19 ms
duplicate-metas (XL) 1 ms 1 ms +0 ms
duplicate-metas (XXL) 1 ms 1 ms +0 ms
duplicate-names (L) 55 ms 43 ms -12 ms
duplicate-names (M) 28 ms 47 ms +19 ms
duplicate-names (S) 57 ms 44 ms -13 ms
duplicate-names (XL) 51 ms 49 ms -2 ms
duplicate-names (XXL) 281 ms 241 ms -40 ms
empty-alias (L) 1 ms 1 ms +0 ms
empty-alias (M) 1 ms 1 ms +0 ms
empty-alias (S) 29 ms 48 ms +19 ms
empty-alias (XL) 1 ms 0 ms -1 ms
empty-alias (XXL) 1 ms 1 ms +0 ms
empty-object (L) 119 ms 128 ms +9 ms
empty-object (M) 166 ms 189 ms +23 ms
empty-object (S) 165 ms 86 ms -79 ms
empty-object (XL) 185 ms 186 ms +1 ms
empty-object (XXL) 1065 ms 1037 ms -28 ms
empty-spdx-tail (L) 1 ms 0 ms -1 ms
empty-spdx-tail (M) 2 ms 2 ms +0 ms
empty-spdx-tail (S) 46 ms 42 ms -4 ms
empty-spdx-tail (XL) 1 ms 1 ms +0 ms
empty-spdx-tail (XXL) 1 ms 1 ms +0 ms
error-line-out-of-listing (L) 0 ms 1 ms +1 ms
error-line-out-of-listing (M) 3 ms 1 ms -2 ms
error-line-out-of-listing (S) 34 ms 39 ms +5 ms
error-line-out-of-listing (XL) 1 ms 1 ms +0 ms
error-line-out-of-listing (XXL) 1 ms 1 ms +0 ms
formation-with-as-attributes (L) 30 ms 21 ms -9 ms
formation-with-as-attributes (M) 8 ms 11 ms +3 ms
formation-with-as-attributes (S) 30 ms 37 ms +7 ms
formation-with-as-attributes (XL) 21 ms 20 ms -1 ms
formation-with-as-attributes (XXL) 91 ms 117 ms +26 ms
incorrect-architect (L) 1 ms 1 ms +0 ms
incorrect-architect (M) 1 ms 2 ms +1 ms
incorrect-architect (S) 30 ms 33 ms +3 ms
incorrect-architect (XL) 0 ms 1 ms +1 ms
incorrect-architect (XXL) 1 ms 1 ms +0 ms
incorrect-bytes-format (L) 66 ms 56 ms -10 ms
incorrect-bytes-format (M) 66 ms 65 ms -1 ms
incorrect-bytes-format (S) 81 ms 79 ms -2 ms
incorrect-bytes-format (XL) 87 ms 100 ms +13 ms
incorrect-bytes-format (XXL) 548 ms 531 ms -17 ms
incorrect-home (L) 1 ms 1 ms +0 ms
incorrect-home (M) 2 ms 2 ms +0 ms
incorrect-home (S) 36 ms 31 ms -5 ms
incorrect-home (XL) 1 ms 1 ms +0 ms
incorrect-home (XXL) 1 ms 2 ms +1 ms
incorrect-jvm-rt-location (L) 2 ms 0 ms -2 ms
incorrect-jvm-rt-location (M) 1 ms 1 ms +0 ms
incorrect-jvm-rt-location (S) 32 ms 75 ms +43 ms
incorrect-jvm-rt-location (XL) 1 ms 1 ms +0 ms
incorrect-jvm-rt-location (XXL) 0 ms 1 ms +1 ms
incorrect-node-rt-location (L) 1 ms 1 ms +0 ms
incorrect-node-rt-location (M) 1 ms 1 ms +0 ms
incorrect-node-rt-location (S) 28 ms 32 ms +4 ms
incorrect-node-rt-location (XL) 1 ms 1 ms +0 ms
incorrect-node-rt-location (XXL) 1 ms 2 ms +1 ms
incorrect-package (L) 1 ms 1 ms +0 ms
incorrect-package (M) 2 ms 3 ms +1 ms
incorrect-package (S) 31 ms 31 ms +0 ms
incorrect-package (XL) 1 ms 2 ms +1 ms
incorrect-package (XXL) 2 ms 1 ms -1 ms
incorrect-rt-parts (L) 2 ms 1 ms -1 ms
incorrect-rt-parts (M) 1 ms 1 ms +0 ms
incorrect-rt-parts (S) 39 ms 46 ms +7 ms
incorrect-rt-parts (XL) 1 ms 2 ms +1 ms
incorrect-rt-parts (XXL) 1 ms 1 ms +0 ms
incorrect-spdx (L) 1 ms 1 ms +0 ms
incorrect-spdx (M) 2 ms 2 ms +0 ms
incorrect-spdx (S) 68 ms 31 ms -37 ms
incorrect-spdx (XL) 1 ms 1 ms +0 ms
incorrect-spdx (XXL) 1 ms 2 ms +1 ms
incorrect-test-object-name (L) 57 ms 28 ms -29 ms
incorrect-test-object-name (M) 14 ms 11 ms -3 ms
incorrect-test-object-name (S) 29 ms 44 ms +15 ms
incorrect-test-object-name (XL) 33 ms 29 ms -4 ms
incorrect-test-object-name (XXL) 146 ms 157 ms +11 ms
incorrect-unlint (L) 0 ms 1 ms +1 ms
incorrect-unlint (M) 1 ms 1 ms +0 ms
incorrect-unlint (S) 2 ms 2 ms +0 ms
incorrect-unlint (XL) 1 ms 1 ms +0 ms
incorrect-unlint (XXL) 1 ms 1 ms +0 ms
incorrect-version (L) 1 ms 1 ms +0 ms
incorrect-version (M) 1 ms 1 ms +0 ms
incorrect-version (S) 39 ms 48 ms +9 ms
incorrect-version (XL) 1 ms 1 ms +0 ms
incorrect-version (XXL) 2 ms 1 ms -1 ms
lambda-with-inners (L) 24 ms 25 ms +1 ms
lambda-with-inners (M) 22 ms 17 ms -5 ms
lambda-with-inners (S) 44 ms 43 ms -1 ms
lambda-with-inners (XL) 42 ms 41 ms -1 ms
lambda-with-inners (XXL) 201 ms 191 ms -10 ms
line-is-absent (L) 76 ms 85 ms +9 ms
line-is-absent (M) 74 ms 135 ms +61 ms
line-is-absent (S) 66 ms 86 ms +20 ms
line-is-absent (XL) 106 ms 124 ms +18 ms
line-is-absent (XXL) 569 ms 585 ms +16 ms
mandatory-architect (L) - 2 ms new
mandatory-architect (M) - 1 ms new
mandatory-architect (S) - 48 ms new
mandatory-architect (XL) - 1 ms new
mandatory-architect (XXL) - 1 ms new
mandatory-home (L) 1 ms 1 ms +0 ms
mandatory-home (M) 1 ms 2 ms +1 ms
mandatory-home (S) 27 ms 28 ms +1 ms
mandatory-home (XL) 1 ms 1 ms +0 ms
mandatory-home (XXL) 0 ms 1 ms +1 ms
mandatory-package (L) 0 ms 1 ms +1 ms
mandatory-package (M) 1 ms 2 ms +1 ms
mandatory-package (S) 33 ms 38 ms +5 ms
mandatory-package (XL) 1 ms 1 ms +0 ms
mandatory-package (XXL) 1 ms 1 ms +0 ms
mandatory-spdx (L) 1 ms 1 ms +0 ms
mandatory-spdx (M) 2 ms 1 ms -1 ms
mandatory-spdx (S) 49 ms 37 ms -12 ms
mandatory-spdx (XL) 1 ms 1 ms +0 ms
mandatory-spdx (XXL) 1 ms 1 ms +0 ms
mandatory-version (L) 0 ms 1 ms +1 ms
mandatory-version (M) 2 ms 1 ms -1 ms
mandatory-version (S) 42 ms 29 ms -13 ms
mandatory-version (XL) 1 ms 0 ms -1 ms
mandatory-version (XXL) 1 ms 1 ms +0 ms
many-void-attributes (L) 29 ms 13 ms -16 ms
many-void-attributes (M) 10 ms 9 ms -1 ms
many-void-attributes (S) 48 ms 44 ms -4 ms
many-void-attributes (XL) 21 ms 25 ms +4 ms
many-void-attributes (XXL) 90 ms 89 ms -1 ms
meta-line-out-of-listing (L) 1 ms 2 ms +1 ms
meta-line-out-of-listing (M) 1 ms 1 ms +0 ms
meta-line-out-of-listing (S) 46 ms 153 ms +107 ms
meta-line-out-of-listing (XL) 1 ms 1 ms +0 ms
meta-line-out-of-listing (XXL) 1 ms 1 ms +0 ms
missed-obfuscation (L) 14 ms 15 ms +1 ms
missed-obfuscation (M) 11 ms 10 ms -1 ms
missed-obfuscation (S) 40 ms 49 ms +9 ms
missed-obfuscation (XL) 28 ms 24 ms -4 ms
missed-obfuscation (XXL) 114 ms 111 ms -3 ms
name-outside-of-abstract-object (L) 18 ms 19 ms +1 ms
name-outside-of-abstract-object (M) 10 ms 9 ms -1 ms
name-outside-of-abstract-object (S) 33 ms 41 ms +8 ms
name-outside-of-abstract-object (XL) 23 ms 20 ms -3 ms
name-outside-of-abstract-object (XXL) 90 ms 128 ms +38 ms
named-object-abstract-nested (L) 18 ms 13 ms -5 ms
named-object-abstract-nested (M) 10 ms 21 ms +11 ms
named-object-abstract-nested (S) 40 ms 77 ms +37 ms
named-object-abstract-nested (XL) 20 ms 20 ms +0 ms
named-object-abstract-nested (XXL) 91 ms 88 ms -3 ms
no-attribute-formation (L) 15 ms 16 ms +1 ms
no-attribute-formation (M) 9 ms 11 ms +2 ms
no-attribute-formation (S) 74 ms 65 ms -9 ms
no-attribute-formation (XL) 25 ms 24 ms -1 ms
no-attribute-formation (XXL) 115 ms 108 ms -7 ms
non-kebab-name (L) 13 ms 12 ms -1 ms
non-kebab-name (M) 6 ms 9 ms +3 ms
non-kebab-name (S) 50 ms 52 ms +2 ms
non-kebab-name (XL) 28 ms 20 ms -8 ms
non-kebab-name (XXL) 95 ms 90 ms -5 ms
not-empty-atom (L) 25 ms 24 ms -1 ms
not-empty-atom (M) 11 ms 18 ms +7 ms
not-empty-atom (S) 41 ms 44 ms +3 ms
not-empty-atom (XL) 41 ms 40 ms -1 ms
not-empty-atom (XXL) 203 ms 190 ms -13 ms
object-has-data (L) 172 ms 198 ms +26 ms
object-has-data (M) 189 ms 198 ms +9 ms
object-has-data (S) 133 ms 91 ms -42 ms
object-has-data (XL) 278 ms 234 ms -44 ms
object-has-data (XXL) 1413 ms 1225 ms -188 ms
object-line-out-of-listing (L) 13 ms 21 ms +8 ms
object-line-out-of-listing (M) 9 ms 10 ms +1 ms
object-line-out-of-listing (S) 32 ms 41 ms +9 ms
object-line-out-of-listing (XL) 23 ms 21 ms -2 ms
object-line-out-of-listing (XXL) 106 ms 93 ms -13 ms
package-contains-multiple-parts (L) 1 ms 1 ms +0 ms
package-contains-multiple-parts (M) 2 ms 2 ms +0 ms
package-contains-multiple-parts (S) 39 ms 44 ms +5 ms
package-contains-multiple-parts (XL) 1 ms 1 ms +0 ms
package-contains-multiple-parts (XXL) 2 ms 1 ms -1 ms
package-without-tail (L) 0 ms 2 ms +2 ms
package-without-tail (M) 1 ms 1 ms +0 ms
package-without-tail (S) 41 ms 30 ms -11 ms
package-without-tail (XL) 1 ms 1 ms +0 ms
package-without-tail (XXL) 1 ms 1 ms +0 ms
phi-is-not-first (L) 14 ms 13 ms -1 ms
phi-is-not-first (M) 6 ms 9 ms +3 ms
phi-is-not-first (S) 55 ms 56 ms +1 ms
phi-is-not-first (XL) 23 ms 20 ms -3 ms
phi-is-not-first (XXL) 102 ms 92 ms -10 ms
pos-without-line (L) 12 ms 12 ms +0 ms
pos-without-line (M) 5 ms 9 ms +4 ms
pos-without-line (S) 30 ms 30 ms +0 ms
pos-without-line (XL) 20 ms 37 ms +17 ms
pos-without-line (XXL) 90 ms 88 ms -2 ms
prohibited-package (L) 1 ms 1 ms +0 ms
prohibited-package (M) 1 ms 1 ms +0 ms
prohibited-package (S) 40 ms 46 ms +6 ms
prohibited-package (XL) 1 ms 1 ms +0 ms
prohibited-package (XXL) 1 ms 1 ms +0 ms
redundant-attachment (L) - 13 ms new
redundant-attachment (M) - 9 ms new
redundant-attachment (S) - 53 ms new
redundant-attachment (XL) - 20 ms new
redundant-attachment (XXL) - 89 ms new
redundant-object (L) 57 ms 58 ms +1 ms
redundant-object (M) 38 ms 39 ms +1 ms
redundant-object (S) 55 ms 67 ms +12 ms
redundant-object (XL) 111 ms 87 ms -24 ms
redundant-object (XXL) 686 ms 765 ms +79 ms
reserved-name (L) 82 ms 91 ms +9 ms
reserved-name (M) 89 ms 83 ms -6 ms
reserved-name (S) 30 ms 21 ms -9 ms
reserved-name (XL) 118 ms 153 ms +35 ms
reserved-name (XXL) 611 ms 701 ms +90 ms
rt-without-atoms (L) 27 ms 25 ms -2 ms
rt-without-atoms (M) 16 ms 16 ms +0 ms
rt-without-atoms (S) 41 ms 39 ms -2 ms
rt-without-atoms (XL) 41 ms 41 ms +0 ms
rt-without-atoms (XXL) 234 ms 245 ms +11 ms
schema-is-absent (L) 1 ms 0 ms -1 ms
schema-is-absent (M) 1 ms 2 ms +1 ms
schema-is-absent (S) 45 ms 39 ms -6 ms
schema-is-absent (XL) 1 ms 1 ms +0 ms
schema-is-absent (XXL) 1 ms 2 ms +1 ms
self-referencing (L) 13 ms 12 ms -1 ms
self-referencing (M) 5 ms 9 ms +4 ms
self-referencing (S) 30 ms 32 ms +2 ms
self-referencing (XL) 20 ms 19 ms -1 ms
self-referencing (XXL) 90 ms 88 ms -2 ms
sparse-decoration (L) 17 ms 26 ms +9 ms
sparse-decoration (M) 14 ms 13 ms -1 ms
sparse-decoration (S) 88 ms 45 ms -43 ms
sparse-decoration (XL) 38 ms 31 ms -7 ms
sparse-decoration (XXL) 140 ms 134 ms -6 ms
sparse-seq (L) 16 ms 15 ms -1 ms
sparse-seq (M) 7 ms 11 ms +4 ms
sparse-seq (S) 42 ms 63 ms +21 ms
sparse-seq (XL) 28 ms 24 ms -4 ms
sparse-seq (XXL) 136 ms 130 ms -6 ms
sprintf-without-formatters (L) 18 ms 15 ms -3 ms
sprintf-without-formatters (M) 8 ms 11 ms +3 ms
sprintf-without-formatters (S) 32 ms 57 ms +25 ms
sprintf-without-formatters (XL) 26 ms 44 ms +18 ms
sprintf-without-formatters (XXL) 150 ms 126 ms -24 ms
syntax-version (L) - 1 ms new
syntax-version (M) - 1 ms new
syntax-version (S) - 2 ms new
syntax-version (XL) - 1 ms new
syntax-version (XXL) - 1 ms new
unique-metas (L) 1 ms 1 ms +0 ms
unique-metas (M) 3 ms 1 ms -2 ms
unique-metas (S) 29 ms 31 ms +2 ms
unique-metas (XL) 1 ms 1 ms +0 ms
unique-metas (XXL) 1 ms 1 ms +0 ms
unit-test-missing (L) 40 ms 32 ms -8 ms
unit-test-missing (M) 8 ms 12 ms +4 ms
unit-test-missing (S) 59 ms 56 ms -3 ms
unit-test-missing (XL) 31 ms 29 ms -2 ms
unit-test-missing (XXL) 145 ms 135 ms -10 ms
unit-test-without-phi (L) 20 ms 17 ms -3 ms
unit-test-without-phi (M) 11 ms 11 ms +0 ms
unit-test-without-phi (S) 69 ms 54 ms -15 ms
unit-test-without-phi (XL) 32 ms 27 ms -5 ms
unit-test-without-phi (XXL) 149 ms 208 ms +59 ms
unknown-metas (L) 2 ms 0 ms -2 ms
unknown-metas (M) 1 ms 1 ms +0 ms
unknown-metas (S) 32 ms 44 ms +12 ms
unknown-metas (XL) 1 ms 1 ms +0 ms
unknown-metas (XXL) 1 ms 1 ms +0 ms
unknown-rt (L) 1 ms 1 ms +0 ms
unknown-rt (M) 2 ms 1 ms -1 ms
unknown-rt (S) 32 ms 52 ms +20 ms
unknown-rt (XL) 1 ms 1 ms +0 ms
unknown-rt (XXL) 1 ms 2 ms +1 ms
unlint-non-existing-defect (L) 1559 ms 0 ms -1559 ms
unlint-non-existing-defect (M) 1256 ms 1 ms -1255 ms
unlint-non-existing-defect (S) 226 ms 2 ms -224 ms
unlint-non-existing-defect (XL) 2790 ms 1 ms -2789 ms
unlint-non-existing-defect (XXL) 14513 ms 0 ms -14513 ms
unsorted-metas (L) 1 ms 1 ms +0 ms
unsorted-metas (M) 1 ms 2 ms +1 ms
unsorted-metas (S) 41 ms 33 ms -8 ms
unsorted-metas (XL) 1 ms 1 ms +0 ms
unsorted-metas (XXL) 1 ms 1 ms +0 ms
unsorted-named-attributes (L) 28 ms 34 ms +6 ms
unsorted-named-attributes (M) 21 ms 25 ms +4 ms
unsorted-named-attributes (S) 80 ms 44 ms -36 ms
unsorted-named-attributes (XL) 34 ms 32 ms -2 ms
unsorted-named-attributes (XXL) 177 ms 153 ms -24 ms
unused-alias (L) 1 ms 1 ms +0 ms
unused-alias (M) 2 ms 1 ms -1 ms
unused-alias (S) 32 ms 41 ms +9 ms
unused-alias (XL) 1 ms 2 ms +1 ms
unused-alias (XXL) 1 ms 1 ms +0 ms
void-attributes-not-higher-than-other (L) 17 ms 15 ms -2 ms
void-attributes-not-higher-than-other (M) 9 ms 10 ms +1 ms
void-attributes-not-higher-than-other (S) 38 ms 31 ms -7 ms
void-attributes-not-higher-than-other (XL) 28 ms 25 ms -3 ms
void-attributes-not-higher-than-other (XXL) 137 ms 127 ms -10 ms
wrong-sprintf-arguments (L) 16 ms 16 ms +0 ms
wrong-sprintf-arguments (M) 9 ms 11 ms +2 ms
wrong-sprintf-arguments (S) 41 ms 57 ms +16 ms
wrong-sprintf-arguments (XL) 38 ms 24 ms -14 ms
wrong-sprintf-arguments (XXL) 138 ms 126 ms -12 ms
wrong-test-order (L) 19 ms 26 ms +7 ms
wrong-test-order (M) 15 ms 11 ms -4 ms
wrong-test-order (S) 32 ms 52 ms +20 ms
wrong-test-order (XL) 31 ms 29 ms -2 ms
wrong-test-order (XXL) 145 ms 161 ms +16 ms

@volodya-lombrozo volodya-lombrozo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@VasilevNStas I don't have the new benchmark results in the list above. That said, I should.

@VasilevNStas
VasilevNStas force-pushed the fix/issue-1284-unlint-benchmark branch from de21d00 to 2459187 Compare August 30, 2026 19:44
@github-actions github-actions Bot added the core Changes are made to core parts of the code base label Aug 30, 2026
@VasilevNStas

Copy link
Copy Markdown
Contributor Author

@volodya-lombrozo
plz re-re-review

@VasilevNStas

Copy link
Copy Markdown
Contributor Author

@volodya-lombrozo Good point — the new +unlint results are now part of the standard benchmark, so they show up both in the /benchmark comparison list and in the README table.

What changed on the branch:

  1. SourceTest.benchmarkResults() now also lints the +unlint fixture unlint-ascii-only.eo as a benchmark source, marked UNLINT. It produces 8 defects (including the unlint-non-existing-defect one), and TimedLint writes the per-lint rows into lint-timings.csv (e.g. unlint-non-existing-defect (UNLINT), 8 ms). So a re-run of /benchmark will list them, and future changes to the +unlint path in LtUnlintNonExistingDefect become visible.
  2. The README benchmark section now includes the new source (Input: org/eolang/lints/unlint-ascii-only.eo (UNLINT source), Lint time: 296 ms) and the refreshed top-16. It will be regenerated by the GHA benchmark job after merge anyway.
  3. The JMH scansXmirWithUnlints method stays as the controlled measurement of the whole scan.

Verified locally: mvn clean install -Pqulice (1016 rules) and mvn clean test (628 tests) pass.

@VasilevNStas
VasilevNStas force-pushed the fix/issue-1284-unlint-benchmark branch from 2459187 to ad56c14 Compare September 5, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core Changes are made to core parts of the code base

Projects

None yet

Development

Successfully merging this pull request may close these issues.

unlint-non-existing-defect benchmark lacks coverage for documents with +unlint metas, potentially missing regressions

2 participants