// 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(InSession); IEditableThreadProvider& EditableThreadProvider = EditThreadProvider(Session); TSharedPtr TimingProfilerProvider = MakeShared(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& 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(GetTimingProfilerProviderName()); } IEditableTimingProfilerProvider* EditTimingProfilerProvider(IAnalysisSession& Session) { return Session.EditProvider(GetTimingProfilerProviderName()); } } // namespace TraceServices