GamePause 状態における AudioMisc の使用メモリ増加と対処方法について

お世話になっております。

表題の通り、UGameplayStatics::SetGamePaused(bPaused = true) 経由でゲームをポーズした際、LLM の分類でいう AudioMisc の使用メモリが増えていくという現象を確認しました。

([Audio Memory Growth While [Content removed] にて報告されている バグ UE-367712 と類似の現象だと思われます)

手元で確認する限り、以下の処理が原因になっているのではないかと考えています。

/* AudioThread.cpp  line 572 付近 */
void FAudioThread::RunCommandOnGameThread(TUniqueFunction<void()> InFunction, const TStatId InStatId)
{
    // GamePaused 状態でも、
    // (Pause されたタイミングで bIsTicking が変更されないので)
    // CanTick は true を返す。
    // (しかし、bTickEvenWhenPaused が false なので 実際には Tick しないため、
    //  FAudioCommand は処理されず蓄積してしまう)
    if (AudioCommandPrivate::CommandQueue.CanTick())
    {
        AudioCommandPrivate::CommandQueue.RunCommandOnGameThread(MoveTemp(InFunction), InStatId);
    }
    /* ... */
}

CanTick (の戻り値) が、実際の Tick 可能性に従って更新されるのが正しい対処かと考えています。

ただ、現在開発中のプロジェクトが開発終期であり、できる限りエンジンソース側への変更を避けたい事情があり、我々のプロジェクトとしては、以下のような対処を検討しています。

===

(前提)

我々のプロジェクトは、サウンド処理を外部プラグインで行う予定であるため、Unreal Engine ネイティブの Audio システムを必要としていません。

(対処)

プロジェクト起動後、なるべく早いタイミングで、FAudioThread::StopAudioThread をコールする

(経緯)

初めは -noaudio を強制的に起動する方向で検討していたのですが、うまく動作させられなかったため、少なくとも「発生している意図しないメモリ増加」を抑制する手段として、選択しました

===

この対処について、想定される範囲で起こり得る問題はあるでしょうか?

また、もし仮にエンジンソース側の対処が必要だとすると、どのような変更を加えるのが良いでしょうか?

以上、お手数をおかけしますが、ご確認をよろしくお願いします。

[Attachment Removed]

お世話になっております。

>この対処について、想定される範囲で起こり得る問題はあるでしょうか?

FAudioThread::StopAudioThread をコールする方法でも問題ないかと思いますが、アプリケーション終了時など、本来の期待されるタイミングで StopAudioThread が実行された時にクラッシュしないか(2重にStopしていないか)は確認しておいた方が良い点かと思われます。

もしくは、Engine.ini に以下の設定自体を入れておくことで、エンジン側のAudioシステムを起動しないようにすることもできます。

[Audio]
AudioDeviceModuleName=
AudioMixerModuleName=

>また、もし仮にエンジンソース側の対処が必要だとすると、どのような変更を加えるのが良いでしょうか?

EPSスレッドの中で言及されていました、FGameThreadAudioCommandQueue.bTickEvenWhenPaused を true に設定することがシンプルかと思われます。

[Attachment Removed]

ご確認ありがとうございます。

記載いただいた Engine.ini の設定によって、期待していた動作 (エンジン側 Audio の制限) を実現できることを確認できたため、この方法で対応をしようと思います。

(ひとまず、Platforms/Switch/Config/SwitchEngine.ini へ記載して Nintendo Switch 向けにパッケージ化して確認しました)

改めて、ありがとうございました。

[Attachment Removed]