47 lines
1.6 KiB
C++
47 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Subsystems/GameInstanceSubsystem.h"
|
|
#include "Tickable.h"
|
|
#include "IronsPerformanceSubsystem.generated.h"
|
|
|
|
// UE telemetry only. A negative value means that no valid measurement is available.
|
|
struct UEADAPTER_API FIronsPerformanceSnapshot
|
|
{
|
|
double Fps=-1,FrameMs=-1,GameMs=-1,RenderMs=-1,RhiMs=-1,GpuMs=-1;
|
|
int32 Samples=0;
|
|
uint64 Revision=0;
|
|
};
|
|
|
|
class UEADAPTER_API FIronsPerformanceWindow
|
|
{
|
|
struct FSample { double End=0,Seconds=0,Game=-1,Render=-1,Rhi=-1,Gpu=-1; };
|
|
TArray<FSample> Samples;
|
|
public:
|
|
void Reset();
|
|
void Add(double End,double Seconds,double Game,double Render,double Rhi,double Gpu);
|
|
FIronsPerformanceSnapshot Read(double Now) const;
|
|
};
|
|
|
|
UCLASS()
|
|
class UEADAPTER_API UIronsPerformanceSubsystem : public UGameInstanceSubsystem, public FTickableGameObject
|
|
{
|
|
GENERATED_BODY()
|
|
FIronsPerformanceWindow Window;
|
|
FIronsPerformanceSnapshot Snapshot,Raw;
|
|
TWeakObjectPtr<UWorld> SampleWorld;
|
|
double LastSampleTime=0,LastPublishTime=0;
|
|
uint64 LastFrame=MAX_uint64;
|
|
bool bInitialized=false;
|
|
public:
|
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
|
virtual void Deinitialize() override;
|
|
virtual void Tick(float DeltaTime) override;
|
|
virtual TStatId GetStatId() const override;
|
|
virtual bool IsTickable() const override;
|
|
virtual bool IsTickableWhenPaused() const override { return true; }
|
|
virtual UWorld* GetTickableGameObjectWorld() const override;
|
|
const FIronsPerformanceSnapshot& GetSnapshot() const { return Snapshot; }
|
|
const FIronsPerformanceSnapshot& GetRawSample() const { return Raw; }
|
|
};
|