UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IoDispatcherFileBackendTypes.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "IO/IoAllocators.h"
6#include "IO/IoStore.h"
11
12#ifndef PLATFORM_IMPLEMENTS_IO
13#define PLATFORM_IMPLEMENTS_IO 0
14#endif
15
16#ifndef PLATFORM_IODISPATCHER_MODULE
17#define PLATFORM_IODISPATCHER_MODULE PREPROCESSOR_TO_STRING(PREPROCESSOR_JOIN(PLATFORM_HEADER_NAME, PlatformIoDispatcher))
18#endif
19
20#define UE_FILEIOSTORE_STATS_ENABLED (COUNTERSTRACE_ENABLED || CSV_PROFILER_STATS)
21
23
40
69
71{
73 uint8* Memory = nullptr;
74};
75
77{
78 union
79 {
80 struct
81 {
84 };
86 };
87
88
90 {
91 return A.Hash == B.Hash;
92 }
93
95 {
96 return GetTypeHash(Key.Hash);
97 }
98};
99
107
129
131{
139
141 : Sequence(NextSequence++)
142 , CreationTime(FPlatformTime::Cycles64())
143 {
144 }
157 uint64 CreationTime; // Potentially used to circuit break request ordering optimizations when outstanding requests have been delayed too long
160 bool bIsCustomRequest = false;
161 bool bFailed = false;
162 bool bCancelled = false;
164
165#if DO_CHECK
166 // For debug checks that we are in the correct owning list for our intrusive next/previous pointers
167 uint32 ListCookie = 0;
168#endif
169
170private:
171 static PAKFILE_API uint32 NextSequence;
172};
173
174#define CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP (DO_CHECK && 0)
175// Iterator class for traversing and emptying a list FFileIoStoreReadRequestList at the same time
177{
178public:
181
183 {
184 Current = Other.Current;
185 Next = Other.Next;
186
187 Other.Current = Other.Next = nullptr;
188 }
189
191 {
192 Current = Other.Current;
193 Next = Other.Next;
194
195 Other.Current = Other.Next = nullptr;
196
197 return *this;
198 }
199
201 {
202 AdvanceTo(Next);
203 }
204
206 {
207 return Current;
208 }
209
211 {
212 return Current;
213 }
214
215 explicit operator bool() const
216 {
217 return Current != nullptr;
218 }
219
220private:
221 friend class FFileIoStoreReadRequestList; // Only the list can construct us
222
224 {
225#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
226 // None of these nodes are members of the list any more
227 for (FFileIoStoreReadRequest* Cursor = InHead; Cursor; Cursor = Cursor->Next)
228 {
229 Cursor->ListCookie = 0;
230 }
231#endif
232
233 AdvanceTo(InHead);
234 }
235
236 void AdvanceTo(FFileIoStoreReadRequest* NewCurrent)
237 {
239 if (Current)
240 {
241 // Copy off the next ptr and remove Current from its list so it can safely be added to another list
242 Next = Current->Next;
243 Current->Next = nullptr;
244 }
245 else
246 {
247 Next = nullptr;
248 }
249 }
250
252 FFileIoStoreReadRequest* Next = nullptr;;
253};
254
256{
257public:
260
262 {
263 checkf(Current->Next == Next, TEXT("FFileIoStoreReadRequestListIterator cached Next pointer != Current->Next - was list modified during iteration?"));
264 AdvanceTo(Next);
265 }
266
268 {
269 return Current;
270 }
271
273 {
274 return Current;
275 }
276
277 explicit operator bool() const
278 {
279 return Current != nullptr;
280 }
281
283 {
284 return Current != Other.Current;
285 }
286
287private:
288 friend class FFileIoStoreReadRequestList; // Only the list can construct us
289
291 {
292 AdvanceTo(InHead);
293 }
294
295 void AdvanceTo(FFileIoStoreReadRequest* NewCurrent)
296 {
298
299 if (Current)
300 {
301 // Copy off the next ptr to check for edits made to this list during iteration
302 Next = Current->Next;
303 }
304 else
305 {
306 Next = nullptr;
307 }
308 }
309
311 FFileIoStoreReadRequest* Next = nullptr;
312};
313
314
315// Wrapper for doubly-linked intrusive list of FFileIoStoreReadRequest
316
318{
319public:
321#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
323#endif
324 {
325 }
326
327 // Owns the Next/Previous pointers of the FFileIoStoreReadRequests it contains so it can't be copied
330
332 {
333 Head = Other.Head;
334 Tail = Other.Tail;
335 Other.Head = Other.Tail = nullptr;
336
337#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
338 for (FFileIoStoreReadRequest* Cursor = Head; Cursor; Cursor = Cursor->Next)
339 {
340 Cursor->ListCookie = ListCookie;
341 }
342#endif
343 }
344
346 {
347 check(!Head && !Tail);
348
349 Head = Other.Head;
350 Tail = Other.Tail;
351 Other.Head = Other.Tail = nullptr;
352
353#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
354 for (FFileIoStoreReadRequest* Cursor = Head; Cursor; Cursor = Cursor->Next)
355 {
356 Cursor->ListCookie = ListCookie;
357 }
358#endif
359
360 return *this;
361 }
362
363#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
365 {
366 // If anything is left in this list it should still think we own it
367 for (FFileIoStoreReadRequest* Cursor = Head; Cursor; Cursor = Cursor->Next)
368 {
369 check(Cursor->ListCookie == ListCookie);
370 }
371 }
372#endif
373
374 bool IsEmpty() const
375 {
376 return Head == nullptr;
377 }
378
379 // Steal the whole list for iteration and moving the contents to other lists
381 {
382#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
383 for (FFileIoStoreReadRequest* Cursor = Head; Cursor; Cursor = Cursor->Next)
384 {
385 check(Cursor->ListCookie == ListCookie);
386 }
387#endif
388
390 Clear();
392 }
393
394 // Non-stealing iterator
399
406
408 {
409 return Head;
410 }
411
413 {
414#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
415 check(Request->ListCookie == 0);
416 Request->ListCookie = ListCookie;
417#endif
418
419 if (Tail)
420 {
421 Tail->Next = Request;
422 Request->Previous = Tail;
423 }
424 else
425 {
426 Head = Request;
427 Request->Previous = nullptr;
428 }
429 Tail = Request;
430 Request->Next = nullptr;
431 }
432
433
434 // Remove all FFileIoStoreReadRequests from List and add them to this list
436 {
437 if (List.Head)
438 {
439 FFileIoStoreReadRequest *ListHead = List.Head, *ListTail = List.Tail;
440 List.Clear();
441 AppendSteal(ListHead, ListTail);
442 }
443 }
444
446 {
447#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
448 check(Request);
449 check(Request->ListCookie == ListCookie);
450 Request->ListCookie = 0;
451#endif
452
453 if (Head == Request && Tail == Request)
454 {
455 check(Request->Next == nullptr);
456 check(Request->Previous == nullptr);
457
458 Head = Tail = nullptr;
459 }
460 else if (Head == Request)
461 {
462 check(Request->Previous == nullptr);
463
464 Head = Request->Next;
465 Head->Previous = nullptr;
466 Request->Next = nullptr;
467 }
468 else if (Tail == Request)
469 {
470 check(Request->Next == nullptr);
471
472 Tail = Request->Previous;
473 Tail->Next = nullptr;
474 Request->Previous = nullptr;
475 }
476 else
477 {
478 check(Request->Next != nullptr && Request->Previous != nullptr); // Neither head nor tail should mean both links are live
479
480 Request->Next->Previous = Request->Previous;
481 Request->Previous->Next = Request->Next;
482
483 Request->Next = Request->Previous = nullptr;
484 }
485 }
486
487 void Clear()
488 {
489#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
490 for (FFileIoStoreReadRequest* Cursor = Head; Cursor; Cursor = Cursor->Next)
491 {
492 check(Cursor->ListCookie == ListCookie);
493 Cursor->ListCookie = 0;
494 }
495#endif
496 Head = Tail = nullptr;
497 }
498
499private:
500 FFileIoStoreReadRequest* Head = nullptr;
501 FFileIoStoreReadRequest* Tail = nullptr;
502
503#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
506#endif
507
509 {
510 check(ListHead);
511 check(ListTail);
512 check(!ListTail->Next);
513 check(!ListHead->Previous);
514 check(ListTail == ListHead || ListTail->Previous != nullptr);
515 check(ListTail == ListHead || ListHead->Next != nullptr);
516
517#if CHECK_IO_STORE_READ_REQUEST_LIST_MEMBERSHIP
518 for (FFileIoStoreReadRequest* Cursor = ListHead; Cursor; Cursor = Cursor->Next)
519 {
520 check(Cursor->ListCookie == 0);
521 Cursor->ListCookie = ListCookie;
522 }
523#endif
524
525 if (Tail)
526 {
527 Tail->Next = ListHead;
528 ListHead->Previous = Tail;
529 }
530 else
531 {
532 Head = ListHead;
533 ListHead->Previous = nullptr;
534 }
535 Tail = ListTail;
536 }
537};
538
540
542{
543public:
548
549 PAKFILE_API void Initialize(uint64 MemorySize, uint64 BufferSize, uint32 BufferAlignment);
552 uint64 GetBufferSize() const { return BufferSize; }
553
554private:
555 FFileIoStoreStats& Stats;
556 uint64 BufferSize = 0;
557 uint8* BufferMemory = nullptr;
558 FCriticalSection BuffersCritical;
559 FFileIoStoreBuffer* FirstFreeBuffer = nullptr;
560};
561
563{
564public:
567
568 PAKFILE_API void Initialize(uint64 CacheMemorySize, uint64 ReadBufferSize);
571
572private:
573 struct FCachedBlock
574 {
575 FCachedBlock* LruPrev = nullptr;
576 FCachedBlock* LruNext = nullptr;
577 uint64 Key = 0;
578 uint8* Buffer = nullptr;
579 };
580
581 FFileIoStoreStats& Stats;
582 uint8* CacheMemory = nullptr;
583 TMap<uint64, FCachedBlock*> CachedBlocks;
584 FCachedBlock CacheLruHead;
585 FCachedBlock CacheLruTail;
586 uint64 ReadBufferSize = 0;
587};
588
590{
594
597 : Offset(Request->Offset), Handle(Request->ContainerFilePartition->FileHandle), Priority(Request->Priority)
598 {
599 }
600};
601
602// Stores FFileIoStoreReadRequest sorted by file handle & offset with a parallel list sorted by insertion order
604{
605public:
611
612 int32 GetPriority() const { return Priority; }
613 bool IsEmpty() const { return Requests.Num() == 0; }
614
615 // Remove all requests from this container and return them, for switching to a different queue scheme
617 // Remove all requests whose priority has been changed to something other than the Priority of this queue
620
624
625private:
626 int32 Priority;
627 int32 PeekRequestIndex = INDEX_NONE;
628
629 // Requests sorted by file handle & offset
631
632 // Requests sorted by insertion order
633 // We store this on the heap in case we get moved, FFileIoStoreReadRequest keeps pointers to FFileIoStoreReadRequestList for debugging
634 FFileIoStoreReadRequestList RequestsBySequence;
635
636 PAKFILE_API FFileIoStoreReadRequest* GetNextInternal(FFileIoStoreReadRequestSortKey LastSortKey, bool bPop);
637
638 static FFileIoStoreReadRequestSortKey RequestSortProjection(FFileIoStoreReadRequest* Request) { return FFileIoStoreReadRequestSortKey(Request); }
639 static PAKFILE_API bool RequestSortPredicate(const FFileIoStoreReadRequestSortKey& A, const FFileIoStoreReadRequestSortKey& B);
640};
641
643{
644public:
647 PAKFILE_API void Push(FFileIoStoreReadRequest& Request); // Takes ownership of Request and rewrites its intrustive linked list pointers
648 PAKFILE_API void Push(FFileIoStoreReadRequestList& Requests); // Consumes the request list and overwrites all intrustive linked list pointers
650 PAKFILE_API void Lock();
651 PAKFILE_API void Unlock();
653
654private:
655 static bool QueueSortFunc(const FFileIoStoreReadRequest& A, const FFileIoStoreReadRequest& B)
656 {
657 if (A.Priority == B.Priority)
658 {
659 return A.Sequence < B.Sequence;
660 }
661 return A.Priority > B.Priority;
662 }
663 void UpdateSortRequestsByOffset(); // Check if we need to switch sorting schemes based on the CVar
664 void PushToPriorityQueues(FFileIoStoreReadRequest* Request);
665 static int32 QueuePriorityProjection(const FFileIoStoreOffsetSortedRequestQueue& A) { return A.GetPriority(); }
666
667 bool bSortRequestsByOffset = false; // Cached value of CVar controlling whether we use Heap or SortedPriorityQueues
668
669 // Heap sorted by request order
671 FCriticalSection CriticalSection;
672
673 // Queues sorted by increasing priority
675 // The last offset, file handle and priority we popped so that we can pop the closest forward read for the next IO operation
677
678#if !UE_BUILD_SHIPPING
679 TMap<int32, uint32> RequestPriorityCounts;
680#endif
681};
682
683template <typename T, uint16 SlabSize = 4096>
685
696
698{
699public:
701 {
702 return LiveReadRequestsCount;
703 }
704
705
720
722 {
723 ResolvedRequestAllocator.Destroy(ResolvedRequest);
724 }
725
727 {
728 //TRACE_CPUPROFILER_EVENT_SCOPE(AllocReadRequest);
729 ++LiveReadRequestsCount;
730 return ReadRequestAllocator.Construct();
731 }
732
733 void Free(FFileIoStoreReadRequest* ReadRequest)
734 {
735 //TRACE_CPUPROFILER_EVENT_SCOPE(FreeReadRequest);
736 ReadRequestAllocator.Destroy(ReadRequest);
737 --LiveReadRequestsCount;
738 }
739
741 {
742 //TRACE_CPUPROFILER_EVENT_SCOPE(AllocCompressedBlock);
743 return CompressedBlockAllocator.Construct();
744 }
745
746 void Free(FFileIoStoreCompressedBlock* CompressedBlock)
747 {
748 //TRACE_CPUPROFILER_EVENT_SCOPE(FreeCompressedBlock);
749 CompressedBlockAllocator.Destroy(CompressedBlock);
750 }
751
753 {
754 check(ReadRequest);
755 return RequestLinkAllocator.Construct(*ReadRequest);
756 }
757
759 {
760 RequestLinkAllocator.Destroy(RequestLink);
761 }
762
763private:
768 int64 LiveReadRequestsCount = 0;
769};
770
772{
773public:
780
782 {
783 return ContainerFile;
784 }
785
787 {
788 return ContainerFile;
789 }
790
792 {
793 return ResolvedOffset;
794 }
795
797 {
798 return ResolvedSize;
799 }
800
802 {
803 return Priority;
804 }
805
806 bool HasBuffer() const
807 {
808 check(DispatcherRequest);
809 return DispatcherRequest->HasBuffer();
810 }
811
813 {
814 check(DispatcherRequest);
815 DispatcherRequest->CreateBuffer(Size);
816 }
817
819 {
820 check(DispatcherRequest);
821 return DispatcherRequest->GetBuffer();
822 }
823
825
826private:
827 FIoRequestImpl* DispatcherRequest = nullptr;
828 FFileIoStoreContainerFile* ContainerFile;
829 FFileIoStoreReadRequestLink* ReadRequestsHead = nullptr;
830 FFileIoStoreReadRequestLink* ReadRequestsTail = nullptr;
831 const uint64 ResolvedOffset;
832 const uint64 ResolvedSize;
833 int32 Priority = 0;
834 uint32 UnfinishedReadsCount = 0;
835 bool bFailed = false;
836 bool bCancelled = false;
837
838 friend class FFileIoStore;
840};
841
842
843// Wrapper for sending stats to both insights and csv profiling from any platform-specific dispatcher.
844#if UE_FILEIOSTORE_STATS_ENABLED
846{
847public:
850
851 // Called by the backend when underlying file system reads start
854 // Called by the backend when underlying filesystem reads complete, possibly already decompressed on some systems
857
858private:
859 friend class FFileIoStore;
860 friend class FFileIoStoreBlockCache;
861 friend class FFileIoStoreReader;
862 friend class FFileIoStoreBufferAllocator;
863
864 PAKFILE_API void OnReadRequestsQueued(const FFileIoStoreReadRequestList& Requests);
865 PAKFILE_API void OnReadRequestsCompleted(const FFileIoStoreReadRequestList& Requests);
866 PAKFILE_API void OnDecompressQueued(const FFileIoStoreCompressedBlock* CompressedBlock);
867 PAKFILE_API void OnDecompressComplete(const FFileIoStoreCompressedBlock* CompressedBlock);
868
869 // Bytes were copied into the buffer provided to users of the io system
870 PAKFILE_API void OnBytesScattered(int64 BytesScattered);
871 // Record stats for block cache hit/miss rate & data throughput
872 PAKFILE_API void OnBlockCacheStore(uint64 NumBytes);
873 PAKFILE_API void OnBlockCacheHit(uint64 NumBytes);
874 PAKFILE_API void OnBlockCacheMiss(uint64 NumBytes);
875
876 // A read was started without seeking
877 PAKFILE_API void OnSequentialRead();
878 // A read was started and was either a forward or reverse seek
879 PAKFILE_API void OnSeek(uint64 LastOffset, uint64 NewOffset);
880 // A read was started from a different file handle from the last one we used
881 PAKFILE_API void OnHandleChangeSeek();
882
883 PAKFILE_API void OnTocMounted(uint64 AllocatedSize);
884 PAKFILE_API void OnTocUnmounted(uint64 AllocatedSize);
885
886 PAKFILE_API void OnBufferReleased();
887 PAKFILE_API void OnBufferAllocated();
888
890};
891#else
893{
894public:
899
900private:
901 friend class FFileIoStore;
903 friend class FFileIoStoreReader;
905
906 void OnReadRequestsQueued(const FFileIoStoreReadRequestList& Requests) {}
907 void OnReadRequestsCompleted(const FFileIoStoreReadRequestList& Requests) {}
908 void OnDecompressQueued(const FFileIoStoreCompressedBlock* CompressedBlock) {}
909 void OnDecompressComplete(const FFileIoStoreCompressedBlock* CompressedBlock) {}
910 void OnBytesScattered(int64 BytesScattered) {}
911 void OnBlockCacheStore(uint64 NumBytes) {}
912 void OnBlockCacheHit(uint64 NumBytes) {}
913 void OnBlockCacheMiss(uint64 NumBytes) {}
914 void OnTocMounted(uint64 AllocatedSize) {}
915 void OnTocUnmounted(uint64 AllocatedSize) {}
916 void OnBufferReleased() {}
917 void OnBufferAllocated() {}
918};
919#endif
920
929
946
952
953#if PLATFORM_IMPLEMENTS_IO
954PAKFILE_API TUniquePtr<IPlatformFileIoStore> CreatePlatformFileIoStore();
955#endif
956
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
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
EIoContainerFlags
Definition IoDispatcher.h:480
const bool
Definition NetworkReplayStreaming.h:178
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 IoDispatcherFileBackendTypes.h:563
PAKFILE_API void Store(const FFileIoStoreReadRequest *Block)
Definition IoDispatcherFileBackend.cpp:175
PAKFILE_API ~FFileIoStoreBlockCache()
Definition IoDispatcherFileBackend.cpp:110
Definition IoDispatcherFileBackendTypes.h:542
uint64 GetBufferSize() const
Definition IoDispatcherFileBackendTypes.h:552
PAKFILE_API void FreeBuffer(FFileIoStoreBuffer *Buffer)
Definition IoDispatcherFileBackend.cpp:92
FFileIoStoreBufferAllocator(FFileIoStoreStats &InStats)
Definition IoDispatcherFileBackendTypes.h:544
PAKFILE_API FFileIoStoreBuffer * AllocBuffer()
Definition IoDispatcherFileBackend.cpp:76
Definition IoDispatcherFileBackendTypes.h:604
PAKFILE_API int32 HandleContainerUnmounted(const FFileIoStoreContainerFile &ContainerFile)
Definition IoDispatcherFileBackend.cpp:390
FFileIoStoreOffsetSortedRequestQueue(FFileIoStoreOffsetSortedRequestQueue &&)=default
PAKFILE_API FFileIoStoreReadRequest * Pop(FFileIoStoreReadRequestSortKey LastSortKey)
Definition IoDispatcherFileBackend.cpp:351
PAKFILE_API TArray< FFileIoStoreReadRequest * > RemoveMisprioritizedRequests()
Definition IoDispatcherFileBackend.cpp:237
FFileIoStoreOffsetSortedRequestQueue & operator=(FFileIoStoreOffsetSortedRequestQueue &&)=default
FFileIoStoreOffsetSortedRequestQueue(const FFileIoStoreOffsetSortedRequestQueue &)=delete
PAKFILE_API TArray< FFileIoStoreReadRequest * > StealRequests()
Definition IoDispatcherFileBackend.cpp:229
FFileIoStoreOffsetSortedRequestQueue & operator=(const FFileIoStoreOffsetSortedRequestQueue &)=delete
PAKFILE_API void RemoveCancelledRequests(TArray< FFileIoStoreReadRequest * > &OutCancelled)
Definition IoDispatcherFileBackend.cpp:254
PAKFILE_API void Push(FFileIoStoreReadRequest *Request)
Definition IoDispatcherFileBackend.cpp:356
int32 GetPriority() const
Definition IoDispatcherFileBackendTypes.h:612
bool IsEmpty() const
Definition IoDispatcherFileBackendTypes.h:613
Definition IoDispatcherFileBackendTypes.h:256
FFileIoStoreReadRequestListIterator(const FFileIoStoreReadRequestListIterator &)=default
FFileIoStoreReadRequest * operator*()
Definition IoDispatcherFileBackendTypes.h:267
bool operator!=(const FFileIoStoreReadRequestListIterator &Other) const
Definition IoDispatcherFileBackendTypes.h:282
void operator++()
Definition IoDispatcherFileBackendTypes.h:261
FFileIoStoreReadRequestListIterator & operator=(const FFileIoStoreReadRequestListIterator &)=default
FFileIoStoreReadRequest * operator->()
Definition IoDispatcherFileBackendTypes.h:272
Definition IoDispatcherFileBackendTypes.h:177
FFileIoStoreReadRequestListStealingIterator & operator=(FFileIoStoreReadRequestListStealingIterator &&Other)
Definition IoDispatcherFileBackendTypes.h:190
FFileIoStoreReadRequestListStealingIterator & operator=(const FFileIoStoreReadRequestListStealingIterator &)=delete
FFileIoStoreReadRequestListStealingIterator(const FFileIoStoreReadRequestListStealingIterator &)=delete
FFileIoStoreReadRequestListStealingIterator(FFileIoStoreReadRequestListStealingIterator &&Other)
Definition IoDispatcherFileBackendTypes.h:182
FFileIoStoreReadRequest * operator*()
Definition IoDispatcherFileBackendTypes.h:205
void operator++()
Definition IoDispatcherFileBackendTypes.h:200
FFileIoStoreReadRequest * operator->()
Definition IoDispatcherFileBackendTypes.h:210
Definition IoDispatcherFileBackendTypes.h:318
FFileIoStoreReadRequestList(FFileIoStoreReadRequestList &&Other)
Definition IoDispatcherFileBackendTypes.h:331
void Add(FFileIoStoreReadRequest *Request)
Definition IoDispatcherFileBackendTypes.h:412
FFileIoStoreReadRequestListIterator CreateIterator() const
Definition IoDispatcherFileBackendTypes.h:395
FFileIoStoreReadRequestList(const FFileIoStoreReadRequestList &Other)=delete
FFileIoStoreReadRequestList & operator=(FFileIoStoreReadRequestList &&Other)
Definition IoDispatcherFileBackendTypes.h:345
FFileIoStoreReadRequestList & operator=(const FFileIoStoreReadRequestList &Other)=delete
void Remove(FFileIoStoreReadRequest *Request)
Definition IoDispatcherFileBackendTypes.h:445
void AppendSteal(FFileIoStoreReadRequestList &List)
Definition IoDispatcherFileBackendTypes.h:435
FFileIoStoreReadRequestListStealingIterator Steal()
Definition IoDispatcherFileBackendTypes.h:380
void Clear()
Definition IoDispatcherFileBackendTypes.h:487
bool IsEmpty() const
Definition IoDispatcherFileBackendTypes.h:374
FFileIoStoreReadRequestList()
Definition IoDispatcherFileBackendTypes.h:320
FFileIoStoreReadRequest * PeekHead() const
Definition IoDispatcherFileBackendTypes.h:407
FFileIoStoreReadRequestListIterator end() const
Definition IoDispatcherFileBackendTypes.h:403
FFileIoStoreReadRequestListIterator begin() const
Definition IoDispatcherFileBackendTypes.h:400
Definition IoDispatcherFileBackend.h:29
Definition IoDispatcherFileBackendTypes.h:698
FFileIoStoreReadRequest * AllocReadRequest()
Definition IoDispatcherFileBackendTypes.h:726
FFileIoStoreResolvedRequest * AllocResolvedRequest(FIoRequestImpl &InDispatcherRequest, FFileIoStoreContainerFile *InContainerFile, uint64 InResolvedOffset, uint64 InResolvedSize, int32 InPriority)
Definition IoDispatcherFileBackendTypes.h:706
void Free(FFileIoStoreResolvedRequest *ResolvedRequest)
Definition IoDispatcherFileBackendTypes.h:721
void Free(FFileIoStoreCompressedBlock *CompressedBlock)
Definition IoDispatcherFileBackendTypes.h:746
int64 GetLiveReadRequestsCount() const
Definition IoDispatcherFileBackendTypes.h:700
void Free(FFileIoStoreReadRequest *ReadRequest)
Definition IoDispatcherFileBackendTypes.h:733
FFileIoStoreCompressedBlock * AllocCompressedBlock()
Definition IoDispatcherFileBackendTypes.h:740
FFileIoStoreReadRequestLink * AllocRequestLink(FFileIoStoreReadRequest *ReadRequest)
Definition IoDispatcherFileBackendTypes.h:752
void Free(FFileIoStoreReadRequestLink *RequestLink)
Definition IoDispatcherFileBackendTypes.h:758
Definition IoDispatcherFileBackendTypes.h:643
PAKFILE_API FFileIoStoreReadRequest * Pop()
Definition IoDispatcherFileBackend.cpp:431
PAKFILE_API void Unlock()
Definition IoDispatcherFileBackend.cpp:606
PAKFILE_API void Push(FFileIoStoreReadRequest &Request)
Definition IoDispatcherFileBackend.cpp:531
PAKFILE_API void Lock()
Definition IoDispatcherFileBackend.cpp:601
PAKFILE_API void PopCancelled(TArray< FFileIoStoreReadRequest * > &OutCancelled)
Definition IoDispatcherFileBackend.cpp:473
PAKFILE_API int32 HandleContainerUnmounted(const FFileIoStoreContainerFile &ContainerFile)
Definition IoDispatcherFileBackend.cpp:611
PAKFILE_API void UpdateOrder()
Definition IoDispatcherFileBackend.cpp:572
Definition IoDispatcherFileBackend.h:83
Definition IoDispatcherFileBackendTypes.h:893
void OnFilesystemReadStarted(const FFileIoStoreReadRequest *Request)
Definition IoDispatcherFileBackendTypes.h:895
void OnFilesystemReadsCompleted(const FFileIoStoreReadRequestList &CompletedRequests)
Definition IoDispatcherFileBackendTypes.h:898
void OnFilesystemReadCompleted(const FFileIoStoreReadRequest *Request)
Definition IoDispatcherFileBackendTypes.h:897
void OnFilesystemReadsStarted(const FFileIoStoreReadRequestList &Requests)
Definition IoDispatcherFileBackendTypes.h:896
Definition IoDispatcherFileBackend.h:109
Definition IoBuffer.h:15
Definition IoDispatcherBackend.h:23
bool HasBuffer() const
Definition IoDispatcherBackend.h:74
CORE_API void CreateBuffer(uint64 Size)
Definition IoDispatcher.cpp:1194
FIoBuffer & GetBuffer()
Definition IoDispatcherBackend.h:83
Definition NameTypes.h:617
Definition SecureHash.h:226
Definition ModuleInterface.h:14
Definition IoDispatcherFileBackendTypes.h:948
virtual TUniquePtr< IPlatformFileIoStore > CreatePlatformFileIoStore()=0
Definition IoDispatcherFileBackendTypes.h:931
virtual bool StartRequests(FFileIoStoreRequestQueue &RequestQueue)=0
virtual void CloseContainer(uint64 ContainerFileHandle)=0
virtual bool CreateCustomRequests(FFileIoStoreResolvedRequest &ResolvedRequest, FFileIoStoreReadRequestList &OutRequests)=0
virtual ~IPlatformFileIoStore()=default
virtual void ServiceNotify()=0
virtual void ServiceWait()=0
virtual void Initialize(const FInitializePlatformFileIoStoreParams &Params)=0
virtual bool OpenContainer(const TCHAR *ContainerFilePath, uint64 &ContainerFileHandle, uint64 &ContainerFileSize)=0
virtual void GetCompletedRequests(FFileIoStoreReadRequestList &OutRequests)=0
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition UnrealString.h.inl:34
Definition IoAllocators.h:10
Definition UniquePtr.h:107
Definition IoDispatcherFilesystemStats.h:79
Definition AES.h:27
Definition AndroidPlatformTime.h:18
Definition IoDispatcherFileBackendTypes.h:77
uint32 BlockIndex
Definition IoDispatcherFileBackendTypes.h:83
friend bool operator==(const FFileIoStoreBlockKey &A, const FFileIoStoreBlockKey &B)
Definition IoDispatcherFileBackendTypes.h:89
friend uint32 GetTypeHash(const FFileIoStoreBlockKey &Key)
Definition IoDispatcherFileBackendTypes.h:94
uint32 FileIndex
Definition IoDispatcherFileBackendTypes.h:82
uint64 Hash
Definition IoDispatcherFileBackendTypes.h:85
Definition IoDispatcherFileBackendTypes.h:101
struct FFileIoStoreResolvedRequest * Request
Definition IoDispatcherFileBackendTypes.h:102
uint64 Size
Definition IoDispatcherFileBackendTypes.h:105
uint64 SrcOffset
Definition IoDispatcherFileBackendTypes.h:104
uint64 DstOffset
Definition IoDispatcherFileBackendTypes.h:103
Definition IoDispatcherFileBackendTypes.h:71
uint8 * Memory
Definition IoDispatcherFileBackendTypes.h:73
FFileIoStoreBuffer * Next
Definition IoDispatcherFileBackendTypes.h:72
Definition IoDispatcherFileBackendTypes.h:109
bool bFailed
Definition IoDispatcherFileBackendTypes.h:126
uint32 UnfinishedRawBlocksCount
Definition IoDispatcherFileBackendTypes.h:118
TConstArrayView< FSHAHash > BlockSignatureTable
Definition IoDispatcherFileBackendTypes.h:124
TArray< FFileIoStoreBlockScatter, TInlineAllocator< 2 > > ScatterList
Definition IoDispatcherFileBackendTypes.h:120
uint32 CompressedSize
Definition IoDispatcherFileBackendTypes.h:115
uint32 RawSize
Definition IoDispatcherFileBackendTypes.h:116
FFileIoStoreBlockKey Key
Definition IoDispatcherFileBackendTypes.h:111
FName CompressionMethod
Definition IoDispatcherFileBackendTypes.h:112
FAES::FAESKey EncryptionKey
Definition IoDispatcherFileBackendTypes.h:123
uint8 * CompressedDataBuffer
Definition IoDispatcherFileBackendTypes.h:122
uint64 RawOffset
Definition IoDispatcherFileBackendTypes.h:113
bool bCancelled
Definition IoDispatcherFileBackendTypes.h:127
uint32 UncompressedSize
Definition IoDispatcherFileBackendTypes.h:114
const FSHAHash * SignatureHash
Definition IoDispatcherFileBackendTypes.h:125
TArray< struct FFileIoStoreReadRequest *, TInlineAllocator< 2 > > RawBlocks
Definition IoDispatcherFileBackendTypes.h:119
FFileIoStoreCompressionContext * CompressionContext
Definition IoDispatcherFileBackendTypes.h:121
uint32 RefCount
Definition IoDispatcherFileBackendTypes.h:117
FFileIoStoreCompressedBlock * Next
Definition IoDispatcherFileBackendTypes.h:110
Definition IoDispatcherFileBackend.h:22
Definition IoDispatcherFileBackendTypes.h:25
FString FilePath
Definition IoDispatcherFileBackendTypes.h:36
TUniquePtr< IMappedFileHandle > MappedFileHandle
Definition IoDispatcherFileBackendTypes.h:37
uint64 FileHandle
Definition IoDispatcherFileBackendTypes.h:33
uint32 ContainerFileIndex
Definition IoDispatcherFileBackendTypes.h:35
FFileIoStoreContainerFilePartition & operator=(const FFileIoStoreContainerFilePartition &)=delete
std::atomic< int32 > StartedReadRequestsCount
Definition IoDispatcherFileBackendTypes.h:38
FFileIoStoreContainerFilePartition(FFileIoStoreContainerFilePartition &&)=delete
FFileIoStoreContainerFilePartition & operator=(FFileIoStoreContainerFilePartition &&)=delete
uint64 FileSize
Definition IoDispatcherFileBackendTypes.h:34
FFileIoStoreContainerFilePartition(const FFileIoStoreContainerFilePartition &)=delete
Definition IoDispatcherFileBackendTypes.h:42
uint64 PartitionSize
Definition IoDispatcherFileBackendTypes.h:50
EIoContainerFlags ContainerFlags
Definition IoDispatcherFileBackendTypes.h:57
FFileIoStoreContainerFile()=default
TConstArrayView< FSHAHash > BlockSignatureTable
Definition IoDispatcherFileBackendTypes.h:58
void GetPartitionAndOffset(uint64 TocOffset, FFileIoStoreContainerFilePartition *&OutPartition, uint64 &OutOffset)
Definition IoDispatcherFileBackendTypes.h:62
FAES::FAESKey EncryptionKey
Definition IoDispatcherFileBackendTypes.h:56
FFileIoStoreContainerFile(const FFileIoStoreContainerFile &)=delete
uint64 CompressionBlockSize
Definition IoDispatcherFileBackendTypes.h:51
FGuid EncryptionKeyGuid
Definition IoDispatcherFileBackendTypes.h:55
TArray< FName > CompressionMethods
Definition IoDispatcherFileBackendTypes.h:52
FFileIoStoreContainerFile & operator=(const FFileIoStoreContainerFile &)=delete
uint32 ContainerInstanceId
Definition IoDispatcherFileBackendTypes.h:60
TArray< FFileIoStoreContainerFilePartition > Partitions
Definition IoDispatcherFileBackendTypes.h:59
FFileIoStoreContainerFile & operator=(FFileIoStoreContainerFile &&)=default
FFileIoStoreContainerFile(FFileIoStoreContainerFile &&)=default
TConstArrayView< FIoStoreTocCompressedBlockEntry > CompressionBlocks
Definition IoDispatcherFileBackendTypes.h:53
FString FilePath
Definition IoDispatcherFileBackendTypes.h:54
Definition IoDispatcherFileBackendTypes.h:590
uint64 Offset
Definition IoDispatcherFileBackendTypes.h:591
FFileIoStoreReadRequestSortKey(FFileIoStoreReadRequest *Request)
Definition IoDispatcherFileBackendTypes.h:596
uint64 Handle
Definition IoDispatcherFileBackendTypes.h:592
FFileIoStoreReadRequestSortKey()
Definition IoDispatcherFileBackendTypes.h:595
int32 Priority
Definition IoDispatcherFileBackendTypes.h:593
Definition IoDispatcherFileBackendTypes.h:131
FFileIoStoreBlockScatter ImmediateScatter
Definition IoDispatcherFileBackendTypes.h:158
bool bCancelled
Definition IoDispatcherFileBackendTypes.h:162
TArray< FFileIoStoreCompressedBlock *, TInlineAllocator< 8 > > CompressedBlocks
Definition IoDispatcherFileBackendTypes.h:154
uint32 BufferRefCount
Definition IoDispatcherFileBackendTypes.h:153
bool bFailed
Definition IoDispatcherFileBackendTypes.h:161
uint64 Size
Definition IoDispatcherFileBackendTypes.h:149
EQueueStatus
Definition IoDispatcherFileBackendTypes.h:133
@ QueueStatus_Started
Definition IoDispatcherFileBackendTypes.h:136
@ QueueStatus_Completed
Definition IoDispatcherFileBackendTypes.h:137
@ QueueStatus_NotInQueue
Definition IoDispatcherFileBackendTypes.h:134
@ QueueStatus_InQueue
Definition IoDispatcherFileBackendTypes.h:135
FFileIoStoreContainerFilePartition * ContainerFilePartition
Definition IoDispatcherFileBackendTypes.h:147
uint64 Offset
Definition IoDispatcherFileBackendTypes.h:148
FFileIoStoreBlockKey Key
Definition IoDispatcherFileBackendTypes.h:150
uint32 RefCount
Definition IoDispatcherFileBackendTypes.h:152
FFileIoStoreReadRequest * Previous
Definition IoDispatcherFileBackendTypes.h:146
uint32 BytesUsed
Definition IoDispatcherFileBackendTypes.h:159
FFileIoStoreReadRequest * Next
Definition IoDispatcherFileBackendTypes.h:145
EQueueStatus QueueStatus
Definition IoDispatcherFileBackendTypes.h:163
int32 Priority
Definition IoDispatcherFileBackendTypes.h:156
uint64 CreationTime
Definition IoDispatcherFileBackendTypes.h:157
bool bIsCustomRequest
Definition IoDispatcherFileBackendTypes.h:160
FFileIoStoreBuffer * Buffer
Definition IoDispatcherFileBackendTypes.h:151
const uint32 Sequence
Definition IoDispatcherFileBackendTypes.h:155
FFileIoStoreReadRequest()
Definition IoDispatcherFileBackendTypes.h:140
Definition IoDispatcherFileBackendTypes.h:772
uint64 GetResolvedOffset() const
Definition IoDispatcherFileBackendTypes.h:791
void CreateBuffer(uint64 Size)
Definition IoDispatcherFileBackendTypes.h:812
FIoBuffer & GetBuffer()
Definition IoDispatcherFileBackendTypes.h:818
const FFileIoStoreContainerFile * GetContainerFile() const
Definition IoDispatcherFileBackendTypes.h:781
FFileIoStoreContainerFile * GetContainerFile()
Definition IoDispatcherFileBackendTypes.h:786
PAKFILE_API void AddReadRequestLink(FFileIoStoreReadRequestLink *ReadRequestLink)
Definition IoDispatcherFileBackend.cpp:986
int32 GetPriority() const
Definition IoDispatcherFileBackendTypes.h:801
uint64 GetResolvedSize() const
Definition IoDispatcherFileBackendTypes.h:796
bool HasBuffer() const
Definition IoDispatcherFileBackendTypes.h:806
Definition Guid.h:109
Definition IoDispatcherFileBackendTypes.h:922
FFileIoStoreStats * Stats
Definition IoDispatcherFileBackendTypes.h:927
FFileIoStoreRequestAllocator * RequestAllocator
Definition IoDispatcherFileBackendTypes.h:924
const FWakeUpIoDispatcherThreadDelegate * WakeUpDispatcherThreadDelegate
Definition IoDispatcherFileBackendTypes.h:923
FFileIoStoreBlockCache * BlockCache
Definition IoDispatcherFileBackendTypes.h:926
FFileIoStoreBufferAllocator * BufferAllocator
Definition IoDispatcherFileBackendTypes.h:925