23 uint32 PendingDecommittedPages;
32 uint32 AddrToPageIndex(
void* Addr)
const
34 uint32 PageIndex = (((
uint8*)Addr) - LowAddress) / PageSize;
35 check(PageIndex < NumPages && (
uint8*)Addr >= LowAddress);
39 void* PageIndexToAddr(
uint32 PageIndex)
const
41 check(PageIndex < NumPages);
42 return (
void*)(LowAddress +
size_t(PageIndex) * PageSize);
45 bool IsCommitted(
void* Addr)
const
47 uint32 PageIndex = AddrToPageIndex(Addr);
48 bool bCommitted = CurrentlyCommitted.
IsAllocated(PageIndex);
53 bool IsPendingDecommit(
void* Addr)
const
55 uint32 PageIndex = AddrToPageIndex(Addr);
61 void Commit(
void* Addr)
63 uint32 PageIndex = AddrToPageIndex(Addr);
64 CurrentlyCommitted.
AllocBit(PageIndex);
66 void Decommit(
void* Addr)
68 uint32 PageIndex = AddrToPageIndex(Addr);
69 CurrentlyCommitted.
FreeBit(PageIndex);
71 void MarkPendingDecommit(
void* Addr)
73 uint32 PageIndex = AddrToPageIndex(Addr);
74 check(IsCommitted(Addr));
75 NotPendingDecommit.
FreeBit(PageIndex);
77 void UnMarkPendingDecommit(
void* Addr)
79 uint32 PageIndex = AddrToPageIndex(Addr);
80 check(IsCommitted(Addr));
81 NotPendingDecommit.
AllocBit(PageIndex);
94 , PendingDecommittedPages(0)
100 check(PageSize && LowAddress && HighAddress > LowAddress);
101 NumPages = (HighAddress - LowAddress) / PageSize;
108 check(NumPages && MemSize);
110 DecommittedPages = NumPages;
130 PendingDecommittedPages++;
156 check(PendingDecommittedPages);
157 PendingDecommittedPages--;
166 check(DecommittedPages);
209 check(PendingDecommittedPages);
210 PendingDecommittedPages--;
215 check(CommittedPages);
254 check(SweepPage < NumPages);
262 check(CommittedPages);
265 check(PendingDecommittedPages);
266 PendingDecommittedPages--;
279 SweepPage =
Index + 1;
280 if (SweepPage >= NumPages)
322 CurrentlyCommitted.
FreeBit(BitIndex);
323 NotPendingDecommit.
AllocBit(BitIndex);
329 check(SweepPage < NumPages);
337 check(CommittedPages);
348 SweepPage =
Index + 1;
349 if (SweepPage >= NumPages)
364 return size_t(PendingDecommittedPages) * PageSize;
369 return 100.0f *
float(CommitHits) /
float(CommitHits + CommitMisses + 1);
constexpr bool IsAligned(T Val, uint64 Alignment)
Definition AlignmentTemplates.h:50
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define MAX_uint32
Definition NumericLimits.h:21
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Size
Definition VulkanMemory.cpp:4034
Definition MallocBinnedCommon.h:120
static constexpr uint32 GetMemoryRequirements(uint32 NumPages)
Definition MallocBinnedCommon.h:134
void FBitTreeInit(uint32 InDesiredCapacity, void *Memory, uint32 MemorySize, bool InitialValue)
Definition MallocBinnedCommon.cpp:168
uint32 AllocBit()
Definition MallocBinnedCommon.cpp:229
uint32 NextAllocBit() const
Definition MallocBinnedCommon.cpp:319
void FreeBit(uint32 Index)
Definition MallocBinnedCommon.cpp:415
bool IsAllocated(uint32 Index) const
Definition MallocBinnedCommon.cpp:278
Definition PageCache.h:12
FPageCache(void *InLowAdress, void *InHighAddress, size_t InPageSize)
Definition PageCache.h:86
void InitPageCache(void *Memory)
Definition PageCache.h:106
size_t GetFreeableMemory()
Definition PageCache.h:361
size_t Commit(void *InAddr, size_t Size, size_t &OutUnPending, T &&CommitFunction)
Definition PageCache.h:138
uint32 GetMemoryRequirements()
Definition PageCache.h:98
size_t TryDecommitPending(size_t Size, T &&DecommitFunction)
Definition PageCache.h:293
size_t MarkForPendingDecommit(void *InAddr, size_t Size)
Definition PageCache.h:115
size_t ForceDecommit(void *InAddr, size_t Size, size_t &OutUnPending, T &&DecommitFunction)
Definition PageCache.h:191
size_t DecommitPending(size_t Size, T &&DecommitFunction)
Definition PageCache.h:238
float GetHitRate()
Definition PageCache.h:366
Definition ScopeLock.h:141
U16 Index
Definition radfft.cpp:71