// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" // Insights #include "Insights/ITimingViewExtender.h" #include "Insights/MemoryProfiler/ViewModels/MemoryGraphTrack.h" #include "Insights/MemoryProfiler/ViewModels/MemoryTag.h" class FTimingEventSearchParameters; class FTimingGraphSeries; class FTimingGraphTrack; class STimingView; namespace Insights { struct FReportConfig; struct FReportTypeConfig; struct FReportTypeGraphConfig; class FMemoryTracker; } // namespace Insights //////////////////////////////////////////////////////////////////////////////////////////////////// class FMemorySharedState: public Insights::ITimingViewExtender , public TSharedFromThis { public: FMemorySharedState(); virtual ~FMemorySharedState(); TSharedPtr GetTimingView() const { return TimingView; } void SetTimingView(TSharedPtr InTimingView) { TimingView = InTimingView; } const Insights::FMemoryTagList& GetTagList() { return TagList; } const TArray>& GetTrackers() const { return Trackers; } TSharedPtr GetCurrentTracker() const { return CurrentTracker; } void SetCurrentTracker(TSharedPtr Tracker) { CurrentTracker = Tracker; OnTrackerChanged(); } FString TrackersToString(uint64 Flags, const TCHAR* Conjunction) const; TSharedPtr GetMainGraphTrack() const { return MainGraphTrack; } EMemoryTrackHeightMode GetTrackHeightMode() const { return TrackHeightMode; } void SetTrackHeightMode(EMemoryTrackHeightMode InTrackHeightMode); // ITimingViewExtender virtual void OnBeginSession(Insights::ITimingViewSession& InSession) override; virtual void OnEndSession(Insights::ITimingViewSession& InSession) override; virtual void Tick(Insights::ITimingViewSession& InSession, const Trace::IAnalysisSession& InAnalysisSession) override; virtual void ExtendFilterMenu(Insights::ITimingViewSession& InSession, FMenuBuilder& InMenuBuilder) override; bool IsAllMemoryTracksToggleOn() const { return bShowHideAllMemoryTracks; } void SetAllMemoryTracksToggle(bool bOnOff); void ShowAllMemoryTracks() { SetAllMemoryTracksToggle(true); } void HideAllMemoryTracks() { SetAllMemoryTracksToggle(false); } void ShowHideAllMemoryTracks() { SetAllMemoryTracksToggle(!IsAllMemoryTracksToggleOn()); } void CreateDefaultTracks(); TSharedPtr CreateMemoryGraphTrack(); int32 RemoveMemoryGraphTrack(TSharedPtr GraphTrack); int32 RemoveAllMemoryGraphTracks(); TSharedPtr GetMemTagGraphTrack(Insights::FMemoryTagId MemTagId); TSharedPtr CreateMemTagGraphTrack(Insights::FMemoryTagId MemTagId); void RemoveTrackFromMemTags(TSharedPtr& GraphTrack); int32 RemoveMemTagGraphTrack(Insights::FMemoryTagId MemTagId); int32 RemoveUnusedMemTagGraphTracks(); TSharedPtr ToggleMemTagGraphSeries(TSharedPtr GraphTrack, Insights::FMemoryTagId MemTagId); void CreateTracksFromReport(const FString& Filename); void CreateTracksFromReport(const Insights::FReportConfig& ReportConfig); void CreateTracksFromReport(const Insights::FReportTypeConfig& ReportTypeConfig); private: void SyncTrackers(); void OnTrackerChanged(); void SetTrackerIdToAllSeries(TSharedPtr& GraphTrack, Insights::FMemoryTrackerId TrackerId); int32 GetNextMemoryGraphTrackOrder(); TSharedPtr CreateGraphTrack(const Insights::FReportTypeGraphConfig& ReportTypeGraphConfig); private: TSharedPtr TimingView; Insights::FMemoryTagList TagList; TArray> Trackers; TSharedPtr DefaultTracker; TSharedPtr CurrentTracker; TSharedPtr MainGraphTrack; // the Main Memory Graph track TSet> AllTracks; EMemoryTrackHeightMode TrackHeightMode; bool bShowHideAllMemoryTracks; TBitArray<> CreatedDefaultTracks; }; ////////////////////////////////////////////////////////////////////////////////////////////////////