お世話になっております。
表題の通り、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]