mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-17 18:24:04 +00:00
70 lines
2.3 KiB
Rust
70 lines
2.3 KiB
Rust
use criterion::{Bencher, Criterion, criterion_group, criterion_main};
|
|
use syntect::parsing::{SyntaxSet, ScopeStack};
|
|
use syntect::highlighting::{ThemeSet};
|
|
use syntect::html::highlighted_html_for_string;
|
|
use std::str::FromStr;
|
|
|
|
mod highlight_utils;
|
|
mod utils;
|
|
|
|
fn highlight_file(b: &mut Bencher, file: &str) {
|
|
let path = utils::get_test_file_path(file);
|
|
|
|
// don't load from dump so we don't count lazy regex compilation time
|
|
let ss = SyntaxSet::load_defaults_nonewlines();
|
|
let ts = ThemeSet::load_defaults();
|
|
|
|
let syntax = ss.find_syntax_for_file(path).unwrap().unwrap();
|
|
let s = std::fs::read_to_string(path).unwrap();
|
|
|
|
b.iter(|| {
|
|
highlight_utils::do_highlight(&s, &ss, syntax, &ts.themes["base16-ocean.dark"])
|
|
});
|
|
}
|
|
|
|
fn stack_matching(b: &mut Bencher) {
|
|
let s = "source.js meta.group.js meta.group.js meta.block.js meta.function-call.method.js meta.group.js meta.object-literal.js meta.block.js meta.function-call.method.js meta.group.js variable.other.readwrite.js";
|
|
let stack = ScopeStack::from_str(s).unwrap();
|
|
let selector = ScopeStack::from_str("source meta.function-call.method").unwrap();
|
|
b.iter(|| {
|
|
selector.does_match(stack.as_slice())
|
|
});
|
|
}
|
|
|
|
fn highlight_html(b: &mut Bencher) {
|
|
let ss = SyntaxSet::load_defaults_newlines();
|
|
let ts = ThemeSet::load_defaults();
|
|
|
|
let path = "testdata/parser.rs";
|
|
let syntax = ss.find_syntax_for_file(path).unwrap().unwrap();
|
|
let s = std::fs::read_to_string(path).unwrap();
|
|
|
|
b.iter(|| {
|
|
highlighted_html_for_string(&s, &ss, syntax, &ts.themes["base16-ocean.dark"])
|
|
});
|
|
}
|
|
|
|
fn highlighting_benchmark(c: &mut Criterion) {
|
|
c.bench_function("stack_matching", stack_matching);
|
|
c.bench_function("highlight_html", highlight_html);
|
|
let mut highlight = c.benchmark_group("highlight");
|
|
for input in &[
|
|
"highlight_test.erb",
|
|
"InspiredGitHub.tmTheme",
|
|
"Ruby.sublime-syntax",
|
|
"jquery.js",
|
|
"parser.rs",
|
|
"scope.rs",
|
|
] {
|
|
highlight.bench_with_input(format!("\"{}\"", input), input, |b, s| highlight_file(b, s));
|
|
}
|
|
highlight.finish();
|
|
}
|
|
|
|
criterion_group! {
|
|
name = benches;
|
|
config = Criterion::default().sample_size(10);
|
|
targets = highlighting_benchmark
|
|
}
|
|
criterion_main!(benches);
|