Skip to content

feat: benchmark F9/F10 document structure and code lens refresh push (issue #256)#261

Merged
clrudolphi merged 1 commit into
masterfrom
feature/256-benchmark-coverage
Jul 21, 2026
Merged

feat: benchmark F9/F10 document structure and code lens refresh push (issue #256)#261
clrudolphi merged 1 commit into
masterfrom
feature/256-benchmark-coverage

Conversation

@clrudolphi

@clrudolphi clrudolphi commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Closes #256

Summary

Reviewed the two benchmark suites against the LSP feature inventory (#256) and found three gaps:

  • Document Outline (F9) and Folding Range (F10) fire on every keystroke burst but had no isolated P95 measurement in the interactive run suite — only touched incidentally under the session suite's contention, with no dedicated warm-up/measured window. Adds DocumentSymbolAsync/FoldingRangeAsync scenarios using the harness's existing RequestDocumentSymbolAsync/RequestFoldingRangeAsync.
  • workspace/codeLens/refresh had no batch coverage, unlike its two structural siblings (semanticTokens/refresh, inlayHint/refresh), which were both already benchmarked — an inconsistency rather than a deliberate omission. Unlike those two it isn't triggered by a plain .feature edit (BindingRegistryChangedHandler only requests it after an incremental Roslyn patch), so CodeLensRefreshAsync reuses RoslynReDiscoveryAsync's synthetic .cs binding edit and waits for the refresh push instead.

The issue's own example (Inlay Hints) turned out not to be a gap — already benchmarked both interactively and as a refresh scenario, so it isn't touched here.

Test plan

  • dotnet build Reqnroll.IdeSupport.slnx — clean
  • Ran the benchmark binary directly (dotnet Reqnroll.IdeSupport.LSP.Server.Benchmarks.dll run --warmup 1 --iterations 3 --files 3) — all three new rows report real numbers: textDocument/documentSymbol, textDocument/foldingRange, workspace/codeLens/refresh

🤖 Generated with Claude Code

Issue #256: reviewed the two benchmark suites against the LSP feature
inventory and found three gaps.

- Document Outline (F9) and Folding Range (F10) fire on every keystroke
  burst but had no isolated P95 measurement in the interactive `run` suite
  — only touched incidentally under the session suite's contention, with
  no dedicated warm-up/measured window. Adds DocumentSymbolAsync/
  FoldingRangeAsync scenarios using the harness's existing
  RequestDocumentSymbolAsync/RequestFoldingRangeAsync.
- workspace/codeLens/refresh had no batch coverage, unlike its two
  structural siblings (semanticTokens/refresh, inlayHint/refresh), which
  were both already benchmarked — an inconsistency rather than a
  deliberate omission. Unlike those two it isn't triggered by a plain
  .feature edit (BindingRegistryChangedHandler only requests it after an
  incremental Roslyn patch), so CodeLensRefreshAsync reuses
  RoslynReDiscoveryAsync's synthetic .cs binding edit and waits for the
  refresh push instead.

Verified by running the benchmark binary directly: all three new rows
report real numbers (textDocument/documentSymbol, textDocument/foldingRange,
workspace/codeLens/refresh).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@clrudolphi
clrudolphi merged commit c4ca9fd into master Jul 21, 2026
@clrudolphi
clrudolphi deleted the feature/256-benchmark-coverage branch July 21, 2026 16:34
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.

Performance Benchmark: review benchmark implementation for missing feature scenarios

1 participant