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

142 lines
5.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "TraceServices/ITraceServicesModule.h"
#include "AnalysisServicePrivate.h"
#include "Features/IModularFeatures.h"
#include "HAL/LowLevelMemTracker.h"
#include "ModuleServicePrivate.h"
#include "Modules/CookProfilerModule.h"
#include "Modules/CountersModule.h"
#include "Modules/CsvProfilerModule.h"
#include "Modules/DiagnosticsModule.h"
#include "Modules/LoadTimeProfilerModule.h"
#include "Modules/MemoryModule.h"
#include "Modules/ModuleManager.h"
#include "Modules/NetProfilerModule.h"
#include "Modules/PlatformEventsModule.h"
#include "Modules/StatsModule.h"
#include "Modules/TasksModule.h"
#include "Modules/TimingProfilerModule.h"
#include "Stats/StatsTrace.h"
LLM_DEFINE_TAG(Insights_TraceServices, NAME_None, TEXT("Insights"));
class FTraceServicesModule
: public ITraceServicesModule
{
public:
virtual TSharedPtr<TraceServices::IAnalysisService> GetAnalysisService() override;
virtual TSharedPtr<TraceServices::IModuleService> GetModuleService() override;
virtual TSharedPtr<TraceServices::IAnalysisService> CreateAnalysisService() override;
virtual TSharedPtr<TraceServices::IModuleService> CreateModuleService() override;
virtual void StartupModule() override;
virtual void ShutdownModule() override;
private:
TSharedPtr<TraceServices::FAnalysisService> AnalysisService;
TSharedPtr<TraceServices::FModuleService> ModuleService;
TraceServices::FTimingProfilerModule TimingProfilerModule;
TraceServices::FLoadTimeProfilerModule LoadTimeProfilerModule;
TraceServices::FStatsModule StatsModule;
TraceServices::FCsvProfilerModule CsvProfilerModule;
TraceServices::FCountersModule CountersModule;
TraceServices::FNetProfilerModule NetProfilerModule;
TraceServices::FMemoryModule MemoryModule;
TraceServices::FDiagnosticsModule DiagnosticsModule;
TraceServices::FPlatformEventsModule PlatformEventsModule;
TraceServices::FTasksModule TasksModule;
TraceServices::FCookProfilerModule CookProfilingModule;
};
TSharedPtr<TraceServices::IAnalysisService> FTraceServicesModule::GetAnalysisService()
{
if (!AnalysisService.IsValid())
{
GetModuleService();
LLM_SCOPE_BYTAG(Insights_TraceServices);
AnalysisService = MakeShared<TraceServices::FAnalysisService>(*ModuleService.Get());
}
return AnalysisService;
}
TSharedPtr<TraceServices::IModuleService> FTraceServicesModule::GetModuleService()
{
if (!ModuleService.IsValid())
{
LLM_SCOPE_BYTAG(Insights_TraceServices);
ModuleService = MakeShared<TraceServices::FModuleService>();
}
return ModuleService;
}
TSharedPtr<TraceServices::IAnalysisService> FTraceServicesModule::CreateAnalysisService()
{
checkf(!AnalysisService.IsValid(), TEXT("A AnalysisService already exists."));
GetModuleService();
{
LLM_SCOPE_BYTAG(Insights_TraceServices);
AnalysisService = MakeShared<TraceServices::FAnalysisService>(*ModuleService.Get());
}
return AnalysisService;
}
TSharedPtr<TraceServices::IModuleService> FTraceServicesModule::CreateModuleService()
{
checkf(!ModuleService.IsValid(), TEXT("A ModuleService already exists."));
{
LLM_SCOPE_BYTAG(Insights_TraceServices);
ModuleService = MakeShared<TraceServices::FModuleService>();
}
return ModuleService;
}
void FTraceServicesModule::StartupModule()
{
LLM_SCOPE_BYTAG(Insights_TraceServices);
// Load the analysis module.
IModuleInterface& TraceAnalysisModule = FModuleManager::LoadModuleChecked<IModuleInterface>("TraceAnalysis");
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &TimingProfilerModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &CsvProfilerModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &CountersModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &NetProfilerModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &DiagnosticsModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &PlatformEventsModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &StatsModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &LoadTimeProfilerModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &MemoryModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &TasksModule);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &CookProfilingModule);
}
void FTraceServicesModule::ShutdownModule()
{
LLM_SCOPE_BYTAG(Insights_TraceServices);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &CookProfilingModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &TasksModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &MemoryModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &LoadTimeProfilerModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &StatsModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &PlatformEventsModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &DiagnosticsModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &NetProfilerModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &CountersModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &CsvProfilerModule);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &TimingProfilerModule);
AnalysisService.Reset();
ModuleService.Reset();
}
IMPLEMENT_MODULE(FTraceServicesModule, TraceServices)