Skip to content

Commit d053693

Browse files
move benches to dedicated crate (#253)
1 parent 372637c commit d053693

File tree

10 files changed

+85
-98
lines changed

10 files changed

+85
-98
lines changed

Cargo.lock

Lines changed: 11 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ resolver = "2"
44

55
[workspace.dependencies]
66
djls = { path = "crates/djls" }
7+
djls-bench = { path = "crates/djls-bench" }
78
djls-conf = { path = "crates/djls-conf" }
89
djls-ide = { path = "crates/djls-ide" }
910
djls-project = { path = "crates/djls-project" }

crates/djls-bench/Cargo.toml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[package]
2+
name = "djls-bench"
3+
version = "0.0.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
djls-source = { workspace = true }
8+
djls-templates = { workspace = true }
9+
10+
camino = { workspace = true }
11+
divan = { workspace = true }
12+
salsa = { workspace = true }
13+
14+
[[bench]]
15+
name = "parser"
16+
harness = false
17+
18+
[lints]
19+
workspace = true

crates/djls-templates/benches/parser.rs renamed to crates/djls-bench/benches/parser.rs

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,50 @@
1-
mod support;
2-
31
use divan::Bencher;
4-
use support::db::Db;
5-
use support::fixtures::template_fixtures;
6-
use support::fixtures::TemplateFixture;
2+
use djls_bench::template_fixtures;
3+
use djls_bench::Db;
4+
use djls_bench::TemplateFixture;
75

86
fn main() {
97
divan::main();
108
}
119

1210
#[divan::bench(args = template_fixtures())]
13-
fn parse_template_fixture(fixture: &TemplateFixture) {
14-
let mut db = Db::new();
15-
let file = db.file_with_contents(fixture.path.clone(), &fixture.source);
16-
if let Some(nodelist) = djls_templates::parse_template(&db, file) {
17-
divan::black_box(nodelist.nodelist(&db).len());
18-
}
11+
fn parse_template(bencher: Bencher, fixture: &TemplateFixture) {
12+
bencher
13+
.with_inputs(|| {
14+
let mut db = Db::new();
15+
let file = db.file_with_contents(fixture.path.clone(), &fixture.source);
16+
(db, file)
17+
})
18+
.bench_local_values(|(db, file)| {
19+
if let Some(nodelist) = djls_templates::parse_template(&db, file) {
20+
divan::black_box(nodelist.nodelist(&db).len());
21+
}
22+
});
1923
}
2024

2125
#[divan::bench]
2226
fn parse_all_templates(bencher: Bencher) {
2327
let fixtures = template_fixtures();
24-
bencher.bench_local(|| {
25-
let mut db = Db::new();
26-
for fixture in fixtures {
27-
let file = db.file_with_contents(fixture.path.clone(), &fixture.source);
28-
if let Some(nodelist) = djls_templates::parse_template(&db, file) {
29-
divan::black_box(nodelist.nodelist(&db).len());
28+
29+
bencher
30+
.with_inputs(|| {
31+
let mut db = Db::new();
32+
let mut files = Vec::with_capacity(fixtures.len());
33+
34+
for fixture in fixtures {
35+
let file = db.file_with_contents(fixture.path.clone(), &fixture.source);
36+
files.push(file);
3037
}
31-
}
32-
});
38+
39+
(db, files)
40+
})
41+
.bench_local_values(|(db, files)| {
42+
for file in files {
43+
if let Some(nodelist) = djls_templates::parse_template(&db, file) {
44+
divan::black_box(nodelist.nodelist(&db).len());
45+
}
46+
}
47+
});
3348
}
3449

3550
#[divan::bench(args = template_fixtures())]
@@ -47,6 +62,8 @@ fn parse_template_incremental(bencher: Bencher, fixture: &TemplateFixture) {
4762
text
4863
};
4964

65+
// Flip between original/modified sources so each iteration simulates an edit or revert
66+
// against the same cached parse, forcing Salsa down its incremental path.
5067
let mut revision = 1_u64;
5168
let mut use_modified = true;
5269

crates/djls-templates/benches/support/db.rs renamed to crates/djls-bench/src/db.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,35 @@ use salsa::Setter;
1212

1313
#[salsa::db]
1414
#[derive(Clone)]
15-
pub(crate) struct Db {
15+
pub struct Db {
1616
sources: Arc<Mutex<HashMap<Utf8PathBuf, String>>>,
1717
storage: salsa::Storage<Self>,
1818
}
1919

2020
impl Db {
2121
#[must_use]
22-
pub(crate) fn new() -> Self {
22+
pub fn new() -> Self {
2323
Self {
2424
sources: Arc::new(Mutex::new(HashMap::new())),
2525
storage: salsa::Storage::default(),
2626
}
2727
}
2828

29-
pub(crate) fn file_with_contents(&mut self, path: Utf8PathBuf, contents: &str) -> File {
29+
/// ## Panics
30+
///
31+
/// If sources mutex is poisoned.
32+
pub fn file_with_contents(&mut self, path: Utf8PathBuf, contents: &str) -> File {
3033
self.sources
3134
.lock()
3235
.expect("sources lock poisoned")
3336
.insert(path.clone(), contents.to_string());
3437
File::new(self, path, 0)
3538
}
3639

37-
pub(crate) fn set_file_contents(&mut self, file: File, contents: &str, revision: u64) {
40+
/// ## Panics
41+
///
42+
/// If sources mutex is poisoned.
43+
pub fn set_file_contents(&mut self, file: File, contents: &str, revision: u64) {
3844
let path = file.path(self);
3945
self.sources
4046
.lock()

crates/djls-templates/benches/support/fixtures.rs renamed to crates/djls-bench/src/fixtures.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use camino::Utf8Path;
77
use camino::Utf8PathBuf;
88

99
#[derive(Clone)]
10-
pub(crate) struct TemplateFixture {
10+
pub struct TemplateFixture {
1111
pub label: String,
1212
pub path: Utf8PathBuf,
1313
pub source: String,
@@ -19,7 +19,7 @@ impl fmt::Display for TemplateFixture {
1919
}
2020
}
2121

22-
pub(crate) fn template_fixtures() -> &'static [TemplateFixture] {
22+
pub fn template_fixtures() -> &'static [TemplateFixture] {
2323
static FIXTURES: OnceLock<Vec<TemplateFixture>> = OnceLock::new();
2424
FIXTURES.get_or_init(load_template_fixtures).as_slice()
2525
}

crates/djls-bench/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
mod db;
2+
mod fixtures;
3+
4+
pub use db::Db;
5+
pub use fixtures::template_fixtures;
6+
pub use fixtures::TemplateFixture;

crates/djls-templates/Cargo.toml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,8 @@ toml = { workspace = true }
1616

1717
[dev-dependencies]
1818
camino = { workspace = true }
19-
divan = { workspace = true }
2019
insta = { workspace = true }
2120
tempfile = { workspace = true }
2221

23-
[[bench]]
24-
name = "lexer"
25-
harness = false
26-
27-
[[bench]]
28-
name = "parser"
29-
harness = false
30-
3122
[lints]
3223
workspace = true

crates/djls-templates/benches/lexer.rs

Lines changed: 0 additions & 61 deletions
This file was deleted.

crates/djls-templates/benches/support/mod.rs

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)