BVB Source Codes

CRYENGINE Show MNMProfiler.h Source code

Return Download CRYENGINE: download MNMProfiler.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __MNM_PROFILER_H
  4. #define __MNM_PROFILER_H
  5.  
  6. #pragma once
  7.  
  8. namespace MNM
  9. {
  10. template<typename MemoryUsers, typename TimerNames = int, typename StatNames = int>
  11. struct MNMProfiler
  12. {
  13.         enum { MaxTimers = 32, };
  14.         enum { MaxUsers = 32, };
  15.         enum { MaxStats = 32, };
  16.  
  17.         struct TimerInfo
  18.         {
  19.                 TimerInfo()
  20.                         : elapsed(0ll)
  21.                 {
  22.                 }
  23.  
  24.                 CTimeValue elapsed;
  25.         };
  26.  
  27.         struct MemoryInfo
  28.         {
  29.                 MemoryInfo()
  30.                         : used(0)
  31.                         , peak(0)
  32.                 {
  33.                 }
  34.  
  35.                 size_t used;
  36.                 size_t peak;
  37.         };
  38.  
  39.         MNMProfiler()
  40.                 : elapsed(0ll)
  41.                 , memoryUsed(0)
  42.                 , memoryPeak(0)
  43.         {
  44.                 memset(&runningTimer[0], 0, sizeof(CTimeValue) * MaxTimers);
  45.                 memset(&stats[0], 0, sizeof(int) * MaxStats);
  46.         }
  47.  
  48.         void AddMemory(MemoryUsers user, size_t amount)
  49.         {
  50.                 memoryUsed += amount;
  51.                 if (memoryUsed > memoryPeak)
  52.                         memoryPeak = memoryUsed;
  53.  
  54.                 memoryUsage[user].used += amount;
  55.                 if (memoryUsage[user].used > memoryUsage[user].peak)
  56.                         memoryUsage[user].peak = memoryUsage[user].used;
  57.         }
  58.  
  59.         void FreeMemory(MemoryUsers user, size_t amount)
  60.         {
  61.                 memoryUsed -= amount;
  62.                 memoryUsage[user].used -= amount;
  63.         }
  64.  
  65.         inline void StartTimer(TimerNames timer)
  66.         {
  67.                 runningTimer[timer] = gEnv->pTimer->GetAsyncTime();
  68.         }
  69.  
  70.         inline void StopTimer(TimerNames timer)
  71.         {
  72.                 CTimeValue end = gEnv->pTimer->GetAsyncTime();
  73.                 assert(runningTimer[timer].GetValue() != 0);
  74.  
  75.                 CTimeValue timerElapsed = end - runningTimer[timer];
  76.                 timers[timer].elapsed += timerElapsed;
  77.  
  78.                 elapsed += timerElapsed;
  79.         }
  80.  
  81.         inline void AddTime(TimerNames timer, CTimeValue amount)
  82.         {
  83.                 elapsed += amount;
  84.                 timers[timer].elapsed += amount;
  85.         }
  86.  
  87.         inline void AddStat(StatNames stat, int amount)
  88.         {
  89.                 stats[stat] += amount;
  90.         }
  91.  
  92.         inline const MemoryInfo& operator[](MemoryUsers user) const
  93.         {
  94.                 return memoryUsage[user];
  95.         }
  96.  
  97.         inline const TimerInfo& operator[](TimerNames timer) const
  98.         {
  99.                 return timers[timer];
  100.         }
  101.  
  102.         inline int operator[](StatNames stat) const
  103.         {
  104.                 return stats[stat];
  105.         }
  106.  
  107.         inline const CTimeValue& GetTotalElapsed() const
  108.         {
  109.                 return elapsed;
  110.         }
  111.  
  112.         inline size_t GetMemoryUsage() const
  113.         {
  114.                 return memoryUsed;
  115.         }
  116.  
  117.         inline size_t GetMemoryPeak() const
  118.         {
  119.                 return memoryPeak;
  120.         }
  121.  
  122. private:
  123.         CTimeValue elapsed;
  124.         size_t     memoryUsed;
  125.         size_t     memoryPeak;
  126.  
  127.         TimerInfo  timers[MaxTimers];
  128.         MemoryInfo memoryUsage[MaxUsers];
  129.         int        stats[MaxStats];
  130.  
  131.         CTimeValue runningTimer[MaxTimers];
  132. };
  133.  
  134. }
  135.  
  136. #endif  // #ifndef __MNM_PROFILER_H
  137.  
downloadMNMProfiler.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top