Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml‎

Lines changed: 2 additions & 0 deletions
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‎

Lines changed: 12 additions & 1 deletion
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)

AltStyle によって変換されたページ (->オリジナル) /