UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StorageServerIoDispatcherBackend.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "HAL/Runnable.h"
7#include "Misc/IQueuedWork.h"
8
9#if !UE_BUILD_SHIPPING
10
13
15 : public FRunnable
17{
18public:
21
23 void Shutdown() override;
25 void CancelIoRequest(FIoRequestImpl* Request) override {};
26 void UpdatePriorityForIoRequest(FIoRequestImpl* Request) override {};
27 bool DoesChunkExist(const FIoChunkId& ChunkId) const override;
28 TIoStatusOr<uint64> GetSizeForChunk(const FIoChunkId& ChunkId) const override;
30 TIoStatusOr<FIoMappedRegion> OpenMapped(const FIoChunkId& ChunkId, const FIoReadOptions& Options) override
31 {
33 }
34 const TCHAR* GetName() const override;
35
36 virtual bool Init() override
37 {
38 return true;
39 }
40 virtual uint32 Run() override;
41 virtual void Stop() override;
42
43private:
44 class FRequestQueue
45 {
46 public:
47 FIoRequestImpl* Pop();
48 void Push(FIoRequestImpl& Request);
49 void UpdateOrder();
50
51 private:
52 static bool QueueSortFunc(const FIoRequestImpl& A, const FIoRequestImpl& B)
53 {
54 uintptr_t ASequence = reinterpret_cast<uintptr_t>(A.BackendData);
55 uintptr_t BSequence = reinterpret_cast<uintptr_t>(B.BackendData);
56 if (A.Priority == B.Priority)
57 {
58 return ASequence < BSequence;
59 }
60 return A.Priority > B.Priority;
61 }
62
64 FCriticalSection CriticalSection;
65 };
66
67 struct FBatch
68 : public IQueuedWork
69 {
71
72 virtual void DoThreadedWork() override;
73 virtual void Abandon() override {};
74
76 FBatch* Next = nullptr;
77 FIoRequestImpl* RequestsHead = nullptr;
78 FIoRequestImpl* RequestsTail = nullptr;
79 uint64 RequestsCount = 0;
80 };
81
82 bool Resolve(FIoRequestImpl* Request);
83 void SubmitBatch(FBatch* Batch);
84 void OnBatchCompleted(FBatch* Batch);
85 bool WaitForBatchToComplete(uint32 WaitTime = MAX_uint32);
86
87 FStorageServerConnection& Connection;
89 FRunnableThread* Thread = nullptr;
90 FEvent* NewRequestEvent;
91 FRequestQueue RequestQueue;
92 FBatch* FirstAvailableBatch = nullptr;
93 int32 SubmittedBatchesCount = 0;
94 FCriticalSection CompletedBatchesCritical;
95 FBatch* FirstCompletedBatch = nullptr;
96 FEvent* BatchCompletedEvent;
97 FCriticalSection CompletedRequestsCritical;
98 FIoRequestImpl* CompletedRequestsHead = nullptr;
99 FIoRequestImpl* CompletedRequestsTail = nullptr;
100 TAtomic<bool> bStopRequested{ false };
101};
102
103#endif
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
#define MAX_uint32
Definition NumericLimits.h:21
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Event.h:21
Definition IoChunkId.h:64
Definition IoDispatcher.h:165
Definition IoDispatcherBackend.h:23
Definition IoStatus.h:60
Definition RunnableThread.h:20
Definition Runnable.h:20
Definition StorageServerConnection.h:47
Definition StorageServerIoDispatcherBackend.h:17
void CancelIoRequest(FIoRequestImpl *Request) override
Definition StorageServerIoDispatcherBackend.h:25
virtual uint32 Run() override
Definition StorageServerIoDispatcherBackend.cpp:62
FIoRequestImpl * GetCompletedIoRequests() override
Definition StorageServerIoDispatcherBackend.cpp:209
TIoStatusOr< uint64 > GetSizeForChunk(const FIoChunkId &ChunkId) const override
Definition StorageServerIoDispatcherBackend.cpp:195
virtual bool Init() override
Definition StorageServerIoDispatcherBackend.h:36
void ResolveIoRequests(FIoRequestList Requests, FIoRequestList &OutUnresolved) override
Definition StorageServerIoDispatcherBackend.cpp:179
void Shutdown() override
Definition StorageServerIoDispatcherBackend.cpp:41
bool DoesChunkExist(const FIoChunkId &ChunkId) const override
Definition StorageServerIoDispatcherBackend.cpp:190
virtual void Stop() override
Definition StorageServerIoDispatcherBackend.cpp:56
const TCHAR * GetName() const override
Definition StorageServerIoDispatcherBackend.cpp:217
void UpdatePriorityForIoRequest(FIoRequestImpl *Request) override
Definition StorageServerIoDispatcherBackend.h:26
TIoStatusOr< FIoMappedRegion > OpenMapped(const FIoChunkId &ChunkId, const FIoReadOptions &Options) override
Definition StorageServerIoDispatcherBackend.h:30
~FStorageServerIoDispatcherBackend()
Definition StorageServerIoDispatcherBackend.cpp:34
Definition IQueuedWork.h:62
Definition Array.h:670
Definition Atomic.h:538
Definition IoStatus.h:101
Definition SharedPointer.h:692
Definition SharedPointer.h:153
@ Owner
Definition XmppMultiUserChat.h:25
Definition IoDispatcherBackend.h:186