mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-17 18:24:04 +00:00
90 lines
3.2 KiB
Rust
90 lines
3.2 KiB
Rust
use criterion::{criterion_group, criterion_main};
|
|
|
|
mod to_html {
|
|
use criterion::{BenchmarkId, Criterion, Throughput};
|
|
use pulldown_cmark::{html, Options, Parser};
|
|
|
|
pub fn pathological_missing_table_cells(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group(" pub fn pathological_missing_table_cells(c: &mut Criterion) {
|
|
");
|
|
let mut buf = String::new();
|
|
for i in 1..20 {
|
|
buf.clear();
|
|
buf.push_str(&"|x".repeat(i * 100));
|
|
buf.push('\n');
|
|
buf.push_str(&"|-".repeat(i * 100));
|
|
buf.push('\n');
|
|
buf.push_str(&"|x\n".repeat(i * 100));
|
|
group.throughput(Throughput::Bytes(buf.len() as u64));
|
|
group.bench_with_input(BenchmarkId::from_parameter(i), &buf, |b, buf| {
|
|
b.iter(|| render_html(buf, Options::ENABLE_TABLES));
|
|
});
|
|
}
|
|
group.finish();
|
|
}
|
|
|
|
pub fn pathological_link_def(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group(" pub fn pathological_link_def(c: &mut Criterion) {
|
|
");
|
|
let mut buf = String::new();
|
|
for i in 1..20 {
|
|
buf.clear();
|
|
buf.push_str(&"[x]: ");
|
|
buf.push_str(&"x".repeat(i * 100));
|
|
buf.push_str(&"\n[x]".repeat(i * 100));
|
|
group.throughput(Throughput::Bytes(buf.len() as u64));
|
|
group.bench_with_input(BenchmarkId::from_parameter(i), &buf, |b, buf| {
|
|
b.iter(|| render_html(buf, Options::empty()));
|
|
});
|
|
}
|
|
group.finish();
|
|
}
|
|
|
|
pub fn pathological_codeblocks1(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("pathological_codeblocks1");
|
|
let mut buf = String::new();
|
|
for i in 1..10 {
|
|
buf.push_str(&"`".repeat(i * 100));
|
|
buf.push(' ');
|
|
group.throughput(Throughput::Bytes(buf.len() as u64));
|
|
group.bench_with_input(BenchmarkId::from_parameter(i), &buf, |b, buf| {
|
|
b.iter(|| render_html(buf, Options::empty()));
|
|
});
|
|
}
|
|
group.finish();
|
|
}
|
|
|
|
pub fn advanced_pathological_codeblocks(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("advanced_pathological_codeblocks");
|
|
let mut buf = String::new();
|
|
let mut i = 1;
|
|
while buf.len() < 1250 {
|
|
buf.push_str(&"`".repeat(i));
|
|
buf.push(' ');
|
|
i += 1;
|
|
buf.push_str(&"*a* ".repeat(buf.len()));
|
|
group.throughput(Throughput::Bytes(buf.len() as u64));
|
|
group.bench_with_input(BenchmarkId::from_parameter(i), &buf, |b, buf| {
|
|
b.iter(|| render_html(buf, Options::empty()));
|
|
});
|
|
}
|
|
group.finish();
|
|
}
|
|
|
|
fn render_html(text: &str, opts: Options) -> String {
|
|
let mut s = String::with_capacity(text.len() * 3 / 2);
|
|
let p = Parser::new_ext(text, opts);
|
|
html::push_html(&mut s, p);
|
|
s
|
|
}
|
|
}
|
|
|
|
criterion_group!(
|
|
benches,
|
|
to_html::pathological_missing_table_cells,
|
|
to_html::pathological_link_def,
|
|
to_html::pathological_codeblocks1,
|
|
to_html::advanced_pathological_codeblocks
|
|
);
|
|
criterion_main!(benches);
|