12#include "Containers/Queue.h"
26#define DEBUG_STREAM_CACHE !UE_BUILD_SHIPPING
219 return CacheOverflowCount.
GetValue();
224#if DEBUG_STREAM_CACHE
226 struct FCacheElementDebugInfo
229 int32 NumTotalChunks;
232 int32 NumTimesTouched;
234 uint64 TimeLoadStartedCycles = 0;
235 uint64 TimeLoadEndedCycles = 0;
240 float AverageLocationInCacheWhenNeeded;
244 bool bLoadingBehaviorExternallyOverriden;
248 float OffsetInSeconds=0.f;
252 bool bWasLoadedFromInlineChunk =
false;
253 bool bWasInlinedButUnloaded =
false;
254 bool bWaveDestroyed =
false;
256 FCacheElementDebugInfo()
259 , TimeLoadStartedCycles(0)
261 , AverageLocationInCacheWhenNeeded(0.0f)
263 , bWasCacheMiss(
false)
269 TimeLoadEndedCycles = 0;
272 TimeLoadStartedCycles = 0;
275 bWasCacheMiss =
false;
276 AverageLocationInCacheWhenNeeded = 0.0f;
277 bWasLoadedFromInlineChunk =
false;
278 bWasInlinedButUnloaded =
false;
279 bWaveDestroyed =
false;
297 FCacheElement* MoreRecentElement;
298 FCacheElement* LessRecentElement;
305#if !UE_BUILD_SHIPPING
308 bool bWantsExtraLogging =
false;
310 bool WantsFilteredLogging()
const
312#if !UE_BUILD_SHIPPING
313 return bWantsExtraLogging;
322#if WITH_EDITORONLY_DATA
329#if DEBUG_STREAM_CACHE
330 FCacheElementDebugInfo DebugInfo;
336 , MoreRecentElement(nullptr)
337 , LessRecentElement(nullptr)
343 void WaitForAsyncLoadCompletion(
bool bCancel);
345 bool IsLoadInProgress()
const
355#if DEBUG_STREAM_CACHE
356 bool IsBeingPlayed()
const;
357 void UpdateDebugInfoLoadingBehavior();
360 bool CanEvictChunk()
const
362 return !IsInUse() && !IsLoadInProgress();
365 uint32 GetNumChunks()
const;
371 void ReleaseRetainedAudioOnSoundWave();
372 bool IsSoundWaveRetainingAudio()
const;
376 WaitForAsyncLoadCompletion(
true);
397 FCacheElement* MostRecentElement;
398 FCacheElement* LeastRecentElement;
415 uint64 TimeOfBeginPlayCycles=0;
425 struct FSoundWaveMemoryTracker
428 int64 MemoryCount = 0;
436 struct FCacheMissInfo
441 bool bBlockedForLoad;
448 bool bLogCacheMisses;
450 uint64 GetCurrentMemoryUsageBytes()
const {
return *MemoryCounterBytes + *ForceInlineMemoryCounterBytes + *FeatureMemoryCounterBytes; }
454 FCacheElement* FindElementForKey(
const FChunkKey&
InKey);
455 FCacheElement* LinearSearchCacheForElement(
const FChunkKey&
InKey);
456 FCacheElement* LinearSearchChunkArrayForElement(
const FChunkKey&
InKey);
459 void TouchElement(FCacheElement*
InElement);
465 void SetUpLeastRecentChunk();
469 bool ShouldAddNewChunk()
const;
bool operator<(const FAudioChunkCache &Element1, const FAudioChunkCache &Element2)
Definition AudioStreamingCache.h:483
#define WITH_EDITOR
Definition Build.h:67
EAudioChunkLoadResult
Definition ContentStreaming.h:505
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
DIRECTLINK_API Display
Definition DirectLinkLog.h:8
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
ESoundWaveLoadingBehavior
Definition SoundWaveLoadingBehavior.h:24
constexpr uint64 InvalidAudioStreamCacheLookupID
Definition SoundWave.h:87
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition AudioStreamingCache.h:34
void RemoveMemoryCountedFeature(const FAudioStreamCacheMemoryHandle &Feature)
Definition AudioStreamingCache.cpp:1215
const int32 MaxChunkSize
Definition AudioStreamingCache.h:176
void CancelAllPendingLoads()
Definition AudioStreamingCache.cpp:1355
TPair< int, int > DebugDisplay(UWorld *World, FViewport *Viewport, FCanvas *Canvas, int32 X, int32 Y, const FVector *ViewLocation, const FRotator *ViewRotation) const
Definition AudioStreamingCache.cpp:2626
void ClearCache()
Definition AudioStreamingCache.cpp:1083
TPair< int, int > DebugDisplayLegacy(UWorld *World, FViewport *Viewport, FCanvas *Canvas, int32 X, int32 Y, const FVector *ViewLocation, const FRotator *ViewRotation) const
Definition AudioStreamingCache.cpp:2235
uint64 AddOrTouchChunk(const FChunkKey &InKey, const TSharedPtr< FSoundWaveData > &InSoundWavePtr, TFunction< void(EAudioChunkLoadResult) > OnLoadCompleted, ENamedThreads::Type CallbackThread, bool bNeededForPlayback)
Definition AudioStreamingCache.cpp:828
void AddNewReferenceToChunk(const FChunkKey &InKey)
Definition AudioStreamingCache.cpp:1059
void SetCacheLookupIDForChunk(const FChunkKey &InChunkKey, uint64 InCacheLookupID)
Definition AudioStreamingCache.cpp:2110
uint64 GetCacheLookupIDForChunk(const FChunkKey &InChunkKey) const
Definition AudioStreamingCache.cpp:2095
TArrayView< uint8 > GetChunk(const FChunkKey &InKey, const TSharedPtr< FSoundWaveData > &InSoundWavePtr, bool bBlockForLoadCompletion, bool bNeededForPlayback, uint64 &InOutCacheLookupID)
Definition AudioStreamingCache.cpp:935
void AddMemoryCountedFeature(const FAudioStreamCacheMemoryHandle &Feature)
Definition AudioStreamingCache.cpp:1193
void BlockForAllPendingLoads() const
Definition AudioStreamingCache.cpp:1324
void BeginLoggingCacheMisses()
Definition AudioStreamingCache.cpp:1383
FString FlushCacheMissLog()
Definition AudioStreamingCache.cpp:1393
TPair< int, int > DebugVisualDisplay(UWorld *World, FViewport *Viewport, FCanvas *Canvas, int32 X, int32 Y, const FVector *ViewLocation, const FRotator *ViewRotation) const
Definition AudioStreamingCache.cpp:3002
void StopLoggingCacheMisses()
Definition AudioStreamingCache.cpp:1388
static bool DoesKeyContainValidChunkIndex(const FChunkKey &InKey, const FSoundWaveData &InSoundWaveData)
Definition AudioStreamingCache.cpp:2090
~FAudioChunkCache()
Definition AudioStreamingCache.cpp:820
EDebugDisplayElementTypes
Definition AudioStreamingCache.h:189
@ NumPrimedAndPlayingCacheMiss
@ NumRetainedAndPlayingCacheMiss
void RemoveForceInlineSoundWave(const FSoundWaveProxyPtr &)
Definition AudioStreamingCache.cpp:1157
void HandleStarvation(const FSoundWaveProxyPtr &SoundWave, const uint32 ChunkIndex, const uint32 InBytesProduced, const uint32 InBytesExpected)
Definition AudioStreamingCache.cpp:2118
uint64 TrimMemory(uint64 BytesToFree, bool bAllowRetainedChunkTrimming)
Definition AudioStreamingCache.cpp:1223
TArray< FObjectKey > GetLeastRecentlyUsedRetainedSoundWaves(int32 NumSoundWavesToRetrieve)
uint64 ReportCacheSize()
Definition AudioStreamingCache.cpp:1376
void IncrementCacheOverflowCounter()
Definition AudioStreamingCache.h:212
int32 GetNumberOfCacheOverflows() const
Definition AudioStreamingCache.h:217
TPair< int, int > DebugBirdsEyeDisplay(UWorld *World, FViewport *Viewport, FCanvas *Canvas, int32 X, int32 Y, const FVector *ViewLocation, const FRotator *ViewRotation) const
Definition AudioStreamingCache.cpp:3115
FString DebugPrint()
Definition AudioStreamingCache.cpp:2473
void RemoveReferenceToChunk(const FChunkKey &InKey)
Definition AudioStreamingCache.cpp:1071
void AddForceInlineSoundWave(const FSoundWaveProxyPtr &)
Definition AudioStreamingCache.cpp:1103
Definition ContentStreaming.h:110
Definition AudioStreamCacheMemoryHandle.h:21
Definition BulkData.h:1295
Definition CanvasTypes.h:211
Definition NameTypes.h:617
Definition SoundWave.h:1571
Definition ThreadSafeBool.h:17
Definition ThreadSafeCounter.h:14
int32 Increment()
Definition ThreadSafeCounter.h:52
int32 GetValue() const
Definition ThreadSafeCounter.h:120
Definition UnrealClient.h:412
Definition ArrayView.h:139
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition UniqueObj.h:13
Definition UniquePtr.h:107
Definition SharedPointer.h:1295
constexpr uint32 Read
Definition MassProcessorDependencySolver.h:21
Type
Definition TaskGraphInterfaces.h:57
@ false
Definition radaudio_common.h:23
Definition AudioStreamingCache.h:87
uint32 ChunkIndex
Definition AudioStreamingCache.h:102
bool operator==(const FCacheMissEntry &Other) const
Definition AudioStreamingCache.h:95
FName SoundWaveName
Definition AudioStreamingCache.h:100
friend uint32 GetTypeHash(const FCacheMissEntry &InCacheMissEntry)
Definition AudioStreamingCache.h:105
FCacheMissEntry(FName InSoundWaveName, uint32 InChunkIndex)
Definition AudioStreamingCache.h:90
Definition AudioStreamingCache.h:37
FGuid ObjectKey
Definition AudioStreamingCache.h:65
FChunkKey(const FChunkKey &Other)=default
uint32 ChunkIndex
Definition AudioStreamingCache.h:66
friend uint32 GetTypeHash(const FChunkKey &InChunkKey)
Definition AudioStreamingCache.h:75
FName SoundWaveName
Definition AudioStreamingCache.h:64
bool operator==(const FChunkKey &Other) const
Definition AudioStreamingCache.cpp:336
FChunkKey & operator=(const FChunkKey &Other)=default
Definition AudioStreamingCache.h:491
int32 MaxChunkSize
Definition AudioStreamingCache.h:494
int32 NumElements
Definition AudioStreamingCache.h:499
uint64 MaxMemoryInBytes
Definition AudioStreamingCache.h:504
Definition AudioStreamingCache.h:489
TArray< FCacheDimensions > Caches
Definition AudioStreamingCache.h:512
Definition AudioStreamingCache.h:519
virtual void CancelForcedResources() override
Definition AudioStreamingCache.cpp:505
virtual void AddReferenceToChunk(const FAudioChunkHandle &InHandle) override
Definition AudioStreamingCache.cpp:729
static int32 GetNextChunkIndex(const FSoundWaveProxyPtr &InSoundWave, const uint32 InCurrentChunkIndex)
Definition AudioStreamingCache.cpp:698
virtual void RemoveForceInlineSoundWave(const FSoundWaveProxyPtr &SoundWave) override
Definition AudioStreamingCache.cpp:544
FAudioChunkCache * GetCacheForWave(const FSoundWaveProxyPtr &InSoundWave) const
Definition AudioStreamingCache.cpp:662
virtual uint64 TrimMemory(uint64 NumBytesToFree) override
Definition AudioStreamingCache.cpp:2204
virtual FString GenerateMemoryReport() override
Definition AudioStreamingCache.cpp:2175
virtual void RemoveLevel(class ULevel *Level) override
Definition AudioStreamingCache.cpp:525
virtual void SetProfilingMode(bool bEnabled) override
Definition AudioStreamingCache.cpp:2186
virtual int32 RenderStatAudioStreaming(UWorld *World, FViewport *Viewport, FCanvas *Canvas, int32 X, int32 Y, const FVector *ViewLocation, const FRotator *ViewRotation) override
Definition AudioStreamingCache.cpp:2152
virtual FAudioChunkHandle GetLoadedChunk(const FSoundWaveProxyPtr &SoundWave, uint32 ChunkIndex, bool bBlockForLoad=false, bool bForImmediatePlayback=false) const override
Definition AudioStreamingCache.cpp:580
virtual void RemoveMemoryCountedFeature(const FAudioStreamCacheMemoryHandle &Feature) override
Definition AudioStreamingCache.cpp:562
virtual bool RequestChunk(const FSoundWaveProxyPtr &SoundWave, uint32 ChunkIndex, TFunction< void(EAudioChunkLoadResult)> OnLoadCompleted, ENamedThreads::Type ThreadToCallOnLoadCompletedOn, bool bForImmediatePlayback=false) override
Definition AudioStreamingCache.cpp:765
TArray< FAudioChunkCache > CacheArray
Definition AudioStreamingCache.h:577
virtual int32 BlockTillAllRequestsFinished(float TimeLimit=0.0f, bool bLogResults=false) override
Definition AudioStreamingCache.cpp:492
virtual void AddMemoryCountedFeature(const FAudioStreamCacheMemoryHandle &Feature) override
Definition AudioStreamingCache.cpp:553
virtual void SetDisregardWorldResourcesForFrames(int32 NumFrames) override
Definition AudioStreamingCache.cpp:515
virtual ~FCachedAudioStreamingManager()
Definition AudioStreamingCache.cpp:483
virtual void UpdateResourceStreaming(float DeltaTime, bool bProcessEverything=false) override
Definition AudioStreamingCache.cpp:487
virtual void AddForceInlineSoundWave(const FSoundWaveProxyPtr &SoundWave) override
Definition AudioStreamingCache.cpp:535
virtual void NotifyLevelChange() override
Definition AudioStreamingCache.cpp:510
virtual void HandleStarvation(const FSoundWaveProxyPtr &SoundWave, const uint32 ChunkIndex, const uint32 InBytesProduced, const uint32 InBytesExpected) override
Definition AudioStreamingCache.cpp:571
FAudioChunkCache * GetCacheForChunkSize(uint32 InChunkSize) const
Definition AudioStreamingCache.cpp:678
virtual void AddLevel(class ULevel *Level) override
Definition AudioStreamingCache.cpp:520
virtual void NotifyLevelOffset(class ULevel *Level, const FVector &Offset) override
Definition AudioStreamingCache.cpp:530
virtual void RemoveReferenceToChunk(const FAudioChunkHandle &InHandle) override
Definition AudioStreamingCache.cpp:747
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
Definition SoundWave.h:93
Definition ContentStreaming.h:517