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:
2026-07-01 18:22:43 -04:00
commit 682afacd30
1763 changed files with 613720 additions and 0 deletions
@@ -0,0 +1,25 @@
{
"measured_at": "85e057a273fd",
"host": "darwin-arm64-apple-silicon",
"regression_budget_percent": 5.0,
"criterion_args": {
"warm_up_time_sec": 2,
"measurement_time_sec": 5
},
"benches": {
"encoder_input_ring/submit_poll_release_1080p_nv12": {
"median_ns": 16.806,
"low_ns": 16.663,
"high_ns": 16.951,
"budget_percent_override": 10.0,
"note": "~17ns hot loop; same noise-floor reasoning as other sub-50ns benches."
},
"encoder_input_ring/submit_then_drain_eight_1080p_nv12": {
"median_ns": 112590.0,
"low_ns": 108530.0,
"high_ns": 117050.0,
"budget_percent_override": 10.0,
"note": "8x submit + 8x drain. Allocator-touchy; observed cross-run sigma ~5-7% on a loaded host."
}
}
}
@@ -0,0 +1,143 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
use std::hint::black_box;
use criterion::{Criterion, criterion_group, criterion_main};
use fluxer_encoder_ring::{
EncoderDims, EncoderSubmission, NotImplementedHandoff, NvencHandoff, RingError,
apply_dts_offset, compute_dts_offset_us,
};
struct NoopCallback;
impl fluxer_encoder_ring::encoder_handoff::EncoderCompletionCallback for NoopCallback {
fn on_complete(&mut self, _sequence: u64, _encoded_bytes: u32) {}
}
fn bench_stub_encode_round_trip(c: &mut Criterion) {
let mut group = c.benchmark_group("encoder_handoff");
group.sample_size(60);
group.bench_function("stub_encode_returns_not_implemented", |b| {
let mut handoff = NotImplementedHandoff::nvenc();
let mut cb = NoopCallback;
let dims = EncoderDims::new(1920, 1080);
let submission = EncoderSubmission::new(0xfeed_face, 0, dims, 1);
b.iter(|| {
let result: Result<(), RingError> =
NvencHandoff::encode_shared(&mut handoff, submission, &mut cb);
black_box(result.err());
});
});
group.finish();
}
fn bench_dts_offset_computation(c: &mut Criterion) {
let mut group = c.benchmark_group("encoder_handoff");
group.sample_size(120);
group.bench_function("dts_offset_compute_apply", |b| {
b.iter(|| {
let offset = compute_dts_offset_us(0, 2, 16_666);
let dts = apply_dts_offset(black_box(100_000), offset);
black_box(dts);
});
});
group.finish();
}
#[cfg(target_os = "windows")]
fn bench_nvenc_single_frame_round_trip(c: &mut Criterion) {
use fluxer_encoder_ring::{NvencD3D11Handoff, PicParams};
use windows::Win32::Graphics::Direct3D::{D3D_DRIVER_TYPE_HARDWARE, D3D_FEATURE_LEVEL_11_0};
use windows::Win32::Graphics::Direct3D11::{
D3D11_BIND_RENDER_TARGET, D3D11_BIND_SHADER_RESOURCE, D3D11_CREATE_DEVICE_BGRA_SUPPORT,
D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX, D3D11_RESOURCE_MISC_SHARED_NTHANDLE,
D3D11_SDK_VERSION, D3D11_TEXTURE2D_DESC, D3D11_USAGE_DEFAULT, D3D11CreateDevice,
ID3D11Device,
};
use windows::Win32::Graphics::Dxgi::Common::{DXGI_FORMAT_NV12, DXGI_SAMPLE_DESC};
use windows::Win32::Graphics::Dxgi::IDXGIResource1;
use windows::core::Interface;
let mut device: Option<ID3D11Device> = None;
let feature_levels = [D3D_FEATURE_LEVEL_11_0];
let _ = unsafe {
D3D11CreateDevice(
None,
D3D_DRIVER_TYPE_HARDWARE,
Default::default(),
D3D11_CREATE_DEVICE_BGRA_SUPPORT,
Some(&feature_levels),
D3D11_SDK_VERSION,
Some(&mut device),
None,
None,
)
};
let device = match device {
Some(d) => d,
None => return,
};
let dims = EncoderDims::new(1920, 1080);
let handoff_result = NvencD3D11Handoff::new(device.clone(), dims, 5_000_000);
let mut handoff = match handoff_result {
Ok(h) => h,
Err(_) => return,
};
let desc = D3D11_TEXTURE2D_DESC {
Width: 1920,
Height: 1080,
MipLevels: 1,
ArraySize: 1,
Format: DXGI_FORMAT_NV12,
SampleDesc: DXGI_SAMPLE_DESC {
Count: 1,
Quality: 0,
},
Usage: D3D11_USAGE_DEFAULT,
BindFlags: (D3D11_BIND_RENDER_TARGET.0 | D3D11_BIND_SHADER_RESOURCE.0) as u32,
CPUAccessFlags: 0,
MiscFlags: (D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX.0 | D3D11_RESOURCE_MISC_SHARED_NTHANDLE.0)
as u32,
};
let mut texture = None;
let _ = unsafe { device.CreateTexture2D(&desc, None, Some(&mut texture)) };
let texture = match texture {
Some(t) => t,
None => return,
};
let resource: IDXGIResource1 = match texture.cast() {
Ok(r) => r,
Err(_) => return,
};
let shared =
match unsafe { resource.CreateSharedHandle(None, 0x3, windows::core::PCWSTR::null()) } {
Ok(h) => h.0 as u64,
Err(_) => return,
};
let slot = match handoff.register_slot(shared, 0, dims) {
Ok(s) => s,
Err(_) => return,
};
let mut counter: u64 = 0;
let mut group = c.benchmark_group("encoder_handoff");
group.sample_size(20);
group.bench_function("nvenc_1080p_nv12_single_frame", |b| {
b.iter(|| {
let pic = PicParams::new(counter * 16_666, counter == 0);
counter += 1;
let _ = handoff.encode_shared_async(slot, 0, dims, pic);
let _ = handoff.poll_completed(slot);
});
});
group.finish();
handoff.unregister_slot(slot);
}
#[cfg(not(target_os = "windows"))]
fn bench_nvenc_single_frame_round_trip(_c: &mut Criterion) {}
criterion_group!(
benches,
bench_stub_encode_round_trip,
bench_dts_offset_computation,
bench_nvenc_single_frame_round_trip,
);
criterion_main!(benches);
@@ -0,0 +1,51 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
use std::hint::black_box;
use criterion::{Criterion, criterion_group, criterion_main};
use fluxer_encoder_ring::{CpuMemcpyBackend, EncoderInputRing, TextureFormat};
fn bench_submit_poll_release_cycle(c: &mut Criterion) {
let mut group = c.benchmark_group("encoder_input_ring");
group.sample_size(60);
group.bench_function("submit_poll_release_1080p_nv12", |b| {
let mut ring = EncoderInputRing::new(CpuMemcpyBackend::new());
ring.initialise(1920, 1080, TextureFormat::Nv12)
.expect("init");
b.iter(|| {
ring.submit(|_h| {}).expect("submit");
let ready = ring.poll_next_ready().expect("ready");
black_box(&ready);
ring.release_completed(ready).expect("release");
});
});
group.finish();
}
fn bench_submit_only_drained_after(c: &mut Criterion) {
let mut group = c.benchmark_group("encoder_input_ring");
group.sample_size(60);
group.bench_function("submit_then_drain_eight_1080p_nv12", |b| {
b.iter(|| {
let mut ring = EncoderInputRing::new(CpuMemcpyBackend::new());
ring.initialise(1920, 1080, TextureFormat::Nv12)
.expect("init");
for _ in 0..8 {
ring.submit(|_h| {}).expect("submit");
}
for _ in 0..8 {
let ready = ring.poll_next_ready().expect("ready");
ring.release_completed(ready).expect("release");
}
black_box(ring.metrics());
});
});
group.finish();
}
criterion_group!(
benches,
bench_submit_poll_release_cycle,
bench_submit_only_drained_after
);
criterion_main!(benches);