Robin Malfait 1c48683a23
Hoist oxide/crates to just crates (#13333)
* move `oxide/crates` to `crates`

* ignore `target/` folder

* ensure pnpm points to `crates` instead of `oxide/crates`

* ensure all paths point to `crates` instead of `oxide/crates`

* update `oxide/crates` -> `crates` path in workflows

* use correct path in .prettierignore

* rename `crates/core` to `crates/oxide`

* remove oxide folder

* fix test script to run `cargo test` directly
2024-03-23 09:00:48 -04:00

64 lines
2.1 KiB
Rust

use criterion::{criterion_group, criterion_main, Criterion};
use std::path::PathBuf;
use tailwindcss_oxide::{scan_files, ChangedContent, Parsing, IO};
pub fn criterion_benchmark(c: &mut Criterion) {
// current_dir will be set to ./crates/core
let fixtures_path = std::env::current_dir()
.unwrap()
.join("benches")
.join("fixtures");
let mut all_files: Vec<(u64, PathBuf)> = std::fs::read_dir(fixtures_path)
.unwrap()
.filter_map(Result::ok)
.map(|dir_entry| dir_entry.path())
.filter(|path| path.is_file())
.filter(|path| match path.extension() {
Some(ext) => ext == "html",
_ => false,
})
.map(|path| (path.metadata().unwrap().len(), path))
.collect();
// Let's sort them first so that we are working with the same files in the same order every
// time.
all_files.sort_by(|a, b| a.0.cmp(&b.0));
// Let's work with the first middle X items (so that we can skip outliers and work with more
// interesting files)
let amount = 300;
let mut files: Vec<_> = all_files
.iter()
.skip((all_files.len() - amount) / 2) // Skip the first X, so that we can use the middle
// {amount} files.
.take(amount)
.map(|(_, path)| path)
.collect();
// Two (or more) files can technically have the exact same size, but the order is random, so
// now that we are scoped to the middle X files, let's sort these alphabetically to guarantee
// the same order in our benchmarks.
files.sort_by(|a, b| a.file_name().cmp(&b.file_name()));
let changed_content: Vec<ChangedContent> = files
.into_iter()
.map(|file| ChangedContent {
file: Some(file.to_path_buf()),
content: None,
})
.collect();
c.bench_function("scan_files", |b| {
b.iter(|| {
scan_files(
changed_content.clone(),
Parsing::Parallel as u8 | IO::Parallel as u8,
)
})
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);