Add options to the Insights Status Bar Widget

#rb Ionut.Matasaru
#jira UE-161773
#preflight 636e5b00ee4d25f90af1325a

[CL 23097615 by Catalin Dragoiu in ue5-main branch]
This commit is contained in:
Catalin Dragoiu
2022-11-11 09:46:20 -05:00
parent 12dafcca02
commit 2c65745543
7 changed files with 305 additions and 82 deletions
@@ -80,25 +80,26 @@ enum class ETraceConnectType
class FTraceAuxiliaryImpl
{
public:
const TCHAR* GetDest() const;
bool IsConnected() const;
void GetActiveChannelsString(FStringBuilderBase& String) const;
void AddCommandlineChannels(const TCHAR* ChannelList);
void ResetCommandlineChannels();
bool HasCommandlineChannels() const { return !CommandlineChannels.IsEmpty(); }
void EnableChannels(const TCHAR* ChannelList);
void DisableChannels(const TCHAR* ChannelList);
bool Connect(ETraceConnectType Type, const TCHAR* Parameter, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
bool Stop();
void ResumeChannels();
void PauseChannels();
void EnableCommandlineChannels();
void EnableCommandlineChannelsPostInitialize();
void SetTruncateFile(bool bTruncateFile);
void UpdateCsvStats() const;
void StartWorkerThread();
void StartEndFramePump();
bool WriteSnapshot(const TCHAR* InFilePath, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
const TCHAR* GetDest() const;
bool IsConnected() const;
FTraceAuxiliary::EConnectionType GetConnectionType() const;
void GetActiveChannelsString(FStringBuilderBase& String) const;
void AddCommandlineChannels(const TCHAR* ChannelList);
void ResetCommandlineChannels();
bool HasCommandlineChannels() const { return !CommandlineChannels.IsEmpty(); }
void EnableChannels(const TCHAR* ChannelList);
void DisableChannels(const TCHAR* ChannelList);
bool Connect(ETraceConnectType Type, const TCHAR* Parameter, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
bool Stop();
void ResumeChannels();
void PauseChannels();
void EnableCommandlineChannels();
void EnableCommandlineChannelsPostInitialize();
void SetTruncateFile(bool bTruncateFile);
void UpdateCsvStats() const;
void StartWorkerThread();
void StartEndFramePump();
bool WriteSnapshot(const TCHAR* InFilePath, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
// True if this is parent process with forking requested before forking.
bool IsParentProcessAndPreFork();
@@ -112,28 +113,28 @@ private:
struct FChannelEntry
{
FString Name;
bool bActive = false;
FString Name;
bool bActive = false;
};
void AddChannel(const TCHAR* Name);
void RemoveChannel(const TCHAR* Name);
void AddChannel(const TCHAR* Name);
void RemoveChannel(const TCHAR* Name);
template <class T> void ForEachChannel(const TCHAR* ChannelList, bool bResolvePresets, T Callable);
static uint32 HashChannelName(const TCHAR* Name);
bool EnableChannel(const TCHAR* Channel);
void DisableChannel(const TCHAR* Channel);
bool SendToHost(const TCHAR* Host, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
bool WriteToFile(const TCHAR* Path, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
bool FinalizeFilePath(const TCHAR* InPath, FString& OutPath, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
static uint32 HashChannelName(const TCHAR* Name);
bool EnableChannel(const TCHAR* Channel);
void DisableChannel(const TCHAR* Channel);
bool SendToHost(const TCHAR* Host, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
bool WriteToFile(const TCHAR* Path, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
bool FinalizeFilePath(const TCHAR* InPath, FString& OutPath, const FTraceAuxiliary::FLogCategoryAlias& LogCategory);
typedef TMap<uint32, FChannelEntry, TInlineSetAllocator<128>> ChannelSet;
ChannelSet CommandlineChannels;
FString TraceDest;
FTraceAuxiliary::EConnectionType TraceType = FTraceAuxiliary::EConnectionType::None;
std::atomic<EState> State = EState::Stopped;
bool bTruncateFile = false;
bool bWorkerThreadStarted = false;
FString PausedPreset;
ChannelSet CommandlineChannels;
FString TraceDest;
std::atomic<FTraceAuxiliary::EConnectionType> TraceType = FTraceAuxiliary::EConnectionType::None;
std::atomic<EState> State = EState::Stopped;
bool bTruncateFile = false;
bool bWorkerThreadStarted = false;
FString PausedPreset;
};
static FTraceAuxiliaryImpl GTraceAuxiliary;
@@ -291,7 +292,7 @@ bool FTraceAuxiliaryImpl::Connect(ETraceConnectType Type, const TCHAR* Parameter
UE_LOG_REF(LogCategory, Error, TEXT("Trace failed to connect (trace server: %s)!"), Parameter ? Parameter : TEXT(""));
}
TraceType = FTraceAuxiliary::EConnectionType::Network;
TraceType.store(FTraceAuxiliary::EConnectionType::Network);
}
else if (Type == ETraceConnectType::File)
@@ -306,12 +307,12 @@ bool FTraceAuxiliaryImpl::Connect(ETraceConnectType Type, const TCHAR* Parameter
UE_LOG_REF(LogCategory, Error, TEXT("Trace failed to connect (file: \"%s\")!"), Parameter ? Parameter : TEXT(""));
}
TraceType = FTraceAuxiliary::EConnectionType::File;
TraceType.store(FTraceAuxiliary::EConnectionType::File);
}
if (bConnected)
{
FTraceAuxiliary::OnTraceStarted.Broadcast(TraceType, TraceDest);
FTraceAuxiliary::OnTraceStarted.Broadcast(TraceType.load(), TraceDest);
}
}
@@ -337,10 +338,10 @@ bool FTraceAuxiliaryImpl::Stop()
return false;
}
FTraceAuxiliary::OnTraceStopped.Broadcast(TraceType, TraceDest);
FTraceAuxiliary::OnTraceStopped.Broadcast(TraceType.load(), TraceDest);
State.store(EState::Stopped);
TraceType = FTraceAuxiliary::EConnectionType::None;
TraceType.store(FTraceAuxiliary::EConnectionType::None);
TraceDest.Reset();
return true;
}
@@ -564,6 +565,7 @@ bool FTraceAuxiliaryImpl::WriteSnapshot(const TCHAR* InFilePath, const FTraceAux
if (bResult)
{
FTraceAuxiliary::OnSnapshotSaved.Broadcast(NativePath);
UE_LOG_REF(LogCategory, Display, TEXT("Trace snapshot generated in %.3f seconds to \"%s\"."), FPlatformTime::Seconds() - StartTime, *NativePath);
}
else
@@ -586,6 +588,12 @@ bool FTraceAuxiliaryImpl::IsConnected() const
return State.load() == EState::Tracing;
}
////////////////////////////////////////////////////////////////////////////////
FTraceAuxiliary::EConnectionType FTraceAuxiliaryImpl::GetConnectionType() const
{
return TraceType.load();
}
////////////////////////////////////////////////////////////////////////////////
void FTraceAuxiliaryImpl::GetActiveChannelsString(FStringBuilderBase& String) const
{
@@ -1265,6 +1273,7 @@ static bool StartFromCommandlineArguments(const TCHAR* CommandLine, bool& bOutSt
FTraceAuxiliary::FOnConnection FTraceAuxiliary::OnConnection;
FTraceAuxiliary::FOnTraceStarted FTraceAuxiliary::OnTraceStarted;
FTraceAuxiliary::FOnTraceStopped FTraceAuxiliary::OnTraceStopped;
FTraceAuxiliary::FOnSnapshotSaved FTraceAuxiliary::OnSnapshotSaved;
////////////////////////////////////////////////////////////////////////////////
bool FTraceAuxiliary::Start(EConnectionType Type, const TCHAR* Target, const TCHAR* Channels, FOptions* Options, const FLogCategoryAlias& LogCategory)
@@ -1596,6 +1605,14 @@ bool FTraceAuxiliary::IsConnected()
return false;
}
FTraceAuxiliary::EConnectionType FTraceAuxiliary::GetConnectionType()
{
#if UE_TRACE_ENABLED
return GTraceAuxiliary.GetConnectionType();
#endif
return FTraceAuxiliary::EConnectionType::None;
}
void FTraceAuxiliary::GetActiveChannelsString(FStringBuilderBase& String)
{
#if UE_TRACE_ENABLED
@@ -55,6 +55,12 @@ public:
*/
DECLARE_TS_MULTICAST_DELEGATE_TwoParams(FOnTraceStopped, FTraceAuxiliary::EConnectionType TraceType, const FString& TraceDestination);
/**
* Callback whenever a trace snapshot is saved.
* Path is the file system path of the snapshot file.
*/
DECLARE_TS_MULTICAST_DELEGATE_OneParam(FOnSnapshotSaved, const FString& Path);
struct FOptions
{
/** When set, trace will not start a worker thread, instead it is updated from end frame delegate. */
@@ -143,6 +149,11 @@ public:
*/
static bool IsConnected();
/**
* Returns the current connection type.
*/
static EConnectionType GetConnectionType();
/**
* Adds a comma separated list of currently active channels to the passed in StringBuilder
*/
@@ -174,5 +185,11 @@ public:
* The type of recording and the destination (filepath or network) is passed to the delegate.
*/
static FOnTraceStopped OnTraceStopped;
/**
* Delegate that triggers when a snapshot has been saved.
* The path to the snapshot file is passed to the delegate.
*/
static FOnSnapshotSaved OnSnapshotSaved;
};