// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" // Insights #include "Insights/ViewModels/BaseTimingTrack.h" //////////////////////////////////////////////////////////////////////////////////////////////////// class TRACEINSIGHTS_API ITimingEventsTrackDrawStateBuilder { public: typedef TFunctionRef GetEventNameCallback; public: virtual ~ITimingEventsTrackDrawStateBuilder() = default; virtual void AddEvent(double InEventStartTime, double InEventEndTime, uint32 InEventDepth, const TCHAR* InEventName, uint64 InEventType = 0, uint32 InEventColor = 0) = 0; virtual void AddEvent(double InEventStartTime, double InEventEndTime, uint32 InEventDepth, uint32 InEventColor, GetEventNameCallback InGetEventNameCallback) = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////////// class TRACEINSIGHTS_API FTimingEventsTrack: public FBaseTimingTrack { INSIGHTS_DECLARE_RTTI(FTimingEventsTrack, FBaseTimingTrack) public: explicit FTimingEventsTrack(); explicit FTimingEventsTrack(const FString& InTrackName); virtual ~FTimingEventsTrack(); ////////////////////////////////////////////////// // FBaseTimingTrack virtual void Reset() override; virtual void PreUpdate(const ITimingTrackUpdateContext& Context) override; virtual void PostUpdate(const ITimingTrackUpdateContext& Context) override; virtual void Draw(const ITimingTrackDrawContext& Context) const override; virtual void DrawEvent(const ITimingTrackDrawContext& Context, const ITimingEvent& InTimingEvent, EDrawEventMode InDrawMode) const override; virtual const TSharedPtr GetEvent(float InPosX, float InPosY, const FTimingTrackViewport& Viewport) const override; virtual TSharedPtr GetFilterByEvent(const TSharedPtr InTimingEvent) const override; ////////////////////////////////////////////////// virtual void BuildDrawState(ITimingEventsTrackDrawStateBuilder& Builder, const ITimingTrackUpdateContext& Context) = 0; virtual void BuildFilteredDrawState(ITimingEventsTrackDrawStateBuilder& Builder, const ITimingTrackUpdateContext& Context) {} protected: int32 GetNumLanes() const { return NumLanes; } void SetNumLanes(int32 InNumLanes) { NumLanes = InNumLanes; } void UpdateTrackHeight(const ITimingTrackUpdateContext& Context); void DrawEvents(const ITimingTrackDrawContext& Context, const float OffsetY = 1.0f) const; void DrawHeader(const ITimingTrackDrawContext& Context) const; void DrawMarkers(const ITimingTrackDrawContext& Context, float LineY, float LineH) const; int32 GetHeaderBackgroundLayerId(const ITimingTrackDrawContext& Context) const; int32 GetHeaderTextLayerId(const ITimingTrackDrawContext& Context) const; virtual const TSharedPtr GetEvent(double InTime, double SecondsPerPixel, int32 Depth) const; private: int32 NumLanes; // number of lanes (sub-tracks) TSharedRef DrawState; TSharedRef FilteredDrawState; struct FFilteredDrawStateInfo { double ViewportStartTime = 0.0; double ViewportScaleX = 0.0; double LastBuildDuration = 0.0; TWeakPtr LastEventFilter; uint32 LastFilterChangeNumber = 0; uint32 Counter = 0; mutable float Opacity = 0.0f; }; FFilteredDrawStateInfo FilteredDrawStateInfo; public: static bool bUseDownSampling; // toggle to enable/disable downsampling, for debugging purposes only }; ////////////////////////////////////////////////////////////////////////////////////////////////////