4#include "Containers/Map.h"
6#include "Delegates/Delegate.h"
7#include "Delegates/DelegateCombinations.h"
8#include "HAL/CriticalSection.h"
9#include "HAL/Runnable.h"
10#include "HAL/ThreadSafeBool.h"
11#include "HAL/ThreadSafeCounter.h"
12#include "Misc/AssertionMacros.h"
13#include "UObject/NameTypes.h"
16#include "Unix/UnixSignalHeartBeat.h"
23DECLARE_DELEGATE_OneParam(FOnHangDelegate, uint32);
27
28
29
30
31
32
33
34
49
50
51
93 check(SuspendedCount > 0);
197
198
199
207
208
209
212
213
214
218
219
223
224
225
229
230
231
235
236
237
241
242
247
248
249
250
256
257
326#ifndef LOOKUP_SYMBOLS_IN_HITCH_STACK_WALK
327#define LOOKUP_SYMBOLS_IN_HITCH_STACK_WALK 0
330#ifndef WALK_STACK_ON_HITCH_DETECTED
331#define WALK_STACK_ON_HITCH_DETECTED 0
352#if WALK_STACK_ON_HITCH_DETECTED
353#if LOOKUP_SYMBOLS_IN_HITCH_STACK_WALK
383
384
388 double GetCurrentTime();
391
392
396
397
411typedef FUnixSignalGameHitchHeartBeat FGameThreadHitchHeartBeat;
#define UE_BUILD_SHIPPING
#define USE_HITCH_DETECTION
#define DECLARE_DELEGATE_OneParam(DelegateName, Param1Type)
FGameThreadHitchHeartBeatThreaded FGameThreadHitchHeartBeat
FWindowsCriticalSection FCriticalSection
FCriticalSection HeartBeatCritical
static FGameThreadHitchHeartBeatThreaded * Singleton
FGameThreadHitchHeartBeatThreaded()
void FrameStart(bool bSkipThisFrame=false)
FThreadHeartBeatClock Clock
FThreadSafeCounter StopTaskCounter
static FGameThreadHitchHeartBeatThreaded * GetNoInit()
static FGameThreadHitchHeartBeatThreaded & Get()
double GetFrameStartTime()
virtual ~FGameThreadHitchHeartBeatThreaded()
const uint64 MaxTimeStepCycles
uint64 LastRealTickCycles
FThreadHeartBeatClock(double InMaxTimeStep)
double CurrentStuckDuration
static FThreadHeartBeat * Singleton
FThreadSafeBool bReadyToCheckHeartbeat
void SetDurationMultiplier(double NewMultiplier)
double CurrentHangDuration
void MonitorCheckpointEnd(FName CheckPoint)
double ConfigStuckDuration
uint32 CheckFunctionHeartBeat(double &OutHangDuration)
uint32 GetLastHungThreadId() const
void HeartBeat(bool bReadConfig=false)
double ConfigHangDuration
FOnThreadStuck & GetOnThreadStuck()
FOnThreadUnstuck & GetOnThreadUnstuck()
virtual ~FThreadHeartBeat()
static FThreadHeartBeat & Get()
uint32 CheckCheckpointHeartBeat(double &OutHangDuration)
void MonitorFunctionStart()
void FORCENOINLINE OnPresentHang(double HangDuration)
FThreadSafeCounter GlobalSuspendCount
FThreadHeartBeatClock Clock
TMap< FName, FHeartBeatInfo > CheckpointHeartBeat
double GetHangDuration() const
double HangDurationMultiplier
double ConfigPresentDuration
uint32 LastHangCallstackCRC
FHeartBeatInfo PresentHeartBeat
void MonitorCheckpointStart(FName EndCheckPoint, double TimeToReachCheckpoint)
TMap< uint32, FHeartBeatInfo > FunctionHeartBeat
double CurrentPresentDuration
void SuspendHeartBeat(bool bAllThreads=false)
TMap< uint32, FHeartBeatInfo > ThreadHeartBeat
void FORCENOINLINE OnHang(double HangDuration, uint32 ThreadThatHung)
void MonitorFunctionEnd()
FCriticalSection CheckpointHeartBeatCritical
FCriticalSection FunctionHeartBeatCritical
void ResumeHeartBeat(bool bAllThreads=false)
uint32 GetLastStuckThreadId() const
FThreadSafeCounter StopTaskCounter
FCriticalSection HeartBeatCritical
static FThreadHeartBeat * GetNoInit()
FOnThreadUnstuck OnUnstuck
int32 CheckpointSuspendCount
uint32 CheckHeartBeat(double &OutHangDuration)
FORCEINLINE FDisableHitchDetectorScope()
FORCEINLINE ~FDisableHitchDetectorScope()
FORCEINLINE ~FFunctionHeartBeatScope()
FORCEINLINE FFunctionHeartBeatScope()
FORCEINLINE ~FSlowHeartBeatScope()
FORCEINLINE FSlowHeartBeatScope(bool bAllThreads=false)
bool bSuspendedAllThreads
void Resume(double CurrentTime)