UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CacheStorageBlocking.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CacheStorage.h"
6#include "Tasks/Task.h"
7
8#if !UE_BUILD_SHIPPING
9
10namespace StorageServer
11{
12 // Cache storage implemented via blocking file operations
14 {
15 public:
16 FCacheStorageBlocking(const TCHAR* FileName, const uint64 FileSize);
17 virtual ~FCacheStorageBlocking() override;
18
19 virtual void Flush() override;
20
21 virtual uint64 GetSize() const override;
22
23 virtual void Invalidate(const uint64 Offset, const uint64 Size) override {} // no-op
24
25 virtual FIoBuffer Read(
26 const uint64 Offset,
27 const uint64 ReadSize,
29 ) override;
30
31 virtual void WriteAsync(
32 const uint64 Offset,
33 const void* Buffer,
34 const uint64 WriteSize
35 ) override;
36
37 private:
38 struct FWriteOp
39 {
40 uint64 OffsetInFile;
42 uint8* Data;
43 };
44
45 struct FWriteQueue
46 {
47 static constexpr uint32 MaxOpCount = 1 * 1024;
48 static constexpr uint32 MaxDataSize = 16 * 1024 * 1024;
49
50 TArray<FWriteOp, TInlineAllocator<MaxOpCount * sizeof(FWriteOp)>> Operations;
52
53 bool CanStore(const uint64 Size) const
54 {
55 return Data.Num() + Size <= MaxDataSize;
56 }
57 bool Write(const uint64 OffsetInFile, const void* Buffer, const uint64 Size);
58 void Empty()
59 {
60 Operations.Empty();
61 Data.Empty();
62 }
63 };
64
65 class FDoubleBuffer
66 {
67 public:
68 FDoubleBuffer()
69 : Front(&Queue1)
70 , Back(&Queue2)
71 {}
72
73 FWriteQueue* GetFront() const {return Front;}
74 FWriteQueue* GetBack() const {return Back;}
75
76 void Flip()
77 {
78 if (Front == &Queue1)
79 {
80 Front = &Queue2;
81 Back = &Queue1;
82 }
83 else
84 {
85 Front = &Queue1;
86 Back = &Queue2;
87 }
88 }
89
90 private:
91 FWriteQueue Queue1;
92 FWriteQueue Queue2;
93 FWriteQueue* Front;
94 FWriteQueue* Back;
95 };
96
97 UE::Tasks::TTask<void> FlushTask;
99 FDoubleBuffer Buffers;
100 FCriticalSection FrontLock, BackLock, FileWriteLock;
101 uint64 FileSize;
102
103 void Flush(bool bLazy);
104 void BackingReadAt(const uint64 Offset, void* Buffer, const uint64 Size);
105 void BackingWriteAt(const uint64 Offset, const void* Buffer, const uint64 Size);
106 };
107}
108
109#endif
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IoBuffer.h:15
Definition CacheStorageBlocking.h:14
virtual ~FCacheStorageBlocking() override
Definition CacheStorageBlocking.cpp:49
virtual void WriteAsync(const uint64 Offset, const void *Buffer, const uint64 WriteSize) override
Definition CacheStorageBlocking.cpp:74
virtual void Flush() override
Definition CacheStorageBlocking.cpp:54
virtual void Invalidate(const uint64 Offset, const uint64 Size) override
Definition CacheStorageBlocking.h:23
virtual uint64 GetSize() const override
Definition CacheStorageBlocking.cpp:60
Definition CacheStorage.h:18
Definition Array.h:670
Definition ContainerAllocationPolicies.h:894
Definition Task.h:191
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
Definition CacheJournal.h:15
@ Front
Definition GeoEnum.h:84
@ Back
Definition GeoEnum.h:83
Definition Optional.h:131