UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CacheStrategy.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CacheJournal.h"
6#include "CacheStorage.h"
8#include "Containers/Ticker.h"
9
10#if !UE_BUILD_SHIPPING
11
12namespace StorageServer
13{
15 {
16 public:
20 {
21 ensure(Journal.IsValid());
22 ensure(Storage.IsValid());
23
24 if (FlushInterval > 0.0f)
25 {
26 FlushTicker = FTSTicker::GetCoreTicker().AddTicker(FTickerDelegate::CreateRaw(this, &ICacheStrategy::FlushTick), FlushInterval);
27 }
28 else
29 {
31 }
32 }
33
35 {
36 if (FlushTicker.IsValid())
37 {
40 }
41 }
42
43 virtual void Invalidate(const FIoChunkId& ChunkId) = 0;
44
45 virtual void CacheChunkSize(const FIoChunkId& ChunkId, const int64 RawSize)
46 {
47 Journal->SetChunkInfo(ChunkId, TOptional<uint64>(), RawSize, TOptional<int32>());
48 }
49
50 virtual bool TryGetChunkSize(const FIoChunkId& ChunkId, int64& OutRawSize)
51 {
53 if (Journal->TryGetChunkInfo(ChunkId, ChunkInfo))
54 {
55 if (ChunkInfo.RawSize.IsSet())
56 {
58 return true;
59 }
60 else
61 {
62 return false;
63 }
64 }
65 else
66 {
67 return false;
68 }
69 }
70
71 virtual bool ReadChunk(
74 const uint64 RequestSize,
76 FIoBuffer& OutBuffer,
78 ) = 0;
79
80 // TODO cache individual chunk blocks.
81 // In case if ResultContentType is CompressedBinary the ResultBuffer will contain 1 or more chunk blocks,
82 // we can cache them individually with corresponding block offset and block size,
83 // such as if a follow-up ReadChunk request comes in that maps to the same block (but not same offset/size that was used in first request),
84 // it would still be fulfilled from cache.
85 // This requires unpacking of CompressedBinary and reconstructing its header for each individual chunk block.
86 virtual void CacheChunk(
90 const FIoBuffer& ResultBuffer,
93 ) = 0;
94
95 virtual void Flush()
96 {
97 Journal->Flush(false);
98 Storage->Flush();
99 }
100
101 virtual void IterateChunkIds(TFunctionRef<void(const FIoChunkId& ChunkId, const FCacheChunkInfo& ChunkInfo)> Callback)
102 {
103 Journal->IterateChunkIds(Callback);
104 }
105
106 protected:
110
111 bool FlushTick(float DeltaTime)
112 {
113 Flush();
114 return true;
115 }
116 };
117}
118
119#endif
#define ensure( InExpression)
Definition AssertionMacros.h:464
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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
EStorageServerContentType
Definition StorageServerHttpClient.h:13
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition IoBuffer.h:15
Definition IoChunkId.h:64
static CORE_API void RemoveTicker(FDelegateHandle Handle)
Definition Ticker.cpp:39
static CORE_API FTSTicker & GetCoreTicker()
Definition Ticker.cpp:8
CORE_API FDelegateHandle AddTicker(const FTickerDelegate &InDelegate, float InDelay=0.0f)
Definition Ticker.cpp:14
Definition CacheStrategy.h:15
virtual void IterateChunkIds(TFunctionRef< void(const FIoChunkId &ChunkId, const FCacheChunkInfo &ChunkInfo)> Callback)
Definition CacheStrategy.h:101
virtual void CacheChunkSize(const FIoChunkId &ChunkId, const int64 RawSize)
Definition CacheStrategy.h:45
TUniquePtr< ICacheJournal > Journal
Definition CacheStrategy.h:107
ICacheStrategy(TUniquePtr< ICacheJournal > &&InJournal, TUniquePtr< ICacheStorage > &&InStorage, const float FlushInterval)
Definition CacheStrategy.h:17
virtual bool ReadChunk(const FIoChunkId &RequestChunkId, const uint64 RequestOffset, const uint64 RequestSize, TOptional< FIoBuffer > OptDestination, FIoBuffer &OutBuffer, EStorageServerContentType &OutContentType)=0
TUniquePtr< ICacheStorage > Storage
Definition CacheStrategy.h:108
virtual void Flush()
Definition CacheStrategy.h:95
bool FlushTick(float DeltaTime)
Definition CacheStrategy.h:111
virtual ~ICacheStrategy()
Definition CacheStrategy.h:34
virtual void Invalidate(const FIoChunkId &ChunkId)=0
virtual void CacheChunk(const FIoChunkId &RequestChunkId, const uint64 RequestRawOffset, const uint64 RequestRawSize, const FIoBuffer &ResultBuffer, const EStorageServerContentType ResultContentType, const uint64 ResultModTag)=0
FTSTicker::FDelegateHandle FlushTicker
Definition CacheStrategy.h:109
virtual bool TryGetChunkSize(const FIoChunkId &ChunkId, int64 &OutRawSize)
Definition CacheStrategy.h:50
Definition AssetRegistryState.h:50
Definition UniquePtr.h:107
UE_FORCEINLINE_HINT bool IsValid() const
Definition SharedPointer.h:1535
UE_FORCEINLINE_HINT void Reset()
Definition SharedPointer.h:1544
Definition CacheJournal.h:15
Definition CacheJournal.h:17
TOptional< int64 > RawSize
Definition CacheJournal.h:19
Definition Optional.h:131