Files
UnrealEngine/Engine/Source/Developer/TraceServices/Private/Modules/TimingProfilerModule.cpp
2025-05-18 13:04:45 +08:00

62 lines
2.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "TimingProfilerModule.h"
#include "AnalysisServicePrivate.h"
#include "Analyzers/CpuProfilerTraceAnalysis.h"
#include "Analyzers/GpuProfilerTraceAnalysis.h"
#include "Analyzers/VerseTraceAnalysis.h"
#include "Model/CountersPrivate.h"
#include "Model/ThreadsPrivate.h"
#include "Model/TimingProfilerPrivate.h"
namespace TraceServices
{
void FTimingProfilerModule::GetModuleInfo(FModuleInfo& OutModuleInfo)
{
static const FName TimingProfilerModuleName("TraceModule_TimingProfiler");
OutModuleInfo.Name = TimingProfilerModuleName;
OutModuleInfo.DisplayName = TEXT("Timing");
}
void FTimingProfilerModule::OnAnalysisBegin(IAnalysisSession& InSession)
{
FAnalysisSession& Session = static_cast<FAnalysisSession&>(InSession);
IEditableThreadProvider& EditableThreadProvider = EditThreadProvider(Session);
TSharedPtr<FTimingProfilerProvider> TimingProfilerProvider = MakeShared<FTimingProfilerProvider>(Session);
Session.AddProvider(GetTimingProfilerProviderName(), TimingProfilerProvider, TimingProfilerProvider);
Session.AddAnalyzer(new FCpuProfilerAnalyzer(Session, *TimingProfilerProvider, EditableThreadProvider));
Session.AddAnalyzer(new FGpuProfilerAnalyzer(Session, *TimingProfilerProvider, EditCounterProvider(Session)));
#if UE_EXPERIMENTAL_VERSE_INSIGHTS_ENABLED
Session.AddAnalyzer(new FVerseAnalyzer(Session, *TimingProfilerProvider));
#endif
}
void FTimingProfilerModule::GetLoggers(TArray<const TCHAR*>& OutLoggers)
{
OutLoggers.Add(TEXT("CpuProfiler"));
OutLoggers.Add(TEXT("GpuProfiler"));
}
FName GetTimingProfilerProviderName()
{
static const FName Name("TimingProfilerProvider");
return Name;
}
const ITimingProfilerProvider* ReadTimingProfilerProvider(const IAnalysisSession& Session)
{
return Session.ReadProvider<ITimingProfilerProvider>(GetTimingProfilerProviderName());
}
IEditableTimingProfilerProvider* EditTimingProfilerProvider(IAnalysisSession& Session)
{
return Session.EditProvider<IEditableTimingProfilerProvider>(GetTimingProfilerProviderName());
}
} // namespace TraceServices