한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L2 クライアントのOS・端末

ウィンドウの最小化・非アクティブ時の処理制限 Minimized / unfocused window throttling

原因ID co-unfocused · 主担当 ゲーム開発チーム・クライアント開発

図と実験のあるメインページでこのカードを開く →

ほかのウィンドウを見たりゲームを最小化したりすると、ゲームとWindowsが電力を節約するためにゲームの処理を遅くします。戻ると遅れていたパケットが押し寄せるか、すでに切断されています。

なぜ Alt+Tabでほかのウィンドウを見るか、ゲームを最小化 → すると ゲームが見えない間はFPSを大きく下げるか止め、Windowsも見えないプログラムの優先度を下げる → 画面では 戻った瞬間に早送り、長くバックグラウンドにしていたら切断

症状
早送り, カクつき, 切断
要因
ストール
誰に起きるか
自分だけ
いつ
特定の操作をしたとき, しばらく放置した後
担当
主担当 ゲーム開発チーム・クライアント開発
ゲーム開発チームの対応
ウィンドウが見えなくてもパケットの受信とハートビートは別スレッドで継続、エンジンの「バックグラウンドで実行」設定を確認、復帰時に最新の状態へ一度に合わせる。
数値の目安
ウィンドウが見えないときにFPSを5〜10に下げると、1フレームが100〜200ms。パケットをフレームごとに処理するゲームは、その分パケットを読むのが遅れます。
グラフでは
途切れた後にまとめて到着 · フレーム間隔(ウィンドウ切り替えの前後)、処理したパケット数
確認箇所
PresentMonを動かしたままAlt+Tab・最小化を行い、ウィンドウが見えないときのフレーム間隔を確認。ゲームのログにウィンドウのフォーカスが変わった時刻を記録し、切断理由と突き合わせる
該当する場合
ウィンドウが見えない間にフレーム間隔が100ms以上に延びるか記録が途切れ、戻った瞬間に遅れていたパケットを一気に処理して早送りになる。長くバックグラウンドにしておくと、ハートビートのタイムアウトで切断
該当しない場合
ウィンドウを表示したままでも同じなら「バックグラウンドプロセスによるCPU占有」かネットワーク側
確認手段
ユーザー側の環境で確認
もっと詳しく
Windows 11は、最小化されたり完全に隠れていて音も出していないウィンドウのプログラムに、1msタイマーを保証しません。バッテリーで動いているノートPCでは、そうしたプログラムを最も電力消費の少ない速度に落とし、種類の異なるコアが混在するCPUなら、遅い高効率コアで動かすこともあります。同じPCの2つのクライアントのうちバックグラウンド側だけがおかしいなら、「バックグラウンドウィンドウの処理制限」の項目もあわせて確認してください。

出典

  1. Quality of Service Microsoft
    見えも聞こえもしないウィンドウのプログラムはLow QoS。バッテリー駆動時は、最も効率的なCPU速度と高効率コアでスケジューリング
  2. timeBeginPeriod function (timeapi.h) Microsoft
    Windows 11は、隠れたり最小化されたりしたウィンドウのプロセスに、デフォルトより高いタイマー分解能を保証しない
  3. Application.runInBackground Unity
    Unityのデフォルト値はfalseのため、ウィンドウがバックグラウンドに回るとゲームループが止まる
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsBetweenPresents:今回のPresent()呼び出しと前回の呼び出しの間の時間(ms)

あわせて読みたい原因

同じ層:L2 クライアントのOS・端末

同じ症状(早送り)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る