From 6c439e27c47d0e2d4da9c2d253a57156bf32e5d8 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 13 Nov 2019 07:20:33 -0500 Subject: attempt to avoid copies by writing directly to a std::io::Write this turns out to be slower, i think because it ends up doing a much larger number of small writes, and the copying overhead isn't as high as going through all of the machinery involved in stdout locking/buffering/syscalls/etc. --- examples/process_diff.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'examples/process_diff.rs') diff --git a/examples/process_diff.rs b/examples/process_diff.rs index c141269..55ebbf2 100644 --- a/examples/process_diff.rs +++ b/examples/process_diff.rs @@ -1,4 +1,4 @@ -use std::io::{Read as _, Write as _}; +use std::io::Read as _; fn read_frames() -> impl Iterator> { (1..=7625).map(|i| { @@ -14,13 +14,13 @@ fn read_frames() -> impl Iterator> { fn draw_frames(frames: &[Vec]) { let mut stdout = std::io::stdout(); let mut parser = vt100::Parser::default(); - let mut screen = parser.screen().clone(); for frame in frames { + let screen = parser.screen().clone(); parser.process(&frame); - let new_screen = parser.screen().clone(); - let diff = new_screen.contents_diff(&screen); - stdout.write_all(&diff).unwrap(); - screen = new_screen; + parser + .screen() + .write_contents_diff(&mut stdout, &screen) + .unwrap(); } } -- cgit v1.2.3-54-g00ecf