1818
1919void USlotDataTask_Saver::OnStart ()
2020{
21+ TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::OnStart);
2122 USaveManager* Manager = GetManager ();
2223 Manager->TryInstantiateInfo ();
2324
@@ -107,6 +108,7 @@ void USlotDataTask_Saver::OnStart()
107108
108109void USlotDataTask_Saver::Tick (float DeltaTime)
109110{
111+ TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::Tick);
110112 Super::Tick (DeltaTime);
111113
112114 if (SaveTask && SaveTask->IsDone ())
@@ -127,6 +129,7 @@ void USlotDataTask_Saver::Tick(float DeltaTime)
127129
128130void USlotDataTask_Saver::OnFinish (bool bSuccess)
129131{
132+ TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::OnFinish);
130133 if (bSuccess)
131134 {
132135 // Clean serialization data
@@ -158,6 +161,7 @@ void USlotDataTask_Saver::BeginDestroy()
158161
159162void USlotDataTask_Saver::SerializeSync ()
160163{
164+ TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::SerializeSync);
161165 // Has Authority
162166 if (GetWorld ()->GetAuthGameMode ())
163167 {
@@ -168,8 +172,9 @@ void USlotDataTask_Saver::SerializeSync()
168172
169173void USlotDataTask_Saver::SerializeWorld ()
170174{
171- const UWorld* World = GetWorld ( );
175+ TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::SerializeWorld );
172176
177+ const UWorld* World = GetWorld ();
173178 SELog (Preset, " World '" + World->GetName () + " '" , FColor::Green, false , 1 );
174179
175180 BakeAllFilters ();
@@ -196,6 +201,7 @@ void USlotDataTask_Saver::SerializeWorld()
196201
197202void USlotDataTask_Saver::SerializeLevelSync (const ULevel* Level, int32 AssignedTasks, const ULevelStreaming* StreamingLevel)
198203{
204+ TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::SerializeLevelSync);
199205 check (IsValid (Level));
200206
201207 if (!Preset->IsMTSerializationSave ())
@@ -234,16 +240,22 @@ void USlotDataTask_Saver::SerializeLevelSync(const ULevel* Level, int32 Assigned
234240 const int32 NumRemaining = ActorCount - Index;
235241 const int32 NumToSerialize = FMath::Min (NumRemaining, NumPerTask);
236242
243+ // First task saves the GameInstance
244+ bool bStoreGameInstance = Index <= 0 && SlotData->bStoreGameInstance ;
237245 // Add new Task
238- Tasks.Emplace (FMTTask_SerializeActors{
239- GetWorld (), SlotData, &Level->Actors , Index, NumToSerialize, LevelRecord, Filter});
246+ Tasks.Emplace (FMTTask_SerializeActors
247+ {
248+ GetWorld (), SlotData, &Level->Actors , Index, NumToSerialize,
249+ bStoreGameInstance, LevelRecord, Filter
250+ });
240251
241252 Index += NumToSerialize;
242253 }
243254}
244255
245256void USlotDataTask_Saver::RunScheduledTasks ()
246257{
258+ TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::RunScheduledTasks);
247259 // Start all serialization tasks
248260 if (Tasks.Num () > 0 )
249261 {
@@ -272,6 +284,7 @@ void USlotDataTask_Saver::RunScheduledTasks()
272284
273285void USlotDataTask_Saver::SaveFile ()
274286{
287+ TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::SaveFile);
275288 USaveManager* Manager = GetManager ();
276289
277290 SaveTask = new FAsyncTask<FSaveFileTask>(
0 commit comments