Trimmed monorepo checkout (fluxer_desktop + packages/voice_engine_v2 + tools/ci) with a "Connect to a Different Server" menu item and popout that lets the desktop app switch to any self-hosted Fluxer instance, plus fixes for well-known discovery on single-domain self-hosted deployments and a false-positive ERR_ABORTED on same-origin client redirects during the switch. Defaults to chat.fluxr.chat and uses an isolated userData directory from the official build.
85 lines
2.4 KiB
Rust
85 lines
2.4 KiB
Rust
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
use std::hint::black_box;
|
|
|
|
use criterion::{Criterion, criterion_group, criterion_main};
|
|
use fluxer_audio_timing::{AudioTimingSmoother, SmootherInput, SourceGainRamp, StaleSourceTracker};
|
|
|
|
const SR: u32 = 48_000;
|
|
|
|
const FRAMES_PER_TICK: u32 = 960;
|
|
|
|
const PERIOD_NS: u64 = 20_000_000;
|
|
|
|
fn bench_smoother_steady_snap(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("audio_timing_smoother");
|
|
group.sample_size(100);
|
|
group.bench_function("snap_steady_state", |b| {
|
|
let mut s = AudioTimingSmoother::new(1, SR).expect("ok");
|
|
let _ = s
|
|
.adjust(SmootherInput {
|
|
media_ts_ns: 0,
|
|
frames: FRAMES_PER_TICK,
|
|
wall_ns: 0,
|
|
})
|
|
.expect("ok");
|
|
let mut n: u64 = 1;
|
|
b.iter(|| {
|
|
let result = s
|
|
.adjust(SmootherInput {
|
|
media_ts_ns: n * PERIOD_NS,
|
|
frames: FRAMES_PER_TICK,
|
|
wall_ns: n * PERIOD_NS,
|
|
})
|
|
.expect("ok");
|
|
n = n.wrapping_add(1);
|
|
black_box(result);
|
|
});
|
|
});
|
|
group.finish();
|
|
}
|
|
|
|
fn bench_ramp_advance(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("audio_timing_ramp");
|
|
group.sample_size(100);
|
|
group.bench_function("advance_and_query_gain", |b| {
|
|
let mut r = SourceGainRamp::new();
|
|
b.iter(|| {
|
|
r.advance_tick();
|
|
let g = r.current_gain_q15();
|
|
if r.is_complete() {
|
|
r.reset();
|
|
}
|
|
black_box(g);
|
|
});
|
|
});
|
|
group.finish();
|
|
}
|
|
|
|
fn bench_stale_check(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("audio_timing_eviction");
|
|
group.sample_size(100);
|
|
group.bench_function("is_stale_lookup", |b| {
|
|
let mut t = StaleSourceTracker::new(16).expect("ok");
|
|
for n in 1..=16u64 {
|
|
t.register_source(n, n * 1_000).expect("ok");
|
|
}
|
|
let threshold = 5_000_000_000u64;
|
|
let mut now: u64 = 1_000_000_000;
|
|
b.iter(|| {
|
|
let stale = t.is_stale(8, now, threshold).expect("ok");
|
|
now = now.wrapping_add(PERIOD_NS);
|
|
black_box(stale);
|
|
});
|
|
});
|
|
group.finish();
|
|
}
|
|
|
|
criterion_group!(
|
|
benches,
|
|
bench_smoother_steady_snap,
|
|
bench_ramp_advance,
|
|
bench_stale_check
|
|
);
|
|
criterion_main!(benches);
|