70 lines
2.5 KiB
Rust
70 lines
2.5 KiB
Rust
use std::hint::black_box;
|
|
|
|
use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
|
|
use kcl_lib::kcl_lsp_server;
|
|
use tokio::runtime::Runtime;
|
|
use tower_lsp::LanguageServer;
|
|
|
|
async fn kcl_lsp_semantic_tokens(code: &str) {
|
|
let server = kcl_lsp_server(false).await.unwrap();
|
|
|
|
// Send open file.
|
|
server
|
|
.did_open(tower_lsp::lsp_types::DidOpenTextDocumentParams {
|
|
text_document: tower_lsp::lsp_types::TextDocumentItem {
|
|
uri: "file:///test.kcl".try_into().unwrap(),
|
|
language_id: "kcl".to_string(),
|
|
version: 1,
|
|
text: code.to_string(),
|
|
},
|
|
})
|
|
.await;
|
|
|
|
// Send semantic tokens request.
|
|
black_box(
|
|
server
|
|
.semantic_tokens_full(tower_lsp::lsp_types::SemanticTokensParams {
|
|
text_document: tower_lsp::lsp_types::TextDocumentIdentifier {
|
|
uri: "file:///test.kcl".try_into().unwrap(),
|
|
},
|
|
partial_result_params: Default::default(),
|
|
work_done_progress_params: Default::default(),
|
|
})
|
|
.await
|
|
.unwrap()
|
|
.unwrap(),
|
|
);
|
|
}
|
|
|
|
fn bench_kcl_lsp_semantic_tokens(c: &mut Criterion) {
|
|
for (name, code) in [
|
|
("pipes_on_pipes", PIPES_PROGRAM),
|
|
("big_kitt", KITT_PROGRAM),
|
|
("cube", CUBE_PROGRAM),
|
|
("math", MATH_PROGRAM),
|
|
("mike_stress_test", MIKE_STRESS_TEST_PROGRAM),
|
|
("global_tags", GLOBAL_TAGS_FILE),
|
|
("lsystem", LSYSTEM_PROGRAM),
|
|
] {
|
|
c.bench_with_input(BenchmarkId::new("semantic_tokens_", name), &code, |b, &s| {
|
|
let rt = Runtime::new().unwrap();
|
|
|
|
// Spawn a future onto the runtime
|
|
b.iter(|| {
|
|
rt.block_on(kcl_lsp_semantic_tokens(s));
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
criterion_group!(benches, bench_kcl_lsp_semantic_tokens);
|
|
criterion_main!(benches);
|
|
|
|
const KITT_PROGRAM: &str = include_str!("../e2e/executor/inputs/kittycad_svg.kcl");
|
|
const PIPES_PROGRAM: &str = include_str!("../e2e/executor/inputs/pipes_on_pipes.kcl");
|
|
const CUBE_PROGRAM: &str = include_str!("../e2e/executor/inputs/cube.kcl");
|
|
const MATH_PROGRAM: &str = include_str!("../e2e/executor/inputs/math.kcl");
|
|
const MIKE_STRESS_TEST_PROGRAM: &str = include_str!("../tests/mike_stress_test/input.kcl");
|
|
const GLOBAL_TAGS_FILE: &str = include_str!("../e2e/executor/inputs/global-tags.kcl");
|
|
const LSYSTEM_PROGRAM: &str = include_str!("../e2e/executor/inputs/lsystem.kcl");
|