mirror of
https://github.com/huggingface/text-generation-inference.git
synced 2025-06-19 15:52:08 +00:00
improving design
This commit is contained in:
parent
a1613e2518
commit
ae72d4f96f
50
benchmark/src/event.rs
Normal file
50
benchmark/src/event.rs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -55,7 +55,6 @@ pub(crate) async fn generation_task(
|
|||||||
},
|
},
|
||||||
_ = shutdown_receiver.recv() => {}
|
_ = shutdown_receiver.recv() => {}
|
||||||
}
|
}
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn generate_runs(tokenizer: Tokenizer,
|
async fn generate_runs(tokenizer: Tokenizer,
|
||||||
|
@ -3,6 +3,7 @@ extern crate core;
|
|||||||
mod ui;
|
mod ui;
|
||||||
mod utils;
|
mod utils;
|
||||||
mod generation;
|
mod generation;
|
||||||
|
mod event;
|
||||||
|
|
||||||
use crate::ui::UI;
|
use crate::ui::UI;
|
||||||
use tokenizers::Tokenizer;
|
use tokenizers::Tokenizer;
|
||||||
|
Loading…
Reference in New Issue
Block a user