Skip to content

Commit e8ce092

Browse files
committed
perf: Offer 'simd' feature for faster folding
```console $ cargo bench && cargo bench -F simd Compiling annotate-snippets v0.11.2 (/home/epage/src/personal/annotate-snippets-rs) Finished `bench` profile [optimized] target(s) in 0.99s Running unittests src/lib.rs (target/release/deps/annotate_snippets-b51bb37991a7f496) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running benches/bench.rs (target/release/deps/bench-468ba612503afee1) Timer precision: 18 ns bench fastest │ slowest │ median │ mean │ samples │ iters ├─ fold │ │ │ │ │ │ ├─ 0 1.911 µs │ 19.44 µs │ 1.943 µs │ 2.146 µs │ 100 │ 100 │ ├─ 1 1.916 µs │ 3.158 µs │ 1.973 µs │ 1.982 µs │ 100 │ 100 │ ├─ 10 2.121 µs │ 6.05 µs │ 2.225 µs │ 2.281 µs │ 100 │ 100 │ ├─ 100 3.706 µs │ 7.007 µs │ 3.83 µs │ 3.876 µs │ 100 │ 100 │ ├─ 1000 19.42 µs │ 25.61 µs │ 19.48 µs │ 19.64 µs │ 100 │ 100 │ ├─ 10000 111.2 µs │ 204.2 µs │ 127 µs │ 133.6 µs │ 100 │ 100 │ ╰─ 100000 1.094 ms │ 1.747 ms │ 1.137 ms │ 1.158 ms │ 100 │ 100 ╰─ simple 10.14 µs │ 40.27 µs │ 10.5 µs │ 11.01 µs │ 100 │ 100 Compiling annotate-snippets v0.11.2 (/home/epage/src/personal/annotate-snippets-rs) Finished `bench` profile [optimized] target(s) in 0.99s Running unittests src/lib.rs (target/release/deps/annotate_snippets-9d4024ac94675e6a) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running benches/bench.rs (target/release/deps/bench-d5470149969acbb8) Timer precision: 13 ns bench fastest │ slowest │ median │ mean │ samples │ iters ├─ fold │ │ │ │ │ │ ├─ 0 1.164 µs │ 13.91 µs │ 1.208 µs │ 1.408 µs │ 100 │ 100 │ ├─ 1 1.188 µs │ 4.289 µs │ 1.234 µs │ 1.277 µs │ 100 │ 100 │ ├─ 10 1.259 µs │ 3.822 µs │ 1.319 µs │ 1.419 µs │ 100 │ 100 │ ├─ 100 1.312 µs │ 2.732 µs │ 1.412 µs │ 1.519 µs │ 100 │ 100 │ ├─ 1000 1.917 µs │ 5.52 µs │ 2 µs │ 2.085 µs │ 100 │ 100 │ ├─ 10000 7.195 µs │ 29.55 µs │ 7.325 µs │ 7.638 µs │ 100 │ 100 │ ╰─ 100000 59.08 µs │ 403 µs │ 61.1 µs │ 65.52 µs │ 100 │ 100 ╰─ simple 9.92 µs │ 19.09 µs │ 10.33 µs │ 10.91 µs │ 100 │ 100 ```
1 parent a4cca36 commit e8ce092

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

Cargo.lock

+3-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ maintenance = { status = "actively-developed" }
2525

2626
[dependencies]
2727
anstyle = "1.0.4"
28+
memchr = { version = "2.7.4", optional = true }
2829
unicode-width = "0.1.11"
2930

3031
[dev-dependencies]
@@ -47,6 +48,7 @@ harness = false
4748

4849
[features]
4950
default = []
51+
simd = ["memchr"]
5052
testing-colors = []
5153

5254
[lints.rust]

src/renderer/display_list.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,7 @@ fn fold_prefix_suffix(mut snippet: snippet::Snippet<'_>) -> snippet::Snippet<'_>
893893
if let Some(before_new_start) = snippet.source[0..ann_start].rfind('\n') {
894894
let new_start = before_new_start + 1;
895895

896-
let line_offset = snippet.source[..new_start].lines().count();
896+
let line_offset = newline_count(&snippet.source[..new_start]);
897897
snippet.line_start += line_offset;
898898

899899
snippet.source = &snippet.source[new_start..];
@@ -919,6 +919,17 @@ fn fold_prefix_suffix(mut snippet: snippet::Snippet<'_>) -> snippet::Snippet<'_>
919919
snippet
920920
}
921921

922+
fn newline_count(body: &str) -> usize {
923+
#[cfg(feature = "simd")]
924+
{
925+
memchr::memchr_iter(b'\n', body.as_bytes()).count()
926+
}
927+
#[cfg(not(feature = "simd"))]
928+
{
929+
body.lines().count()
930+
}
931+
}
932+
922933
fn fold_body(body: Vec<DisplayLine<'_>>) -> Vec<DisplayLine<'_>> {
923934
const INNER_CONTEXT: usize = 1;
924935
const INNER_UNFOLD_SIZE: usize = INNER_CONTEXT * 2 + 1;

0 commit comments

Comments
 (0)