improving design

This commit is contained in:
OlivierDehaene 2023-03-30 11:01:03 +02:00
parent a1613e2518
commit ae72d4f96f
3 changed files with 51 additions and 1 deletions

50
benchmark/src/event.rs Normal file
View File

@ -0,0 +1,50 @@
/// Inspired by https://github.com/orhun/rust-tui-template
use crossterm::event;
use tokio::sync::{mpsc, broadcast};
use std::time::{Duration, Instant};
/// Events
#[derive(Debug)]
pub(crate) enum Event {
/// Terminal tick.
Tick,
/// Key press.
Key(event::KeyEvent),
/// Terminal resize.
Resize(u16, u16),
}
pub(crate) async fn terminal_event_task(fps: u32, event_sender: mpsc::Sender<Event>,
mut shutdown_receiver: broadcast::Receiver<()>,
_shutdown_guard_sender: mpsc::Sender<()>,
) {
tokio::select! {
_ = event_loop(fps, event_sender) => {
},
_ = shutdown_receiver.recv() => {}
}
}
async fn event_loop(fps: u32, event_sender: mpsc::Sender<Event>,
) {
let per_frame = Duration::from_secs(1) / fps as u32;
let mut last_frame = Instant::now();
loop {
if let Some(sleep) = per_frame.checked_sub(last_frame.elapsed()) {
tokio::time::sleep(sleep).await;
}
if event::poll(Duration::from_secs(0)).expect("no events available") {
match event::read().expect("unable to read event") {
event::Event::Key(e) => event_sender.send(Event::Key(e)).await.unwrap_or(()),
event::Event::Resize(w, h) => event_sender.send(Event::Resize(w, h)).await.unwrap_or(()),
_ => (),
}
}
if last_frame.elapsed() >= per_frame {
event_sender.send(Event::Tick).await.unwrap_or(());
last_frame = Instant::now();
}
}
}

View File

@ -55,7 +55,6 @@ pub(crate) async fn generation_task(
},
_ = shutdown_receiver.recv() => {}
}
;
}
async fn generate_runs(tokenizer: Tokenizer,

View File

@ -3,6 +3,7 @@ extern crate core;
mod ui;
mod utils;
mod generation;
mod event;
use crate::ui::UI;
use tokenizers::Tokenizer;