// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Insights/ITimingViewExtender.h" #include "Insights/ViewModels/TimingEventsTrack.h" #include "ChaosInsightsAnalysis/Model/LockRegions.h" namespace ChaosInsights { class FLockRegionsTrack; class FLockRegionsSharedState : public UE::Insights::Timing::ITimingViewExtender, public TSharedFromThis { friend class FLockRegionsTrack; public: virtual ~FLockRegionsSharedState() override; // ITimingViewExtender interface virtual void OnBeginSession(UE::Insights::Timing::ITimingViewSession& InSession) override; virtual void OnEndSession(UE::Insights::Timing::ITimingViewSession& InSession) override; virtual void Tick(UE::Insights::Timing::ITimingViewSession& InSession, const TraceServices::IAnalysisSession& InAnalysisSession) override; void ShowHideRegionsTrack(); bool IsRegionsTrackVisible() const; private: bool IsCurrentSession(UE::Insights::Timing::ITimingViewSession& Session); UE::Insights::Timing::ITimingViewSession* TimingView = nullptr; TSharedPtr LockRegionsTrack; bool bShowHideRegionsTrack = true; }; class FLockRegionsTrack : public FTimingEventsTrack { INSIGHTS_DECLARE_RTTI(FLockRegionsTrack, FTimingEventsTrack) public: FLockRegionsTrack(FLockRegionsSharedState& InSharedState); virtual ~FLockRegionsTrack() override; virtual void InitTooltip(FTooltipDrawState& InOutTooltip, const ITimingEvent& InTooltipEvent) const override; virtual const TSharedPtr SearchEvent(const FTimingEventSearchParameters& InSearchParameters) const override; virtual void BuildDrawState(ITimingEventsTrackDrawStateBuilder& Builder, const ITimingTrackUpdateContext& Context) override; protected: bool FindRegionEvent(const FTimingEventSearchParameters& InParameters, TFunctionRef InFoundPredicate) const; private: FLockRegionsSharedState& SharedState; TSharedPtr AnalysisSession; }; }