Files
UnrealEngine/Engine/Source/Developer/Profiler/Private/Widgets/SProfilerGraphPanel.h
2025-05-18 13:04:45 +08:00

120 lines
3.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#if STATS
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "ProfilerManager.h"
#include "Widgets/SCompoundWidget.h"
class SDataGraph;
class SProfilerMiniView;
class SProfilerThreadView;
class SScrollBar;
/** A custom widget that acts as a container for widgets like SDataGraph or SEventTree. */
class SProfilerGraphPanel
: public SCompoundWidget
{
public:
/** Default constructor. */
SProfilerGraphPanel();
/** Virtual destructor. */
virtual ~SProfilerGraphPanel();
SLATE_BEGIN_ARGS(SProfilerGraphPanel){}
SLATE_END_ARGS()
/**
* Construct this widget
*
* @param InArgs The declaration data for this widget
*/
void Construct(const FArguments& InArgs);
TSharedPtr<SDataGraph>& GetMainDataGraph()
{
return DataGraph;
}
public:
//~ SWidget interface
virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override;
protected:
/** Called when the status of specified tracked stat has changed. */
void ProfilerManager_OnTrackedStatChanged(const TSharedPtr<FTrackedStat>& TrackedStat, bool bIsTracked);
/**
* Called when the user scrolls the scrollbar
*
* @param ScrollOffset Scroll offset as a fraction between 0 and 1.
*/
void HorizontalScrollBar_OnUserScrolled(float ScrollOffset);
void VerticalScrollBar_OnUserScrolled(float ScrollOffset);
/** Called when the frame offset has been changed in the data graph widget. */
void OnDataGraphGraphOffsetChanged(int32 InFrameOffset);
void ProfilerManager_OnViewModeChanged(EProfilerViewMode NewViewMode);
public:
/** Called when the selection box has been changed in the profiler mini-view widget. */
void MiniView_OnSelectionBoxChanged(int32 FrameStart, int32 FrameEnd);
void ThreadView_OnViewPositionXChanged(double FrameStartMS, double FrameEndMS, double MaxEndTimeMS, int32 FrameStart, int32 FrameEnd);
void ThreadView_OnViewPositionYChanged(double PosYStart, double PosYEnd, double MaxPosY);
protected:
/** Sets state of the scroll bar. */
void SetScrollBarState();
void UpdateInternals();
//protected:
public:
/** Holds the data graph widget. */
TSharedPtr<SDataGraph> DataGraph;
/** Holds the thread view widget. */
TSharedPtr<SProfilerThreadView> ThreadView;
/** Weak pointer to the profiler mini-view. */
TWeakPtr<SProfilerMiniView> ProfilerMiniView;
/** Temporary solution to avoid feedback loop when changing the selection box. */
bool bLockMiniViewState;
/** Horizontal scroll bar, used for scrolling graphs. */
TSharedPtr<SScrollBar> HorizontalScrollBar;
/** Vertical scroll bar, used for scrolling graphs. */
TSharedPtr<SScrollBar> VerticalScrollBar;
/** Number of graph points. */
int32 NumDataPoints;
/** Number of graph points that can be displayed at once in this widget. */
int32 NumVisiblePoints;
/** Current offset of the graph, index of the first visible graph point. */
int32 GraphOffset;
/** Current view mode. */
EProfilerViewMode ViewMode;
};
#endif // STATS