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)