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

80 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "VisualizerEvents.h"
#if defined( _WIN64 )
static_assert(sizeof(FVisualizerEvent) == 88, "FVisualizerEvent size has changed. Please update the save/load functions");
#endif
TSharedPtr< FVisualizerEvent > FVisualizerEvent::LoadVisualizerEventRecursively(FArchive *Ar, TSharedPtr< FVisualizerEvent > InParentEvent)
{
double Start;
double Duration;
double DurationMs;
int32 Category;
FString EventName;
bool IsSelected;
*Ar << Start;
*Ar << Duration;
*Ar << DurationMs;
*Ar << Category;
*Ar << EventName;
*Ar << IsSelected;
TSharedPtr< FVisualizerEvent > VisualizerEvent(new FVisualizerEvent(Start, Duration,DurationMs,Category,EventName));
VisualizerEvent->ParentEvent = InParentEvent;
uint32 NumChildren;
Ar->SerializeInt(NumChildren, MAX_uint32);
VisualizerEvent->Children.Reserve(NumChildren);
for (uint32 i = 0; i < NumChildren; ++i)
{
TSharedPtr< FVisualizerEvent > ChildEvent = LoadVisualizerEventRecursively(Ar, VisualizerEvent);
VisualizerEvent->Children.Add(ChildEvent);
}
return VisualizerEvent;
}
TSharedPtr< FVisualizerEvent > FVisualizerEvent::LoadVisualizerEvent(FArchive *Ar)
{
//FArchive Ar;
// Assumption: InProfileData contains only one (root) element. Otherwise an extra FVisualizerEvent root event is required.
TSharedPtr< FVisualizerEvent > DummyRoot;
// Recursively create visualizer event data.
TSharedPtr< FVisualizerEvent > StatEvents(LoadVisualizerEventRecursively( Ar, DummyRoot));
return StatEvents;
}
void FVisualizerEvent::SaveVisualizerEventRecursively(FArchive *Ar, TSharedPtr< FVisualizerEvent > VisualizerEvent )
{
//Write all simple members
*Ar << VisualizerEvent->Start;
*Ar << VisualizerEvent->Duration;
*Ar << VisualizerEvent->DurationMs;
*Ar << VisualizerEvent->Category;
*Ar << VisualizerEvent->EventName;
*Ar << VisualizerEvent->IsSelected;
uint32 NumChildren;
NumChildren = VisualizerEvent->Children.Num();
Ar->SerializeInt(NumChildren, MAX_uint32);
for(uint32 i = 0; i < NumChildren; ++i)
{
TSharedPtr< FVisualizerEvent > Child;
Child = VisualizerEvent->Children[i];
SaveVisualizerEventRecursively(Ar, Child);
}
}