mirror of
https://github.com/latex-lsp/texlab.git
synced 2025-12-23 09:19:21 +00:00
Refactor benchmarks
This commit is contained in:
parent
ebda917625
commit
d4ba24e217
6 changed files with 85 additions and 139 deletions
|
|
@ -1,10 +1,7 @@
|
|||
mod benchmarks;
|
||||
|
||||
use criterion::Criterion;
|
||||
use criterion::criterion_main;
|
||||
|
||||
fn main() {
|
||||
benchmarks::completion::benches();
|
||||
benchmarks::open_bibtex::benches();
|
||||
benchmarks::open_latex::benches();
|
||||
Criterion::default().configure_from_args().final_summary();
|
||||
criterion_main! {
|
||||
benchmarks::completion::benches
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,51 +1,117 @@
|
|||
use super::test_data::TEST_LATEX;
|
||||
use criterion::criterion_group;
|
||||
use criterion::{BenchmarkId, Criterion};
|
||||
use futures::executor::block_on;
|
||||
use indoc::indoc;
|
||||
use std::time::Duration;
|
||||
use texlab::{completion::CompletionProvider, feature::FeatureTester};
|
||||
|
||||
fn criterion_benchmark(criterion: &mut Criterion) {
|
||||
criterion.bench_with_input(
|
||||
BenchmarkId::new("Completion", "LaTeX Command"),
|
||||
&TEST_LATEX,
|
||||
BenchmarkId::new("Completion", "LaTeX Word"),
|
||||
&LATEX_CODE,
|
||||
|b, code| {
|
||||
b.iter(|| {
|
||||
let items = block_on(async {
|
||||
block_on(async {
|
||||
FeatureTester::new()
|
||||
.file("main.tex", code.as_str())
|
||||
.file("main.tex", *code)
|
||||
.main("main.tex")
|
||||
.position(0, 0)
|
||||
.test_completion(CompletionProvider::new())
|
||||
.await
|
||||
});
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
criterion.bench_with_input(
|
||||
BenchmarkId::new("Completion", "LaTeX Command"),
|
||||
&LATEX_CODE,
|
||||
|b, code| {
|
||||
b.iter(|| {
|
||||
block_on(async {
|
||||
FeatureTester::new()
|
||||
.file("main.tex", *code)
|
||||
.main("main.tex")
|
||||
.position(0, 1)
|
||||
.test_completion(CompletionProvider::new())
|
||||
.await
|
||||
});
|
||||
assert!(!items.is_empty());
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
criterion.bench_with_input(
|
||||
BenchmarkId::new("Completion", "LaTeX Environment"),
|
||||
&TEST_LATEX,
|
||||
&LATEX_CODE,
|
||||
|b, code| {
|
||||
b.iter(|| {
|
||||
let items = block_on(async {
|
||||
block_on(async {
|
||||
FeatureTester::new()
|
||||
.file("main.tex", code.as_str())
|
||||
.file("main.tex", *code)
|
||||
.main("main.tex")
|
||||
.position(9, 9)
|
||||
.test_completion(CompletionProvider::new())
|
||||
.await
|
||||
});
|
||||
assert!(!items.is_empty());
|
||||
})
|
||||
},
|
||||
);
|
||||
|
||||
criterion.bench_with_input(
|
||||
BenchmarkId::new("Completion", "LaTeX Label"),
|
||||
&LATEX_CODE,
|
||||
|b, code| {
|
||||
b.iter(|| {
|
||||
block_on(async {
|
||||
FeatureTester::new()
|
||||
.file("main.tex", *code)
|
||||
.main("main.tex")
|
||||
.position(15, 7)
|
||||
.test_completion(CompletionProvider::new())
|
||||
.await
|
||||
});
|
||||
})
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
pub fn benches() {
|
||||
let mut criterion = Criterion::default()
|
||||
.measurement_time(Duration::from_secs(10))
|
||||
.configure_from_args();
|
||||
|
||||
criterion_benchmark(&mut criterion);
|
||||
criterion_group! {
|
||||
name = benches;
|
||||
config = Criterion::default().measurement_time(Duration::from_secs(60));
|
||||
targets = criterion_benchmark
|
||||
}
|
||||
|
||||
static LATEX_CODE: &str = indoc!(
|
||||
r#"
|
||||
\documentclass{article}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{lipsum}
|
||||
\usepackage{geometry}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\newcommand{\foo}{foo}
|
||||
\DeclareMathOperator{\bar}{bar}
|
||||
\include{child1}
|
||||
\input{child2.tex}
|
||||
\begin{document}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\begin{equation*}\label{eq:foo}
|
||||
e^{i \pi} + 1 = 0
|
||||
\end{equation*}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\ref{eq:foo}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\section{Foo}\label{sec:foo}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\subsection{Bar}\label{sec:bar}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\include{foo}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\input{bar.tex}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\cite{foo, bar, baz}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\nocite{*}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\end{document}
|
||||
"#
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,4 +1 @@
|
|||
pub mod completion;
|
||||
pub mod open_bibtex;
|
||||
pub mod open_latex;
|
||||
mod test_data;
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
use super::test_data::TEST_BIBTEX;
|
||||
use criterion::Criterion;
|
||||
use texlab::syntax::bibtex;
|
||||
|
||||
fn criterion_benchmark(criterion: &mut Criterion) {
|
||||
criterion.bench_function("BibTeX Parser", |b| b.iter(|| bibtex::open(&TEST_BIBTEX)));
|
||||
}
|
||||
|
||||
pub fn benches() {
|
||||
let mut criterion = Criterion::default().configure_from_args();
|
||||
criterion_benchmark(&mut criterion);
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
use super::test_data::TEST_LATEX;
|
||||
use criterion::Criterion;
|
||||
use std::env;
|
||||
use texlab::{
|
||||
protocol::{Options, Uri},
|
||||
syntax::latex,
|
||||
tex::Resolver,
|
||||
};
|
||||
|
||||
fn criterion_benchmark(criterion: &mut Criterion) {
|
||||
let uri = Uri::parse("file:///home/user/main.tex").unwrap();
|
||||
let resolver = Resolver::default();
|
||||
let options = Options::default();
|
||||
let cwd = env::current_dir().unwrap();
|
||||
|
||||
criterion.bench_function("LaTeX Analysis", |b| {
|
||||
b.iter(|| {
|
||||
latex::open(latex::OpenParams {
|
||||
text: &TEST_LATEX,
|
||||
uri: &uri,
|
||||
resolver: &resolver,
|
||||
options: &options,
|
||||
current_dir: &cwd,
|
||||
})
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
pub fn benches() {
|
||||
let mut criterion = Criterion::default().configure_from_args();
|
||||
criterion_benchmark(&mut criterion);
|
||||
}
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
use indoc::indoc;
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
pub static TEST_LATEX: Lazy<String> = Lazy::new(|| {
|
||||
indoc!(
|
||||
r#"
|
||||
\documentclass{article}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{lipsum}
|
||||
\usepackage{geometry}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\newcommand{\foo}{foo}
|
||||
\DeclareMathOperator{\bar}{bar}
|
||||
\include{child1}
|
||||
\input{child2.tex}
|
||||
\begin{document}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\begin{equation*}\label{eq:foo}
|
||||
e^{i \pi} + 1 = 0
|
||||
\end{equation*}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\ref{eq:foo}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\section{Foo}\label{sec:foo}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\subsection{Bar}\label{sec:bar}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\include{foo}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\input{bar.tex}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\cite{foo, bar, baz}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\nocite{*}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
|
||||
\end{document}
|
||||
"#
|
||||
)
|
||||
.repeat(15)
|
||||
});
|
||||
|
||||
pub static TEST_BIBTEX: Lazy<String> = Lazy::new(|| {
|
||||
r#"
|
||||
@string{anch-ie = {Angew.~Chem. Int.~Ed.}}
|
||||
@string{cup = {Cambridge University Press}}
|
||||
@string{dtv = {Deutscher Taschenbuch-Verlag}}
|
||||
@string{hup = {Harvard University Press}}
|
||||
@string{jams = {J.~Amer. Math. Soc.}}
|
||||
@string{jchph = {J.~Chem. Phys.}}
|
||||
@string{jomch = {J.~Organomet. Chem.}}
|
||||
@string{pup = {Princeton University Press}}
|
||||
|
||||
@incollection{westfahl:space,
|
||||
author = {Westfahl, Gary},
|
||||
title = {The True Frontier},
|
||||
subtitle = {Confronting and Avoiding the Realities of Space in {American}
|
||||
Science Fiction Films},
|
||||
pages = {55-65},
|
||||
crossref = {westfahl:frontier},
|
||||
langid = {english},
|
||||
langidopts = {variant=american},
|
||||
indextitle = {True Frontier, The},
|
||||
annotation = {A cross-referenced article from a \texttt{collection}. This is
|
||||
an \texttt{incollection} entry with a \texttt{crossref}
|
||||
field. Note the \texttt{subtitle} and \texttt{indextitle}
|
||||
fields},
|
||||
}
|
||||
"#
|
||||
.repeat(15)
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue