// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" // TraceInsights #include "Insights/ITimingViewSession.h" // for ETimeChangedFlags #include "Insights/Widgets/SMajorTabWindow.h" namespace UE::Insights { class SUntypedTableTreeView; } namespace UE::Insights::TimingProfiler { class STimingView; } namespace UE::Insights::LoadingProfiler { //////////////////////////////////////////////////////////////////////////////////////////////////// /** Implements the Asset Loading Insights window. */ class SLoadingProfilerWindow : public ::Insights::SMajorTabWindow { public: /** Default constructor. */ SLoadingProfilerWindow(); /** Virtual destructor. */ virtual ~SLoadingProfilerWindow(); SLATE_BEGIN_ARGS(SLoadingProfilerWindow) {} SLATE_END_ARGS() virtual void Reset() override; void UpdateTableTreeViews(); void UpdateEventAggregationTreeView(); void UpdateObjectTypeAggregationTreeView(); void UpdatePackageDetailsTreeView(); void UpdateExportDetailsTreeView(); void UpdateRequestsTreeView(); /** Constructs this widget. */ void Construct(const FArguments& InArgs, const TSharedRef& ConstructUnderMajorTab, const TSharedPtr& ConstructUnderWindow); TSharedPtr GetTimingView() const { return TimingView; } TSharedPtr GetEventAggregationTreeView() const { return EventAggregationTreeView; } TSharedPtr GetObjectTypeAggregationTreeView() const { return ObjectTypeAggregationTreeView; } TSharedPtr GetPackageDetailsTreeView() const { return PackageDetailsTreeView; } TSharedPtr GetExportDetailsTreeView() const { return ExportDetailsTreeView; } TSharedPtr GetRequestsTreeView() const { return RequestsTreeView; } protected: virtual const TCHAR* GetAnalyticsEventName() const override; virtual TSharedRef CreateWorkspaceMenuGroup() override; virtual void RegisterTabSpawners() override; virtual TSharedRef CreateDefaultTabLayout() const override; virtual TSharedRef CreateToolbar(TSharedPtr Extender); private: TSharedRef SpawnTab_TimingView(const FSpawnTabArgs& Args); void OnTimingViewTabClosed(TSharedRef TabBeingClosed); TSharedRef SpawnTab_EventAggregationTreeView(const FSpawnTabArgs& Args); void OnEventAggregationTreeViewTabClosed(TSharedRef TabBeingClosed); TSharedRef SpawnTab_ObjectTypeAggregationTreeView(const FSpawnTabArgs& Args); void OnObjectTypeAggregationTreeViewTabClosed(TSharedRef TabBeingClosed); TSharedRef SpawnTab_PackageDetailsTreeView(const FSpawnTabArgs& Args); void OnPackageDetailsTreeViewTabClosed(TSharedRef TabBeingClosed); TSharedRef SpawnTab_ExportDetailsTreeView(const FSpawnTabArgs& Args); void OnExportDetailsTreeViewTabClosed(TSharedRef TabBeingClosed); TSharedRef SpawnTab_RequestsTreeView(const FSpawnTabArgs& Args); void OnRequestsTreeViewTabClosed(TSharedRef TabBeingClosed); void OnTimeSelectionChanged(Timing::ETimeChangedFlags InFlags, double InStartTime, double InEndTime); private: /** The Timing view (multi-track) widget */ TSharedPtr TimingView; /** The Event Aggregation tree view widget */ TSharedPtr EventAggregationTreeView; /** The Object Type Aggregation tree view widget */ TSharedPtr ObjectTypeAggregationTreeView; /** The Package Details tree view widget */ TSharedPtr PackageDetailsTreeView; /** The Export Details tree view widget */ TSharedPtr ExportDetailsTreeView; /** The Requests tree view widget */ TSharedPtr RequestsTreeView; double SelectionStartTime; double SelectionEndTime; }; //////////////////////////////////////////////////////////////////////////////////////////////////// } // namespace UE::Insights::LoadingProfiler