diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-09 10:06:09 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-09 14:58:57 -0500 |
commit | dbf02d880407df0667b56e52290decaab752a199 (patch) | |
tree | 993fa680b8248c60be182de640b5e5d88795089a | |
parent | 1df95eca71e5f2a9cb9adb2995a7552ec980dc8b (diff) | |
download | vt100-rust-dbf02d880407df0667b56e52290decaab752a199.tar.gz vt100-rust-dbf02d880407df0667b56e52290decaab752a199.zip |
add a more realistic benchmark
-rwxr-xr-x | bin/perf | 7 | ||||
-rw-r--r-- | examples/perf.rs | 32 |
2 files changed, 35 insertions, 4 deletions
@@ -1,7 +1,7 @@ #!/bin/sh set -eux -rm -f target/release/* perf.* || true +rm -f target/release/examples/* perf.* || true if ! grep -q debug Cargo.toml; then cat >> Cargo.toml <<EOF @@ -9,9 +9,8 @@ if ! grep -q debug Cargo.toml; then debug = true EOF fi -cargo test --release --no-run -bin=$(find ./target/release -maxdepth 1 -name '*split_escape*' -not -name '*.d') -perf record -F99 --call-graph dwarf,16384 "$bin" --ignored +cargo build --release --example perf +perf record -F99 --call-graph dwarf,16384 target/release/examples/perf --ignored > /dev/null perf script > perf.script perl ~/coding/src/FlameGraph/stackcollapse-perf.pl perf.script > perf.collapsed perl ~/coding/src/FlameGraph/flamegraph.pl perf.collapsed > perf.svg diff --git a/examples/perf.rs b/examples/perf.rs new file mode 100644 index 0000000..4222c6e --- /dev/null +++ b/examples/perf.rs @@ -0,0 +1,32 @@ +use std::io::{Read as _, Write as _}; + +fn read_frames() -> impl Iterator<Item = Vec<u8>> { + (1..=7625).map(|i| { + let mut file = + std::fs::File::open(format!("tests/data/crawl/crawl{}", i)) + .unwrap(); + let mut frame = vec![]; + file.read_to_end(&mut frame).unwrap(); + frame + }) +} + +fn draw_frames(frames: &[Vec<u8>]) { + let mut stdout = std::io::stdout(); + let mut parser = vt100::Parser::new(24, 80); + let mut screen = parser.screen().clone(); + for frame in frames { + parser.process(&frame); + let new_screen = parser.screen().clone(); + let diff = new_screen.contents_diff(&screen); + stdout.write_all(&diff).unwrap(); + screen = new_screen; + } +} + +fn main() { + let frames: Vec<Vec<u8>> = read_frames().collect(); + for _ in 1..10 { + draw_frames(&frames); + } +} |