// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "ChartCreation.h" #include "Subsystems/GameInstanceSubsystem.h" #include "LyraPerformanceStatTypes.h" #include "LyraPerformanceStatSubsystem.generated.h" class ULyraPerformanceStatSubsystem; ////////////////////////////////////////////////////////////////////// // Observer which caches the stats for the previous frame struct FLyraPerformanceStatCache : public IPerformanceDataConsumer { public: FLyraPerformanceStatCache(ULyraPerformanceStatSubsystem* InSubsystem) : MySubsystem(InSubsystem) { } //~IPerformanceDataConsumer interface virtual void StartCharting() override; virtual void ProcessFrame(const FFrameData& FrameData) override; virtual void StopCharting() override; //~End of IPerformanceDataConsumer interface double GetCachedStat(ELyraDisplayablePerformanceStat Stat) const; protected: IPerformanceDataConsumer::FFrameData CachedData; ULyraPerformanceStatSubsystem* MySubsystem; float CachedServerFPS = 0.0f; float CachedPingMS = 0.0f; float CachedPacketLossIncomingPercent = 0.0f; float CachedPacketLossOutgoingPercent = 0.0f; float CachedPacketRateIncoming = 0.0f; float CachedPacketRateOutgoing = 0.0f; float CachedPacketSizeIncoming = 0.0f; float CachedPacketSizeOutgoing = 0.0f; }; ////////////////////////////////////////////////////////////////////// // Subsystem to allow access to performance stats for display purposes UCLASS(BlueprintType) class ULyraPerformanceStatSubsystem : public UGameInstanceSubsystem { GENERATED_BODY() public: UFUNCTION(BlueprintCallable) double GetCachedStat(ELyraDisplayablePerformanceStat Stat) const; //~USubsystem interface virtual void Initialize(FSubsystemCollectionBase& Collection) override; virtual void Deinitialize() override; //~End of USubsystem interface protected: TSharedPtr Tracker; };