UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FeedbackContext.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"
8#include "CoreGlobals.h"
9#include "CoreTypes.h"
10#include "HAL/CriticalSection.h"
11#include "HAL/PlatformCrt.h"
12#include "HAL/PlatformTime.h"
14#include "Misc/OutputDevice.h"
15#include "Misc/ScopeLock.h"
16#include "Misc/SlowTask.h"
17#include "Misc/SlowTaskStack.h"
18#include "Misc/Guid.h"
20#include "Templates/UniquePtr.h"
22
25struct FSlowTask;
26
29 : public FOutputDevice
30{
31public:
32 CORE_API virtual void Serialize(const TCHAR* V, ELogVerbosity::Type Verbosity, const FName& Category) override;
33 CORE_API virtual void Serialize(const TCHAR* V, ELogVerbosity::Type Verbosity, const FName& Category, double Time) override;
34 CORE_API virtual void SerializeRecord(const UE::FLogRecord& Record) override;
35
37 CORE_API virtual bool YesNof( const FText& Question );
38
44 virtual bool ReceivedUserCancel() { return false; }
45
48 {
49 return ScopeStack;
50 }
51
53 FOnStartSlowTask& OnStartSlowTask() { return StartSlowTaskEvent; }
54
55 DECLARE_EVENT_TwoParams(FFeedbackContext, FOnFinalizeSlowTask, const FText& TaskName, double DurationInSeconds);
56 FOnFinalizeSlowTask& OnFinalizeSlowTask() { return FinalizeSlowTaskEvent; }
57
59 FOnStartSlowTaskWithGuid& OnStartSlowTaskWithGuid() { return StartSlowTaskWithGuidEvent; }
60
62 FOnFinalizeSlowTaskWithGuid& OnFinalizeSlowTaskWithGuid() { return FinalizeSlowTaskWithGuidEvent; }
63
64 /**** Legacy API - not deprecated as it's still in heavy use, but superceded by FScopedSlowTask ****/
66 CORE_API void UpdateProgress( int32 Numerator, int32 Denominator );
67 CORE_API void StatusUpdate( int32 Numerator, int32 Denominator, const FText& StatusText );
68 CORE_API void StatusForceUpdate( int32 Numerator, int32 Denominator, const FText& StatusText );
69 CORE_API void EndSlowTask();
70 /**** end legacy API ****/
71
72protected:
73
77 virtual void StartSlowTask( const FText& Task, bool bShowCancelButton=false )
78 {
79 TaskName = Task;
80 TaskGuid = FGuid::NewGuid();
81 TaskStartTime = FPlatformTime::Seconds();
82 GIsSlowTask = true;
83 StartSlowTaskEvent.Broadcast(TaskName);
84 StartSlowTaskWithGuidEvent.Broadcast(TaskGuid, TaskName);
85 }
86
90 virtual void FinalizeSlowTask( )
91 {
92 const double TaskDuration = FPlatformTime::Seconds() - TaskStartTime;
93 FinalizeSlowTaskEvent.Broadcast(TaskName, TaskDuration);
94 FinalizeSlowTaskWithGuidEvent.Broadcast(TaskGuid, TaskName);
95 GIsSlowTask = false;
96 }
97
103 virtual void ProgressReported( const float TotalProgressInterp, FText DisplayMessage ) {}
104
106 CORE_API virtual bool IsPlayingInEditor() const;
107
109
110 CORE_API void FormatLine(FStringBuilderBase& Out, const TCHAR* V, ELogVerbosity::Type Verbosity, const FName& Category, double Time, ELogVerbosity::Type* OutVerbosity = nullptr) const;
112
113public:
114 virtual FContextSupplier* GetContext() const { return nullptr; }
116
119 virtual void CloseBuildProgressWindow() {}
120
125
127 CORE_API virtual ~FFeedbackContext();
128
131 {
132 FScopeLock WarningsAndErrorsLock(&WarningsAndErrorsCritical);
133 OutWarnings = Warnings;
134 }
136 {
137 return Warnings.Num();
138 }
139
141 void GetErrors(TArray<FString>& OutErrors) const
142 {
143 FScopeLock WarningsAndErrorsLock(&WarningsAndErrorsCritical);
144 OutErrors = Errors;
145 }
147 {
148 return Errors.Num();
149 }
150
160 {
161 FScopeLock WarningsAndErrorsLock(&WarningsAndErrorsCritical);
162 Errors.Empty();
163 Warnings.Empty();
164 }
165
166private:
167 CORE_API void AddToHistory(const TCHAR* V, ELogVerbosity::Type Verbosity, const FName& Category, double Time);
168 CORE_API void AddRecordToHistory(const UE::FLogRecord& Record);
169
171 CORE_API FFeedbackContext& operator=(const FFeedbackContext&);
172
174 TArray<FString> Warnings;
176 TArray<FString> Errors;
178 mutable FCriticalSection WarningsAndErrorsCritical;
179
181 FText TaskName;
182
183 double TaskStartTime;
184 FOnStartSlowTask StartSlowTaskEvent;
185 FOnFinalizeSlowTask FinalizeSlowTaskEvent;
186
187 FGuid TaskGuid;
188 FOnStartSlowTaskWithGuid StartSlowTaskWithGuidEvent;
189 FOnFinalizeSlowTaskWithGuid FinalizeSlowTaskWithGuidEvent;
190
191protected:
192
193 friend FSlowTask;
194
197
203
212
214
216 CORE_API void RequestUpdateUI(bool bForceUpdate = false);
217
219 CORE_API void UpdateUI();
220
225 void AddWarning(const FString& InWarning)
226 {
227 FScopeLock WarningsAndErrorsLock(&WarningsAndErrorsCritical);
228 Warnings.Add(InWarning);
229 }
230 void AddWarning(FString&& InWarning)
231 {
232 FScopeLock WarningsAndErrorsLock(&WarningsAndErrorsCritical);
233 Warnings.Add(MoveTemp(InWarning));
234 }
235
240 void AddError(const FString& InError)
241 {
242 FScopeLock WarningsAndErrorsLock(&WarningsAndErrorsCritical);
243 Errors.Add(InError);
244 }
245 void AddError(FString&& InError)
246 {
247 FScopeLock WarningsAndErrorsLock(&WarningsAndErrorsCritical);
248 Errors.Add(MoveTemp(InError));
249 }
250};
bool GIsSlowTask
Definition CoreGlobals.cpp:225
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
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
SharedPointerInternals::TRawPtrProxy< ObjectType > MakeShareable(ObjectType *InObject)
Definition SharedPointer.h:1947
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition CoreMisc.h:94
Definition FeedbackContext.h:30
virtual void SetContext(FContextSupplier *InContext)
Definition FeedbackContext.h:115
FOnStartSlowTask & OnStartSlowTask()
Definition FeedbackContext.h:53
virtual FContextSupplier * GetContext() const
Definition FeedbackContext.h:114
DECLARE_EVENT_TwoParams(FFeedbackContext, FOnStartSlowTaskWithGuid, FGuid Guid, const FText &TaskName)
FSlowTaskStack ScopeStack
Definition FeedbackContext.h:196
virtual CORE_API bool YesNof(const FText &Question)
Definition FeedbackContext.cpp:175
virtual CORE_API bool IsPlayingInEditor() const
Definition FeedbackContext.cpp:274
virtual CORE_API void SerializeRecord(const UE::FLogRecord &Record) override
Definition FeedbackContext.cpp:64
DECLARE_EVENT_OneParam(FFeedbackContext, FOnStartSlowTask, const FText &TaskName)
virtual void FinalizeSlowTask()
Definition FeedbackContext.h:90
DECLARE_EVENT_TwoParams(FFeedbackContext, FOnFinalizeSlowTask, const FText &TaskName, double DurationInSeconds)
CORE_API FFeedbackContext()
FOnFinalizeSlowTaskWithGuid & OnFinalizeSlowTaskWithGuid()
Definition FeedbackContext.h:62
friend FSlowTask
Definition FeedbackContext.h:193
virtual bool ReceivedUserCancel()
Definition FeedbackContext.h:44
bool TreatWarningsAsErrors
Definition FeedbackContext.h:122
virtual void CloseBuildProgressWindow()
Definition FeedbackContext.h:119
TSharedPtr< FSlowTaskStack > ScopeStackSharedPtr
Definition FeedbackContext.h:202
CORE_API void FormatLine(FStringBuilderBase &Out, const TCHAR *V, ELogVerbosity::Type Verbosity, const FName &Category, double Time, ELogVerbosity::Type *OutVerbosity=nullptr) const
Definition FeedbackContext.cpp:110
CORE_API void UpdateProgress(int32 Numerator, int32 Denominator)
Definition FeedbackContext.cpp:224
const TSharedPtr< FSlowTaskStack > & GetScopeStackSharedPtr() const
Definition FeedbackContext.h:204
void ClearWarningsAndErrors()
Definition FeedbackContext.h:159
CORE_API void StatusUpdate(int32 Numerator, int32 Denominator, const FText &StatusText)
Definition FeedbackContext.cpp:237
void GetErrorsAndWarningsAndEmpty(TArray< FString > &OutWarningsAndErrors)
Definition FeedbackContext.h:152
CORE_API ELogVerbosity::Type ResolveVerbosity(ELogVerbosity::Type Verbosity) const
Definition FeedbackContext.cpp:90
void GetErrors(TArray< FString > &OutErrors) const
Definition FeedbackContext.h:141
void GetWarnings(TArray< FString > &OutWarnings) const
Definition FeedbackContext.h:130
CORE_API void UpdateUI()
Definition FeedbackContext.cpp:199
void AddError(const FString &InError)
Definition FeedbackContext.h:240
virtual void StartSlowTask(const FText &Task, bool bShowCancelButton=false)
Definition FeedbackContext.h:77
DECLARE_EVENT_TwoParams(FFeedbackContext, FOnFinalizeSlowTaskWithGuid, FGuid Guid, const FText &TaskName)
CORE_API void RequestUpdateUI(bool bForceUpdate=false)
Definition FeedbackContext.cpp:184
FOnFinalizeSlowTask & OnFinalizeSlowTask()
Definition FeedbackContext.h:56
CORE_API void BeginSlowTask(const FText &Task, bool ShowProgressDialog, bool bShowCancelButton=false)
Definition FeedbackContext.cpp:210
void AddWarning(const FString &InWarning)
Definition FeedbackContext.h:225
UE_FORCEINLINE_HINT const FSlowTaskStack & GetScopeStack() const
Definition FeedbackContext.h:47
FOnStartSlowTaskWithGuid & OnStartSlowTaskWithGuid()
Definition FeedbackContext.h:59
CORE_API void FormatRecordLine(FStringBuilderBase &Out, const UE::FLogRecord &Record, ELogVerbosity::Type *OutVerbosity=nullptr) const
Definition FeedbackContext.cpp:124
virtual CORE_API ~FFeedbackContext()
Definition FeedbackContext.cpp:19
virtual void ProgressReported(const float TotalProgressInterp, FText DisplayMessage)
Definition FeedbackContext.h:103
void AddError(FString &&InError)
Definition FeedbackContext.h:245
void AddWarning(FString &&InWarning)
Definition FeedbackContext.h:230
bool TreatErrorsAsWarnings
Definition FeedbackContext.h:124
virtual TWeakPtr< class SBuildProgressWidget > ShowBuildProgressWindow()
Definition FeedbackContext.h:118
int32 GetNumWarnings() const
Definition FeedbackContext.h:135
TArray< TUniquePtr< FSlowTask > > LegacyAPIScopes
Definition FeedbackContext.h:213
CORE_API void StatusForceUpdate(int32 Numerator, int32 Denominator, const FText &StatusText)
Definition FeedbackContext.cpp:252
int32 GetNumErrors() const
Definition FeedbackContext.h:146
CORE_API void EndSlowTask()
Definition FeedbackContext.cpp:264
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition ScopeLock.h:141
Definition Text.h:385
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition SharedPointer.h:692
Definition SharedPointer.h:1295
Definition StructuredLog.h:182
Type
Definition LogVerbosity.h:17
static double Seconds()
Definition AndroidPlatformTime.h:20
Definition Guid.h:109
static CORE_API FGuid NewGuid()
Definition Guid.cpp:236
Definition SlowTaskStack.h:12
Definition SlowTask.h:29