// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_7 #include "CoreMinimal.h" #include "Textures/SlateIcon.h" #endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_7 #include "IRewindDebuggerView.h" namespace TraceServices { class IAnalysisSession; } class IRewindDebugger; namespace RewindDebugger { class FRewindDebuggerTrack; struct FObjectId; struct FRewindDebuggerTrackType { FName Name; FText DisplayName; }; /** * Interface class which creates tracks */ class REWINDDEBUGGERINTERFACE_API IRewindDebuggerTrackCreator : public IModularFeature { public: static const FName ModularFeatureName; virtual ~IRewindDebuggerTrackCreator() {} /** @return name of the type of UObject this track creator can create tracks for */ FName GetTargetTypeName() const { return GetTargetTypeNameInternal(); } /** @return identifying Name for this type of track */ FName GetName() const { return GetNameInternal(); } /** @return integer representing the track priority. Higher values will show higher in the track list (default is 0) */ int32 GetSortOrderPriority() const { return GetSortOrderPriorityInternal(); } /** * Optional filter to prevent tracks from being listed if there is no data associated to the provided object identifier. * @return Whether the track should be created to represent data associated to the provided object identifier. */ bool HasDebugInfo(const FObjectId& ObjectId) const { return HasDebugInfoInternal(ObjectId); }; UE_DEPRECATED(5.7, "Use the version taking FObjectId instead") bool HasDebugInfo(uint64 ObjectId) const { PRAGMA_DISABLE_DEPRECATION_WARNINGS return HasDebugInfoInternal(ObjectId); PRAGMA_ENABLE_DEPRECATION_WARNINGS }; /** * Creates a track which will be shown in the timeline view and tree view, as a child track of the Object * @return the created child track */ TSharedPtr CreateTrack(const FObjectId& ObjectId) const { return CreateTrackInternal(ObjectId); } UE_DEPRECATED(5.7, "Use the version taking FObjectId instead") TSharedPtr CreateTrack(uint64 ObjectId) const { PRAGMA_DISABLE_DEPRECATION_WARNINGS return CreateTrackInternal(ObjectId); PRAGMA_ENABLE_DEPRECATION_WARNINGS } void GetTrackTypes(TArray& Types) const { return GetTrackTypesInternal(Types); }; /** @return Whether the track created can also represent non-UObject based children */ bool IsChildElementSupported() const { return IsChildElementSupportedInternal(); } private: /** get the UObject type name this Creator will create child tracks for */ virtual FName GetTargetTypeNameInternal() const { return "Object"; } /** get the Name (unique identifier) for this Creator */ virtual FName GetNameInternal() const { return FName(); } /** An integer to override sort order for tracks created by this Creator (Higher priority will make tracks appear higher in the list) */ virtual int32 GetSortOrderPriorityInternal() const { return 0; } /** Add track types that this Creator will create to the track type list */ virtual void GetTrackTypesInternal(TArray& Types) const { }; /** Returns true if this creator's track should be shown for this Object, false if there is no data and they should be hidden. */ virtual bool HasDebugInfoInternal(const FObjectId& InObjectId) const { return true; }; UE_DEPRECATED(5.7, "Use the version taking FObjectId instead") virtual bool HasDebugInfoInternal(uint64 InObjectId) const final { return true; }; virtual TSharedPtr CreateTrackInternal(const FObjectId& InObjectId) const { return TSharedPtr(); } UE_DEPRECATED(5.7, "Use the version taking FObjectId instead") virtual TSharedPtr CreateTrackInternal(uint64 InObjectId) const final { return TSharedPtr(); } virtual bool IsChildElementSupportedInternal() const { return false; } }; } // namespace RewindDebugger