more stats in transport

This commit is contained in:
🪞👃🪞 2024-12-27 22:10:21 +01:00
parent ba56c1909d
commit 7e02a46beb
3 changed files with 42 additions and 26 deletions

View file

@ -10,6 +10,10 @@ pub struct PerfModel {
period: AtomicF64, period: AtomicF64,
} }
pub trait HasPerf {
fn perf (&self) -> &PerfModel;
}
impl Default for PerfModel { impl Default for PerfModel {
fn default () -> Self { fn default () -> Self {
Self { Self {

View file

@ -35,6 +35,8 @@ pub struct TransportView {
color: ItemPalette, color: ItemPalette,
focused: bool, focused: bool,
sr: String, sr: String,
chunk: String,
latency: String,
bpm: String, bpm: String,
ppq: String, ppq: String,
beat: String, beat: String,
@ -47,16 +49,21 @@ pub struct TransportView {
impl<T: HasClock> From<(&T, Option<ItemPalette>, bool)> for TransportView { impl<T: HasClock> From<(&T, Option<ItemPalette>, bool)> for TransportView {
fn from ((state, color, focused): (&T, Option<ItemPalette>, bool)) -> Self { fn from ((state, color, focused): (&T, Option<ItemPalette>, bool)) -> Self {
let clock = state.clock(); let clock = state.clock();
let sr = format!("{:.1}k", clock.timebase.sr.get() / 1000.0); let rate = clock.timebase.sr.get();
let chunk = clock.chunk.load(Relaxed);
let latency = chunk as f64 / rate * 1000.;
let sr = format!("{:.1}k", rate / 1000.0);
let bpm = format!("{:.3}", clock.timebase.bpm.get()); let bpm = format!("{:.3}", clock.timebase.bpm.get());
let ppq = format!("{:.0}", clock.timebase.ppq.get()); let ppq = format!("{:.0}", clock.timebase.ppq.get());
let chunk = format!("{chunk}");
let latency = format!("{latency}");
let color = color.unwrap_or(ItemPalette::from(TuiTheme::g(32))); let color = color.unwrap_or(ItemPalette::from(TuiTheme::g(32)));
if let Some(started) = clock.started.read().unwrap().as_ref() { if let Some(started) = clock.started.read().unwrap().as_ref() {
let current_sample = (clock.global.sample.get() - started.sample.get())/1000.; let current_sample = (clock.global.sample.get() - started.sample.get())/1000.;
let current_usec = clock.global.usec.get() - started.usec.get(); let current_usec = clock.global.usec.get() - started.usec.get();
let current_second = current_usec/1000000.; let current_second = current_usec/1000000.;
Self { Self {
color, focused, sr, bpm, ppq, color, focused, sr, bpm, ppq, chunk, latency,
started: true, started: true,
global_sample: format!("{:.0}k", started.sample.get()/1000.), global_sample: format!("{:.0}k", started.sample.get()/1000.),
global_second: format!("{:.1}s", started.usec.get()/1000.), global_second: format!("{:.1}s", started.usec.get()/1000.),
@ -68,7 +75,7 @@ impl<T: HasClock> From<(&T, Option<ItemPalette>, bool)> for TransportView {
} }
} else { } else {
Self { Self {
color, focused, sr, bpm, ppq, color, focused, sr, bpm, ppq, chunk, latency,
started: false, started: false,
global_sample: format!("{:.0}k", clock.global.sample.get()/1000.), global_sample: format!("{:.0}k", clock.global.sample.get()/1000.),
global_second: format!("{:.1}s", clock.global.usec.get()/1000000.), global_second: format!("{:.1}s", clock.global.usec.get()/1000000.),
@ -94,10 +101,15 @@ render!(<Tui>|self: TransportView|{
Field(" Beat", self.beat.as_str(), &color), Field(" Beat", self.beat.as_str(), &color),
Field(" BPM", self.bpm.as_str(), &color), Field(" BPM", self.bpm.as_str(), &color),
]), ]),
" ",
col!([ col!([
Field(" Time", format!("{:.1}s", self.current_second).as_str(), &color), Field(" Time", format!("{:.1}s", self.current_second).as_str(), &color),
Field("Smpl", format!("{:.1}k", self.current_sample).as_str(), &color), //Field(" Smpl", format!("{:.1}k", self.current_sample).as_str(), &color),
Field(" Rate", format!("{}", self.sr).as_str(), &color),
//Field(" CPU%", format!("{:.1}ms", self.perf).as_str(), &color),
]),
col!([
Field(" Chunk", format!("{}", self.chunk).as_str(), &color),
Field(" Lag", format!("{:.3}ms", self.latency).as_str(), &color),
]), ]),
]))) ])))
}); });