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:
@@ -1199,6 +1199,13 @@ async fn serve_session(
|
||||
launch: hello.launch.clone(),
|
||||
plane: crate::events::Plane::Native,
|
||||
});
|
||||
// GPU clock pin (Linux, opt-in `PUNKTFUNK_PIN_CLOCKS`): hold the box-wide vendor clock floor for
|
||||
// as long as THIS session streams, refcounted with every other live session across both planes.
|
||||
// RAII like the marker above — armed on the first live client, released when the last one
|
||||
// disconnects, so idle clocks aren't pinned while nobody is connected. No-op off Linux / when
|
||||
// the flag is unset.
|
||||
#[cfg(target_os = "linux")]
|
||||
let _clock_pin = crate::gpuclocks::session_pin();
|
||||
// The session's launch, threaded into the data plane. Windows carries the store-qualified id
|
||||
// (spawned into the interactive user session once capture is live); other hosts resolve the id
|
||||
// to its shell command HERE against the host's own library — a client can only ever pick an
|
||||
|
||||
Reference in New Issue
Block a user