Add native self-hosted instance connection to fluxer_desktop
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.
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
// 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);
|
||||
Reference in New Issue
Block a user