UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
OutputDeviceFile.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "CoreTypes.h"
8#include "HAL/Runnable.h"
11#include "Misc/OutputDevice.h"
12#include "Misc/ScopeLock.h"
15#include "Templates/Atomic.h"
16#include "Templates/Function.h"
17#include "Templates/UniquePtr.h"
18#include "UObject/NameTypes.h"
19
20class FRunnableThread;
21
22
24#define BACKUP_LOG_FILENAME_POSTFIX TEXT("-backup-")
25
31{
33 volatile FRunnableThread* Thread;
35 FThreadSafeCounter StopTaskCounter;
36
38 FArchive& Ar;
40 TArray<uint8> Buffer;
42 TAtomic<int32> BufferStartPos;
44 TAtomic<int32> BufferEndPos;
46 FCriticalSection BufferPosCritical;
48 FThreadSafeCounter SerializeRequestCounter;
50 FThreadSafeCounter WantsArchiveFlush;
52 FCriticalSection RunCritical;
53
55 double LastArchiveFlushTime;
56
58 CORE_API void FlushArchiveAndResetTimer();
59
61 CORE_API void SerializeBufferToArchive();
62
64 CORE_API void FlushBuffer();
65
66public:
67
69 {
70 FileName, // Appends the filename in the threadname: FAsyncWriter_FileName
71 Sequential, // Uses a global sequential number to append to the threadname: FAsyncWriter_1
72 };
73
75
76 CORE_API virtual ~FAsyncWriter();
77
79 CORE_API virtual void Serialize(void* InData, int64 Length) override;
80
82 CORE_API void Flush();
83
84 //~ Begin FRunnable Interface.
85 CORE_API virtual bool Init();
86 CORE_API virtual uint32 Run();
87 CORE_API virtual void Stop();
88 virtual FSingleThreadRunnable* GetSingleThreadInterface() override { return this; }
89 //~ End FRunnable Interface
90
91protected:
92 //~ Begin FSingleThreadRunnable Interface.
94 CORE_API virtual void Tick() override;
95 //~ End FSingleThreadRunnable Interface
96
97};
98
99enum class EByteOrderMark : int8
100{
101 UTF8,
103};
104
109{
110public:
121 CORE_API FOutputDeviceFile(const TCHAR* InFilename = nullptr, bool bDisableBackup = false, bool bAppendIfExists = false, bool bCreateWriterLazily = true, TFunction<void(const TCHAR*)> FileOpenedCallback = TFunction<void(const TCHAR*)>());
122
128
131
132 //~ Begin FOutputDevice Interface.
138 CORE_API void TearDown() override;
139
144 CORE_API void Flush() override;
145
146 CORE_API virtual void Serialize(const TCHAR* Data, ELogVerbosity::Type Verbosity, const class FName& Category, const double Time) override;
147 CORE_API virtual void Serialize(const TCHAR* Data, ELogVerbosity::Type Verbosity, const class FName& Category) override;
148 virtual bool CanBeUsedOnAnyThread() const override
149 {
150 return true;
151 }
152 virtual bool CanBeUsedOnPanicThread() const override
153 {
154 return true;
155 }
156 //~ End FOutputDevice Interface.
157
159 static CORE_API void CreateBackupCopy(const TCHAR* Filename);
160
162 static CORE_API bool IsBackupCopy(const TCHAR* Filename);
163
165 CORE_API void IncludeCategory(const class FName& InCategoryName);
166
168 const TCHAR* GetFilename() const { return Filename; }
169
170 CORE_API bool IsOpened() const;
171
172private:
173
175 FAsyncWriter* AsyncWriter;
177 FArchive* WriterArchive;
179 TFunction<void(const TCHAR*)> OnFileOpenedFn;
180
181 TCHAR Filename[1024];
182 bool AppendIfExists;
183 bool Dead;
184 bool bCreatingWriter;
185
187 bool bDisableBackup;
188
190 struct FCategoryInclusionInternal;
191
192 TUniquePtr<FCategoryInclusionInternal> CategoryInclusionInternal;
193
194 CORE_API void WriteRaw(const TCHAR* C);
195
197 CORE_API bool CreateWriter(uint32 MaxAttempts = 32);
198
199 CORE_API void WriteByteOrderMarkToArchive(EByteOrderMark ByteOrderMark);
200};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
EByteOrderMark
Definition OutputDeviceFile.h:100
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition OutputDeviceFile.h:31
virtual CORE_API uint32 Run()
Definition OutputDeviceFile.cpp:283
virtual CORE_API bool Init()
Definition OutputDeviceFile.cpp:278
CORE_API void Flush()
Definition OutputDeviceFile.cpp:270
virtual FSingleThreadRunnable * GetSingleThreadInterface() override
Definition OutputDeviceFile.h:88
virtual CORE_API ~FAsyncWriter()
Definition OutputDeviceFile.cpp:200
virtual CORE_API void Stop()
Definition OutputDeviceFile.cpp:305
EThreadNameOption
Definition OutputDeviceFile.h:69
virtual CORE_API void Tick() override
Definition OutputDeviceFile.cpp:310
Definition NameTypes.h:617
Definition OutputDeviceFile.h:109
CORE_API bool IsOpened() const
Definition OutputDeviceFile.cpp:457
virtual bool CanBeUsedOnPanicThread() const override
Definition OutputDeviceFile.h:152
static CORE_API bool IsBackupCopy(const TCHAR *Filename)
Definition OutputDeviceFile.cpp:437
const TCHAR * GetFilename() const
Definition OutputDeviceFile.h:168
CORE_API void TearDown() override
Definition OutputDeviceFile.cpp:388
CORE_API void IncludeCategory(const class FName &InCategoryName)
Definition OutputDeviceFile.cpp:603
CORE_API void SetFilename(const TCHAR *InFilename)
Definition OutputDeviceFile.cpp:375
CORE_API void Flush() override
Definition OutputDeviceFile.cpp:409
CORE_API ~FOutputDeviceFile()
Definition OutputDeviceFile.cpp:370
virtual bool CanBeUsedOnAnyThread() const override
Definition OutputDeviceFile.h:148
static CORE_API void CreateBackupCopy(const TCHAR *Filename)
Definition OutputDeviceFile.cpp:420
Definition OutputDevice.h:133
Definition RunnableThread.h:20
Definition Runnable.h:20
Definition SingleThreadRunnable.h:12
Definition ThreadSafeCounter.h:14
Definition Array.h:670
Definition Atomic.h:538
Definition AndroidPlatformMisc.h:14
Definition UniquePtr.h:107
Type
Definition LogVerbosity.h:17