diff --git a/examples/benchmark/Cargo.toml b/examples/benchmark/Cargo.toml index 81438038316f1b576b71c6f15038f4afcd7b637a..ddefc4acbf96287eeeb7b89ab59a9fa9f746e52b 100644 --- a/examples/benchmark/Cargo.toml +++ b/examples/benchmark/Cargo.toml @@ -7,6 +7,9 @@ license = "Apache-2.0" keywords = ["chip-8", "emulator", "rust", "benchmark"] edition = "2018" +[dependencies] +time = { version = "0.3" } + [dependencies.chip-ahoyto] path = "../.." diff --git a/examples/benchmark/src/main.rs b/examples/benchmark/src/main.rs index 5ef3f0face4af6e7a2ef616ba6db3725790f11a1..fa8ed161a3a739b8037fe2581a43965e12ea7ab1 100644 --- a/examples/benchmark/src/main.rs +++ b/examples/benchmark/src/main.rs @@ -1,7 +1,8 @@ use chip_ahoyto::chip8::Chip8; use std::{fs::File, io::Read}; +use time::Instant; -const CYCLE_COUNT: u32 = 1_000_000_000; +const CYCLE_COUNT: u64 = 10_000_000_000; fn main() { let rom = read_file("./resources/pong.ch8"); @@ -10,11 +11,21 @@ fn main() { chip8.reset_hard(); chip8.load_rom(&rom); - println!("Running {} cycles", CYCLE_COUNT); + let instant = Instant::now(); + + let cycles = CYCLE_COUNT; + + println!("Running {} cycles", cycles); for _ in 0..CYCLE_COUNT { chip8.tick(); } + + let duration_s = instant.elapsed().as_seconds_f32(); + let cycles_second = cycles as f32 / duration_s; + let mega_second = cycles_second / 1000.0 / 1000.0; + + println!("Took {} seconds or {:.2} MHz CPU", duration_s, mega_second); } fn read_file(path: &str) -> Vec<u8> {