fix(host/linux): scope the GPU clock pin to live client sessions
The PUNKTFUNK_PIN_CLOCKS clock pin (AMD power_dpm_force_performance_level=high / NVIDIA nvmlDeviceSetGpuLockedClocks) was armed once at host start and released only at host exit, so the box's clocks stayed pinned the whole time the host ran — even with no client connected. Move the pin behind a box-wide refcount (gpuclocks::session_pin()) shared across both streaming planes (native + GameStream): it arms on the first live client and releases on the last disconnect. on_host_start() now only installs the process-scoped NVIDIA P2-cap application profile. No behavior change when PUNKTFUNK_PIN_CLOCKS is unset. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -86,6 +86,12 @@ pub fn start(
|
||||
crate::events::emit(crate::events::EventKind::ClientConnected {
|
||||
client: event_client.clone(),
|
||||
});
|
||||
// GPU clock pin (Linux, opt-in `PUNKTFUNK_PIN_CLOCKS`): hold the box-wide vendor clock
|
||||
// floor while this compat-plane stream runs, refcounted with every other live session
|
||||
// across both planes. Released when the closure exits (stream stopped) — so idle clocks
|
||||
// aren't pinned between Moonlight sessions. No-op off Linux / when the flag is unset.
|
||||
#[cfg(target_os = "linux")]
|
||||
let _clock_pin = crate::gpuclocks::session_pin();
|
||||
let result = run(
|
||||
cfg,
|
||||
app.as_ref(),
|
||||
|
||||
Reference in New Issue
Block a user