From dbf02d880407df0667b56e52290decaab752a199 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 9 Nov 2019 10:06:09 -0500 Subject: add a more realistic benchmark --- bin/perf | 7 +++---- examples/perf.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 examples/perf.rs diff --git a/bin/perf b/bin/perf index 9a70b08..6accd27 100755 --- a/bin/perf +++ b/bin/perf @@ -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 < /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> { + (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]) { + 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> = read_frames().collect(); + for _ in 1..10 { + draw_frames(&frames); + } +} -- cgit v1.2.3-54-g00ecf