FProfilerManager::FProfilerManager( const ISessionManagerRef& InSessionManager ) : SessionManager( InSessionManager ) , CommandList( new FUICommandList() ) , ProfilerActionManager( this ) , Settings() , ProfilerType( EProfilerSessionTypes::InvalidOrMax ) , bLivePreview( false ) , bHasCaptureFileFullyProcessed( false ) { FEventGraphSample::InitializePropertyManagement(); #if 0 // Performance tests. static FTotalTimeAndCount CurrentNative(0.0f, 0); static FTotalTimeAndCount CurrentPointer(0.0f, 0); static FTotalTimeAndCount CurrentShared(0.0f, 0); for( int32 Lx = 0; Lx < 16; ++Lx ) { FRandomStream RandomStream( 666 ); TArray<FEventGraphSample> EventsNative; TArray<FEventGraphSample*> EventsPointer; TArray<FEventGraphSamplePtr> EventsShared; const int32 NumEvents = 16384; for( int32 Nx = 0; Nx < NumEvents; ++Nx ) { const double Rnd = RandomStream.FRandRange( 0.0f, 16384.0f ); const FString EventName = TTypeToString<double>::ToString( Rnd ); FEventGraphSample NativeEvent( *EventName ); NativeEvent._InclusiveTimeMS = Rnd; FEventGraphSamplePtr SharedEvent = FEventGraphSample::CreateNamedEvent( *EventName ); SharedEvent->_InclusiveTimeMS = Rnd; EventsNative.Add(NativeEvent); EventsPointer.Add(SharedEvent.Get()); EventsShared.Add(SharedEvent); } { FProfilerScopedLogTime ScopedLog( TEXT("1.NativeSorting"), &CurrentNative ); EventsNative.Sort( FEventGraphSampleLess() ); } { FProfilerScopedLogTime ScopedLog( TEXT("2PointerSorting"), &CurrentPointer ); EventsPointer.Sort( FEventGraphSampleLess() ); } { FProfilerScopedLogTime ScopedLog( TEXT("3.SharedSorting"), &CurrentShared ); FEventArraySorter::Sort( EventsShared, FEventGraphSample::GetEventPropertyByIndex(EEventPropertyIndex::InclusiveTimeMS).Name, EEventCompareOps::Less ); } } #endif // 0 }
void FEventGraphSample::SetMaximumTimesForAllChildren() { struct FCopyMaximum { void operator()( FEventGraphSample* EventPtr, FEventGraphSample* RootEvent, FEventGraphSample* ThreadEvent ) { EventPtr->CopyMaximum( RootEvent, ThreadEvent ); } }; FEventGraphSamplePtr RootEvent = AsShared(); const int32 NumChildren = _ChildrenPtr.Num(); for (int32 ChildIndex = 0; ChildIndex < NumChildren; ++ChildIndex) { const FEventGraphSamplePtr& ThreadEvent = _ChildrenPtr[ChildIndex]; ThreadEvent->ExecuteOperationForAllChildren( FCopyMaximum(), (FEventGraphSample*)RootEvent.Get(), (FEventGraphSample*)ThreadEvent.Get() ); } }
void FEventGraphSample::SetRootAndThreadForAllChildren() { struct FSetRootAndThread { void operator()( FEventGraphSample* EventPtr, FEventGraphSample* RootEvent, FEventGraphSample* ThreadEvent ) { EventPtr->_RootPtr = RootEvent; EventPtr->_ThreadPtr = ThreadEvent; } }; FEventGraphSamplePtr RootEvent = AsShared(); const int32 NumChildren = _ChildrenPtr.Num(); for (int32 ChildIndex = 0; ChildIndex < NumChildren; ++ChildIndex) { const FEventGraphSamplePtr& ThreadEvent = _ChildrenPtr[ChildIndex]; ThreadEvent->ExecuteOperationForAllChildren( FSetRootAndThread(), (FEventGraphSample*)RootEvent.Get(), (FEventGraphSample*)ThreadEvent.Get() ); } }