CUMeasureTimer.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "CUMeasureTimer.h"
  2. #include "HAL/PlatformTime.h"
  3. #if ENABLE_CUPRECISE_TIMER
  4. static TMap<FString, TSharedPtr<FCUMeasureTimer>> FPreciseTimerInternalMap;
  5. #endif
  6. void FCUMeasureTimer::Tick(const FString& LogMsg /*= TEXT("TimeTaken")*/)
  7. {
  8. #if ENABLE_CUPRECISE_TIMER
  9. TSharedPtr<FCUMeasureTimer> Timer = MakeShareable(new FCUMeasureTimer);
  10. FPreciseTimerInternalMap.Add(LogMsg, Timer);
  11. Timer->Then = FPlatformTime::Seconds(); //start timer last so we don't measure anything else
  12. #endif
  13. }
  14. double FCUMeasureTimer::Tock(const FString& LogMsg /*= TEXT("TimeTaken")*/, bool bShouldLogResult /*= true*/)
  15. {
  16. #if ENABLE_CUPRECISE_TIMER
  17. double Now = FPlatformTime::Seconds();
  18. if (!FPreciseTimerInternalMap.Contains(LogMsg))
  19. {
  20. UE_LOG(LogTemp, Warning, TEXT("FCUMeasureTimer::Tock error: <%s> no such category ticked."), *LogMsg);
  21. return 0.0;
  22. }
  23. TSharedPtr<FCUMeasureTimer> Timer = FPreciseTimerInternalMap[LogMsg];
  24. double Elapsed = (Now - Timer->Then) * 1000.0;
  25. if (bShouldLogResult)
  26. {
  27. UE_LOG(LogTemp, Log, TEXT("%s %1.3f ms"), *LogMsg, Elapsed);
  28. }
  29. FPreciseTimerInternalMap.Remove(LogMsg);
  30. #else
  31. return 0.0;
  32. #endif
  33. return Elapsed;
  34. }
  35. FCUScopeTimer::FCUScopeTimer(const FString& LogMsg)
  36. {
  37. LogMessage = LogMsg;
  38. FCUMeasureTimer::Tick(LogMsg);
  39. }
  40. FCUScopeTimer::~FCUScopeTimer()
  41. {
  42. FCUMeasureTimer::Tock(LogMessage);
  43. }