14#if !defined(USE_WINAPI_CREATEFILE2)
15 #define USE_WINAPI_CREATEFILE2 0
41 Result = CreateEvent(
nullptr,
true, 0,
nullptr);
66 int64 AlignedBytesToRead;
67 OVERLAPPED OverlappedIO;
82 check(Offset >= 0 && BytesToRead > 0);
85 BytesToRead = FileSize - Offset;
86 check(BytesToRead > 0);
88 AlignedOffset = Offset;
89 AlignedBytesToRead = BytesToRead;
97 AlignedBytesToRead =
Align(Offset + BytesToRead, 4096) - AlignedOffset;
98 check(AlignedOffset >= 0 && AlignedBytesToRead > 0);
103 static int32 NumMessages = 0;
104 if (NumMessages < 10)
107 UE_LOG(
LogTemp,
Log,
TEXT(
"FMicrosoftReadRequest request was not aligned. This is expected with loose files, but not a pak file."));
109 else if (NumMessages == 10)
112 UE_LOG(
LogTemp,
Log,
TEXT(
"LAST NOTIFICATION THIS RUN: FMicrosoftReadRequest request was not aligned."));
114 TempMemory = (
uint8*)FMemory::Malloc(AlignedBytesToRead);
120 Memory = (
uint8*)FMemory::Malloc(AlignedBytesToRead);
126 if (Offset + BytesToRead > FileSize || AlignedOffset < 0 || AlignedBytesToRead < 1)
133 LI.QuadPart = AlignedOffset;
134 OverlappedIO.Offset =
LI.LowPart;
135 OverlappedIO.OffsetHigh =
LI.HighPart;
139 if (!ReadFile(FileHandle, TempMemory ? TempMemory :
Memory, AlignedBytesToRead, (LPDWORD)&
NumRead, &OverlappedIO))
141 uint32 ErrorCode = GetLastError();
166 check(AlignedOffset <= Offset);
169 bool bFailed =
false;
178 uint32 ErrorCode = GetLastError();
186 if (!bFailed &&
int64(
BytesRead) < BytesToRead + (Offset - AlignedOffset))
188 uint32 ErrorCode = GetLastError();
199#if USE_WINAPI_CREATEFILE2
218 LI.QuadPart = AlignedOffset;
222 uint32 ErrorCode = GetLastError();
225 else if (ReadFile(
Handle, TempMemory ? TempMemory :
Memory, AlignedBytesToRead, (LPDWORD)&
BytesRead,
nullptr) &&
232 uint32 ErrorCode = GetLastError();
239 uint32 ErrorCode = GetLastError();
242 if (bFailed &&
Try < 9)
244 FPlatformProcess::Sleep(.2f);
263 TempMemory =
nullptr;
266 else if (AlignedOffset != Offset)
275 if (InOffset >= Offset && InOffset +
InBytesToRead <= Offset + BytesToRead &&
279 if (!UserSuppliedMemory)
298 Task->StartSynchronousTask();
308 if (TimeLimitSeconds <= 0.0f)
310 Task->EnsureCompletion();
315 bResult = Task->WaitCompletionWithTimeout(TimeLimitSeconds);
427#if PLATFORMFILETRACE_ENABLED
448 uint8* Result =
nullptr;
471 LiveRequests.
Add(Result);
505 TempMemory =
nullptr;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define NULL
Definition oodle2base.h:134
constexpr T Align(T Val, uint64 Alignment)
Definition AlignmentTemplates.h:18
constexpr T AlignDown(T Val, uint64 Alignment)
Definition AlignmentTemplates.h:34
#define check(expr)
Definition AssertionMacros.h:314
#define verify(expr)
Definition AssertionMacros.h:319
#define CA_SUPPRESS(WarningNumber)
Definition CoreMiscDefines.h:125
#define INC_MEMORY_STAT_BY(StatId, Amount)
Definition Stats.h:700
#define RETURN_QUICK_DECLARE_CYCLE_STAT(StatId, GroupId)
Definition Stats.h:655
#define DEC_MEMORY_STAT_BY(StatId, Amount)
Definition Stats.h:705
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
return true
Definition ExternalRpcRegistry.cpp:601
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
CORE_API TLockFreePointerListUnordered< void, PLATFORM_CACHE_LINE_SIZE > MicrosoftAsyncIOEventPool
Definition WindowsPlatformFile.cpp:58
HANDLE GetIOPooledEvent()
Definition MicrosoftAsyncIO.h:35
void FreeIOPooledEvent(HANDLE ToFree)
Definition MicrosoftAsyncIO.h:47
#define MAX_int64
Definition NumericLimits.h:26
FQueuedThreadPool * GIOThreadPool
Definition ThreadingBase.cpp:50
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
void EnsureCompletion(bool bDoWorkOnThisThreadIfNotStarted=true, bool bIsLatencySensitive=false)
Definition AsyncWork.h:429
Definition AsyncWork.h:585
Definition MicrosoftAsyncIO.h:395
void RemoveRequest(FMicrosoftReadRequest *Req)
Definition MicrosoftAsyncIO.h:440
virtual IAsyncReadRequest * SizeRequest(FAsyncFileCallBack *CompleteCallback=nullptr) override
Definition MicrosoftAsyncIO.h:459
FMicrosoftAsyncReadFileHandle(HANDLE InFileHandle, const TCHAR *InFileNameForErrorMessagesAndPanicRetry)
Definition MicrosoftAsyncIO.h:407
FString FileNameForErrorMessagesAndPanicRetry
Definition MicrosoftAsyncIO.h:399
virtual IAsyncReadRequest * ReadRequest(int64 Offset, int64 BytesToRead, EAsyncIOPriorityAndFlags PriorityAndFlags=AIOP_Normal, FAsyncFileCallBack *CompleteCallback=nullptr, uint8 *UserSuppliedMemory=nullptr) override
Definition MicrosoftAsyncIO.h:463
uint8 * GetPrecachedBlock(uint8 *UserSuppliedMemory, int64 InOffset, int64 InBytesToRead)
Definition MicrosoftAsyncIO.h:445
int64 FileSize
Definition MicrosoftAsyncIO.h:398
~FMicrosoftAsyncReadFileHandle()
Definition MicrosoftAsyncIO.h:419
HANDLE FileHandle
Definition MicrosoftAsyncIO.h:397
Definition MicrosoftAsyncIO.h:369
virtual void ReleaseMemoryOwnershipImpl() override
Definition MicrosoftAsyncIO.h:388
FMicrosoftFailedRequest(FAsyncFileCallBack *CompleteCallback)
Definition MicrosoftAsyncIO.h:371
virtual void WaitCompletionImpl(float TimeLimitSeconds) override
Definition MicrosoftAsyncIO.h:377
virtual void CancelImpl() override
Definition MicrosoftAsyncIO.h:384
Definition MicrosoftAsyncIO.h:19
FMicrosoftReadRequestWorker(FMicrosoftReadRequest *InReadRequest)
Definition MicrosoftAsyncIO.h:22
void DoWork()
Definition MicrosoftAsyncIO.h:337
FORCEINLINE TStatId GetStatId() const
Definition MicrosoftAsyncIO.h:27
Definition MicrosoftAsyncIO.h:56
FMicrosoftReadRequest(FMicrosoftAsyncReadFileHandle *InOwner, FAsyncFileCallBack *CompleteCallback, uint8 *InUserSuppliedMemory, int64 InOffset, int64 InBytesToRead, int64 InFileSize, HANDLE InHandle, EAsyncIOPriorityAndFlags InPriorityAndFlags)
Definition MicrosoftAsyncIO.h:69
virtual void CancelImpl() override
Definition MicrosoftAsyncIO.h:326
virtual void ReleaseMemoryOwnershipImpl() override
Definition MicrosoftAsyncIO.h:331
virtual ~FMicrosoftReadRequest()
Definition MicrosoftAsyncIO.h:479
void Start()
Definition MicrosoftAsyncIO.h:290
void FinalizeReadAndSetComplete()
Definition MicrosoftAsyncIO.h:256
void PerformRequest()
Definition MicrosoftAsyncIO.h:157
const TCHAR * GetFileNameForErrorMessagesAndPanicRetry()
Definition MicrosoftAsyncIO.h:530
uint8 * GetContainedSubblock(uint8 *UserSuppliedMemory, int64 InOffset, int64 InBytesToRead)
Definition MicrosoftAsyncIO.h:273
virtual void WaitCompletionImpl(float TimeLimitSeconds) override
Definition MicrosoftAsyncIO.h:303
bool CheckForPrecache()
Definition MicrosoftAsyncIO.h:514
Definition MicrosoftAsyncIO.h:343
virtual void ReleaseMemoryOwnershipImpl() override
Definition MicrosoftAsyncIO.h:363
virtual void WaitCompletionImpl(float TimeLimitSeconds) override
Definition MicrosoftAsyncIO.h:352
virtual void CancelImpl() override
Definition MicrosoftAsyncIO.h:359
FMicrosoftSizeRequest(FAsyncFileCallBack *CompleteCallback, int64 InFileSize)
Definition MicrosoftAsyncIO.h:345
Definition AsyncWork.h:663
Definition ScopeLock.h:141
Definition AsyncFileHandle.h:211
Definition AsyncFileHandle.h:31
UE_FORCEINLINE_HINT bool PollCompletion()
Definition AsyncFileHandle.h:86
const bool bUserSuppliedMemory
Definition AsyncFileHandle.h:44
PTRINT Size
Definition AsyncFileHandle.h:35
uint8 * Memory
Definition AsyncFileHandle.h:36
void SetComplete()
Definition AsyncFileHandle.h:203
SizeType Remove(const ElementType &Item)
Definition Array.h:3091
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Push(T *NewItem)
Definition LockFreeList.h:849
T * Pop()
Definition LockFreeList.h:858
Definition LockFreeList.h:904
@ false
Definition radaudio_common.h:23
static UE_FORCEINLINE_HINT void * Memmove(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:109
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition LightweightStats.h:416