UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UE::FPlatformIoDispatcherBase Class Referenceabstract

#include <PlatformIoDispatcherBase.h>

+ Inheritance diagram for UE::FPlatformIoDispatcherBase:

Public Member Functions

virtual ~FPlatformIoDispatcherBase ()
 
virtual bool Init () override final
 
virtual uint32 Run () override final
 
virtual void Stop () override final
 
virtual FIoStatus Initialize () override final
 
virtual FIoFileReadRequest ScatterGather (FIoScatterGatherRequestParams &&Params, FIoFileReadRequestCompleted &&OnCompleted) override
 
virtual FIoFileReadRequest ReadDirect (FIoDirectReadRequestParams &&Params, FIoFileReadRequestCompleted &&OnCompleted) override
 
virtual bool Tick () override
 
virtual void UpdatePriority (FIoFileReadRequest Request, int32 NewPriority) override
 
virtual void CancelRequest (FIoFileReadRequest Request) override
 
virtual void CancelAllRequests (FIoFileHandle FileHandle) override
 
virtual void DeleteRequest (FIoFileReadRequest Request) override
 
- Public Member Functions inherited from FRunnable
virtual void Exit ()
 
virtual class FSingleThreadRunnableGetSingleThreadInterface ()
 
virtual ~FRunnable ()
 
- Public Member Functions inherited from UE::IPlatformIoDispatcher
virtual ~IPlatformIoDispatcher ()=default
 
virtual TIoStatusOr< FIoFileHandleOpenFile (const TCHAR *Filename, const FIoFileProperties &FileProperties, FIoFileStat *OutStat=nullptr)=0
 
virtual FIoStatus CloseFile (FIoFileHandle FileHandle)=0
 

Protected Member Functions

 FPlatformIoDispatcherBase (FPlatformIoDispatcherCreateParams &&Params)
 
virtual FIoStatus OnInitialize ()
 
virtual uint32 OnIoThreadEntry ()=0
 
virtual void OnWakeUp ()=0
 
virtual FIoPlatformFileInfo GetPlatformFileInfo (FIoFileHandle FileHandle)=0
 
uint32 GetNextFileId ()
 
void EnqueueCompletedFileBlock (FIoFileBlockRequest &FileBlockRequest)
 
void CompleteFileBlock (FIoFileBlockRequest &FileBlockRequest)
 
void EnqueueBlockToDecode (FIoEncodedBlockRequest &EncodedBlockRequest)
 
void ProcessDecodedBlock (FIoEncodedBlockRequest &EncodedBlockRequest, FIoChunkBlockDecodeResult &&DecodeResult, FIoChunkBlockDecodeRequest &NextDecodeRequest)
 
void ScatterDecodedBlock (FIoEncodedBlockRequest &EncodedBlockRequest)
 
void CompleteDecodedBlock (FIoEncodedBlockRequest &EncodedBlockRequest, FIoPlatformReadRequestList &OutCompletedReadRequests)
 
bool ProcessCompletedFileBlocks ()
 
bool ProcessBlocksToDecode ()
 
bool ProcessBlocksToComplete ()
 
bool ProcessBlocks ()
 

Protected Attributes

FPlatformIoDispatcherStats Stats
 
TUniquePtr< FRunnableThreadThread
 
TUniquePtr< FIoServiceThreadSupportThread
 
FPlatformIoDispatcherRequestMgr RequestMgr
 
FIoChunkBlockMemoryPool ChunkBlockMemoryPool
 
FIoFileBlockMemoryPool FileBlockMemoryPool
 
FIoQueue IoQueue
 
FIoFileBlockCache FileBlockCache
 
FIoFileBlockRequestList FileBlocksToComplete
 
FIoEncodedBlockRequestList BlocksToDecode
 
FIoEncodedBlockRequestList BlocksToComplete
 
UE::FMutex FileBlockMutex
 
UE::FMutex EncodedBlockMutex
 
uint32 FileBlockSize = 256 << 10
 
bool bMultithreaded = false
 
std::atomic_bool bStopRequested {false}
 

Detailed Description

This is a base class for platform specific I/O dispatcher implementations. There are two kinds of I/O requests when reading data from disk. Direct-read requests for platforms with hardware decompression and scatter-gather requests. Scatter-gather requests are issued by specifying information about how the blocks on disk are encoded, i.e. compressed, encrypted and or signed and forms a set of encoded block request. Encoded block requests can be shared between user requests, i.e. if two user requests are reading the same encoded block, the block is decoded once and then scattered to the destination/targets buffers. The encoded block requests are devided into a set of larger file block requests. The size of the file blocks are configured with GIoDispatcherBufferSizeKB (default=256KiB). The maximum number of concurrent file block requests are constrained by the available memory in the file block memory pool configured with GIoDispatcherBufferMemoryMB (default=8MiB).

Constructor & Destructor Documentation

◆ ~FPlatformIoDispatcherBase()

UE::FPlatformIoDispatcherBase::~FPlatformIoDispatcherBase ( )
virtual

◆ FPlatformIoDispatcherBase()

UE::FPlatformIoDispatcherBase::FPlatformIoDispatcherBase ( FPlatformIoDispatcherCreateParams &&  Params)
protected

Member Function Documentation

◆ CancelAllRequests()

void UE::FPlatformIoDispatcherBase::CancelAllRequests ( FIoFileHandle  FileHandle)
overridevirtual

Cancel all inflight I/O request for the specified file.

Implements UE::IPlatformIoDispatcher.

◆ CancelRequest()

void UE::FPlatformIoDispatcherBase::CancelRequest ( FIoFileReadRequest  Request)
overridevirtual

Cancel inflight I/O request.

Implements UE::IPlatformIoDispatcher.

◆ CompleteDecodedBlock()

void UE::FPlatformIoDispatcherBase::CompleteDecodedBlock ( FIoEncodedBlockRequest EncodedBlockRequest,
FIoPlatformReadRequestList OutCompletedReadRequests 
)
protected

◆ CompleteFileBlock()

void UE::FPlatformIoDispatcherBase::CompleteFileBlock ( FIoFileBlockRequest FileBlockRequest)
protected

◆ DeleteRequest()

void UE::FPlatformIoDispatcherBase::DeleteRequest ( FIoFileReadRequest  Request)
overridevirtual

Delete the request. Must be called after the completion callback has been triggered.

Implements UE::IPlatformIoDispatcher.

◆ EnqueueBlockToDecode()

void UE::FPlatformIoDispatcherBase::EnqueueBlockToDecode ( FIoEncodedBlockRequest EncodedBlockRequest)
protected

◆ EnqueueCompletedFileBlock()

void UE::FPlatformIoDispatcherBase::EnqueueCompletedFileBlock ( FIoFileBlockRequest FileBlockRequest)
protected

◆ GetNextFileId()

uint32 UE::FPlatformIoDispatcherBase::GetNextFileId ( )
protected

◆ GetPlatformFileInfo()

virtual FIoPlatformFileInfo UE::FPlatformIoDispatcherBase::GetPlatformFileInfo ( FIoFileHandle  FileHandle)
protectedpure virtual

◆ Init()

bool UE::FPlatformIoDispatcherBase::Init ( void  )
finaloverridevirtual

Initializes the runnable object.

This method is called in the context of the thread object that aggregates this, not the thread that passes this runnable to a new thread.

Returns
True if initialization was successful, false otherwise
See also
Run, Stop, Exit

Reimplemented from FRunnable.

◆ Initialize()

FIoStatus UE::FPlatformIoDispatcherBase::Initialize ( )
finaloverridevirtual

Initialize the dispatcher. Called after the config system has been initialized.

Implements UE::IPlatformIoDispatcher.

◆ OnInitialize()

FIoStatus UE::FPlatformIoDispatcherBase::OnInitialize ( )
protectedvirtual

◆ OnIoThreadEntry()

virtual uint32 UE::FPlatformIoDispatcherBase::OnIoThreadEntry ( )
protectedpure virtual

◆ OnWakeUp()

virtual void UE::FPlatformIoDispatcherBase::OnWakeUp ( )
protectedpure virtual

◆ ProcessBlocks()

bool UE::FPlatformIoDispatcherBase::ProcessBlocks ( )
protected

◆ ProcessBlocksToComplete()

bool UE::FPlatformIoDispatcherBase::ProcessBlocksToComplete ( )
protected

◆ ProcessBlocksToDecode()

bool UE::FPlatformIoDispatcherBase::ProcessBlocksToDecode ( )
protected

◆ ProcessCompletedFileBlocks()

bool UE::FPlatformIoDispatcherBase::ProcessCompletedFileBlocks ( )
protected

◆ ProcessDecodedBlock()

void UE::FPlatformIoDispatcherBase::ProcessDecodedBlock ( FIoEncodedBlockRequest EncodedBlockRequest,
FIoChunkBlockDecodeResult &&  DecodeResult,
FIoChunkBlockDecodeRequest NextDecodeRequest 
)
protected

◆ ReadDirect()

FIoFileReadRequest UE::FPlatformIoDispatcherBase::ReadDirect ( FIoDirectReadRequestParams &&  Params,
FIoFileReadRequestCompleted &&  OnCompleted 
)
overridevirtual

Issue a direct read request. Returns an invalid file handle if direct read is not supported for the specifid file.

Implements UE::IPlatformIoDispatcher.

◆ Run()

uint32 UE::FPlatformIoDispatcherBase::Run ( )
finaloverridevirtual

Runs the runnable object.

This is where all per object thread work is done. This is only called if the initialization was successful.

Returns
The exit code of the runnable object
See also
Init, Stop, Exit

Implements FRunnable.

◆ ScatterDecodedBlock()

void UE::FPlatformIoDispatcherBase::ScatterDecodedBlock ( FIoEncodedBlockRequest EncodedBlockRequest)
protected

◆ ScatterGather()

FIoFileReadRequest UE::FPlatformIoDispatcherBase::ScatterGather ( FIoScatterGatherRequestParams &&  Params,
FIoFileReadRequestCompleted &&  OnCompleted 
)
overridevirtual

Issue a scatter-gather request.

Implements UE::IPlatformIoDispatcher.

◆ Stop()

void UE::FPlatformIoDispatcherBase::Stop ( void  )
finaloverridevirtual

Stops the runnable object.

This is called if a thread is requested to terminate early.

See also
Init, Run, Exit

Reimplemented from FRunnable.

◆ Tick()

virtual bool UE::FPlatformIoDispatcherBase::Tick ( )
inlineoverridevirtual

Tick the dispatcher. Only used when multithreading is disabled.

Implements UE::IPlatformIoDispatcher.

◆ UpdatePriority()

void UE::FPlatformIoDispatcherBase::UpdatePriority ( FIoFileReadRequest  Request,
int32  NewPriority 
)
overridevirtual

Update priority for an inflight I/O request.

Implements UE::IPlatformIoDispatcher.

Member Data Documentation

◆ BlocksToComplete

FIoEncodedBlockRequestList UE::FPlatformIoDispatcherBase::BlocksToComplete
protected

◆ BlocksToDecode

FIoEncodedBlockRequestList UE::FPlatformIoDispatcherBase::BlocksToDecode
protected

◆ bMultithreaded

bool UE::FPlatformIoDispatcherBase::bMultithreaded = false
protected

◆ bStopRequested

std::atomic_bool UE::FPlatformIoDispatcherBase::bStopRequested {false}
protected

◆ ChunkBlockMemoryPool

FIoChunkBlockMemoryPool UE::FPlatformIoDispatcherBase::ChunkBlockMemoryPool
protected

◆ EncodedBlockMutex

UE::FMutex UE::FPlatformIoDispatcherBase::EncodedBlockMutex
protected

◆ FileBlockCache

FIoFileBlockCache UE::FPlatformIoDispatcherBase::FileBlockCache
protected

◆ FileBlockMemoryPool

FIoFileBlockMemoryPool UE::FPlatformIoDispatcherBase::FileBlockMemoryPool
protected

◆ FileBlockMutex

UE::FMutex UE::FPlatformIoDispatcherBase::FileBlockMutex
protected

◆ FileBlockSize

uint32 UE::FPlatformIoDispatcherBase::FileBlockSize = 256 << 10
protected

◆ FileBlocksToComplete

FIoFileBlockRequestList UE::FPlatformIoDispatcherBase::FileBlocksToComplete
protected

◆ IoQueue

FIoQueue UE::FPlatformIoDispatcherBase::IoQueue
protected

◆ RequestMgr

FPlatformIoDispatcherRequestMgr UE::FPlatformIoDispatcherBase::RequestMgr
protected

◆ Stats

FPlatformIoDispatcherStats UE::FPlatformIoDispatcherBase::Stats
protected

◆ SupportThread

TUniquePtr<FIoServiceThread> UE::FPlatformIoDispatcherBase::SupportThread
protected

◆ Thread

TUniquePtr<FRunnableThread> UE::FPlatformIoDispatcherBase::Thread
protected

The documentation for this class was generated from the following files: