void FScriptExecutionBlueprint::RefreshStats(const FTracePath& TracePath) { TArray<TSharedPtr<FScriptPerfData>> InstanceData; // Update event stats for (auto BlueprintEventIter : ChildNodes) { // This crawls through and updates all instance stats and pools the results into the blueprint node stats // as an overall blueprint performance representation. BlueprintEventIter->RefreshStats(TracePath); } // Update instance stats for (auto InstanceIter : Instances) { TSharedPtr<FScriptPerfData> InstancePerfData = InstanceIter->GetOrAddPerfDataByInstanceAndTracePath(InstanceIter->GetName(), TracePath); InstancePerfData->Reset(); // Update all top level instance stats now the events are up to date. for (auto InstanceEventIter : InstanceIter->GetChildNodes()) { TSharedPtr<FScriptPerfData> InstanceEventPerfData = InstanceEventIter->GetOrAddPerfDataByInstanceAndTracePath(InstanceIter->GetName(), TracePath); // Don't consider one time construction events in the instance runtime totals. if (InstanceEventIter->IsRuntimeEvent()) { InstancePerfData->AddData(*InstanceEventPerfData.Get()); } } // Add for consolidation at the bottom. InstanceData.Add(InstancePerfData); } // Finally... update the root stats for the owning blueprint. if (InstanceData.Num() > 0) { TSharedPtr<FScriptPerfData> BlueprintData = GetOrAddBlueprintPerfDataByTracePath(TracePath); BlueprintData->CreateBlueprintStats(InstanceData); // Now that all stats have been updated/accumulated, update heat level metrics data. (this now also updates the displays in the stats) UpdateHeatLevelMetrics(BlueprintData); } // Update the node stats UpdatePerfDataForNode(); }