JackPerfModel::update_from_jack_scope

This commit is contained in:
🪞👃🪞 2025-03-04 20:59:07 +02:00
parent 9d88a7361f
commit c35d505b9c
9 changed files with 30 additions and 76 deletions

29
Cargo.lock generated
View file

@ -501,9 +501,9 @@ dependencies = [
[[package]]
name = "indoc"
version = "2.0.5"
version = "2.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
[[package]]
name = "instability"
@ -553,9 +553,9 @@ dependencies = [
[[package]]
name = "itoa"
version = "1.0.14"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "jack"
@ -1130,9 +1130,9 @@ dependencies = [
[[package]]
name = "rustversion"
version = "1.0.19"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
[[package]]
name = "rusty-fork"
@ -1148,9 +1148,9 @@ dependencies = [
[[package]]
name = "ryu"
version = "1.0.19"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd"
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "scopeguard"
@ -1499,7 +1499,7 @@ dependencies = [
[[package]]
name = "tek_edn"
version = "0.1.0"
source = "git+https://codeberg.org/unspeaker/tengri?rev=d5a304e#d5a304e64593fc38b4a393b5e1fdf3fc60baf35d"
source = "git+https://codeberg.org/unspeaker/tengri?rev=6cd85ef#6cd85efe503135cc5a20da9366ff81a0bbe5f56c"
dependencies = [
"itertools 0.14.0",
"konst",
@ -1509,7 +1509,7 @@ dependencies = [
[[package]]
name = "tek_input"
version = "0.2.0"
source = "git+https://codeberg.org/unspeaker/tengri?rev=d5a304e#d5a304e64593fc38b4a393b5e1fdf3fc60baf35d"
source = "git+https://codeberg.org/unspeaker/tengri?rev=6cd85ef#6cd85efe503135cc5a20da9366ff81a0bbe5f56c"
dependencies = [
"tek_edn",
]
@ -1535,7 +1535,7 @@ dependencies = [
[[package]]
name = "tek_output"
version = "0.2.0"
source = "git+https://codeberg.org/unspeaker/tengri?rev=d5a304e#d5a304e64593fc38b4a393b5e1fdf3fc60baf35d"
source = "git+https://codeberg.org/unspeaker/tengri?rev=6cd85ef#6cd85efe503135cc5a20da9366ff81a0bbe5f56c"
dependencies = [
"tek_edn",
]
@ -1572,12 +1572,13 @@ dependencies = [
"tek_edn",
"tek_input",
"tek_jack",
"tek_tui",
]
[[package]]
name = "tek_tui"
version = "0.2.0"
source = "git+https://codeberg.org/unspeaker/tengri?rev=d5a304e#d5a304e64593fc38b4a393b5e1fdf3fc60baf35d"
source = "git+https://codeberg.org/unspeaker/tengri?rev=6cd85ef#6cd85efe503135cc5a20da9366ff81a0bbe5f56c"
dependencies = [
"atomic_float",
"better-panic",
@ -1703,9 +1704,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
[[package]]
name = "unicode-ident"
version = "1.0.17"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "unicode-segmentation"

View file

@ -4,7 +4,7 @@ edition = "2021"
version = "0.2.0"
[dependencies]
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "d5a304e" }
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "6cd85ef" }
tek_jack = { path = "../jack" }
tek_time = { path = "../time" }

View file

@ -67,7 +67,7 @@ audio!(
}
}
// End profiling cycle
self.perf.update(t0, scope);
self.perf.update_from_jack_scope(t0, scope);
Control::Continue
};
|self, event|{

View file

@ -4,7 +4,7 @@ edition = "2021"
version = "0.2.0"
[dependencies]
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "d5a304e" }
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "6cd85ef" }
tek_jack = { path = "../jack" }
tek_time = { path = "../time" }

View file

@ -4,7 +4,7 @@ edition = "2021"
version = "0.2.0"
[dependencies]
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "d5a304e" }
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "6cd85ef" }
tek_jack = { path = "../jack" }
tek_time = { path = "../time" }

View file

@ -58,7 +58,7 @@ impl Plugin {
pub struct PluginAudio(Arc<RwLock<Plugin>>);
from!(|model: &Arc<RwLock<Plugin>>| PluginAudio = Self(model.clone()));
audio!(|self: PluginAudio, client, scope|{
audio!(|self: PluginAudio, _client, scope|{
let state = &mut*self.0.write().unwrap();
match state.plugin.as_mut() {
Some(PluginKind::LV2(LV2Plugin {

View file

@ -4,7 +4,7 @@ edition = "2021"
version = "0.2.0"
[dependencies]
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "d5a304e" }
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "6cd85ef" }
tek_jack = { path = "../jack" }
tek_time = { path = "../time" }

View file

@ -4,8 +4,9 @@ edition = "2021"
version = "0.2.0"
[dependencies]
tek_input = { git = "https://codeberg.org/unspeaker/tengri", rev = "d5a304e" }
tek_edn = { git = "https://codeberg.org/unspeaker/tengri", rev = "d5a304e" }
tek_input = { git = "https://codeberg.org/unspeaker/tengri", rev = "6cd85ef" }
tek_edn = { git = "https://codeberg.org/unspeaker/tengri", rev = "6cd85ef" }
tek_tui = { git = "https://codeberg.org/unspeaker/tengri", rev = "6cd85ef" }
tek_jack = { path = "../jack" }

View file

@ -1,70 +1,22 @@
use crate::*;
use tek_tui::PerfModel;
/// Performance counter
#[derive(Debug)]
pub struct PerfModel {
pub enabled: bool,
clock: quanta::Clock,
// In nanoseconds
used: AtomicF64,
// In microseconds
period: AtomicF64,
pub trait JackPerfModel {
fn update_from_jack_scope (&self, t0: Option<u64>, scope: &ProcessScope);
}
pub trait HasPerf {
fn perf (&self) -> &PerfModel;
}
impl Default for PerfModel {
fn default () -> Self {
Self {
enabled: true,
clock: quanta::Clock::new(),
used: Default::default(),
period: Default::default(),
}
}
}
impl PerfModel {
pub fn get_t0 (&self) -> Option<u64> {
if self.enabled {
Some(self.clock.raw())
} else {
None
}
}
pub fn get_t1 (&self, t0: Option<u64>) -> Option<std::time::Duration> {
if let Some(t0) = t0 {
if self.enabled {
Some(self.clock.delta(t0, self.clock.raw()))
} else {
None
}
} else {
None
}
}
pub fn update (&self, t0: Option<u64>, scope: &ProcessScope) {
impl JackPerfModel for PerfModel {
fn update_from_jack_scope (&self, t0: Option<u64>, scope: &ProcessScope) {
if let Some(t0) = t0 {
let t1 = self.clock.raw();
self.used.store(
self.clock.delta_as_nanos(t0, t1) as f64,
Relaxed,
);
self.period.store(
self.window.store(
scope.cycle_times().unwrap().period_usecs as f64,
Relaxed,
);
}
}
pub fn percentage (&self) -> Option<f64> {
let period = self.period.load(Relaxed) * 1000.0;
if period > 0.0 {
let used = self.used.load(Relaxed);
Some(100.0 * used / period)
} else {
None
}
}
}