gmMemFixedSet.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. _____ __ ___ __ ____ _ __
  3. / ___/__ ___ _ ___ / |/ /__ ___ / /_____ __ __/ __/_______(_)__ / /_
  4. / (_ / _ `/ ' \/ -_) /|_/ / _ \/ _ \/ '_/ -_) // /\ \/ __/ __/ / _ \/ __/
  5. \___/\_,_/_/_/_/\__/_/ /_/\___/_//_/_/\_\\__/\_, /___/\__/_/ /_/ .__/\__/
  6. /___/ /_/
  7. See Copyright Notice in gmMachine.h
  8. */
  9. #include "gmConfig.h"
  10. #include "gmMemFixedSet.h"
  11. void gmMemFixedSet::Reset()
  12. {
  13. m_mem8.Reset();
  14. m_mem16.Reset();
  15. m_mem24.Reset();
  16. m_mem32.Reset();
  17. m_mem64.Reset();
  18. m_mem128.Reset();
  19. m_mem256.Reset();
  20. m_mem512.Reset();
  21. FreeBigAllocs(); //This actually frees the big fellas
  22. }
  23. void gmMemFixedSet::ResetAndFreeMemory()
  24. {
  25. m_mem8.ResetAndFreeMemory();
  26. m_mem16.ResetAndFreeMemory();
  27. m_mem24.ResetAndFreeMemory();
  28. m_mem32.ResetAndFreeMemory();
  29. m_mem64.ResetAndFreeMemory();
  30. m_mem128.ResetAndFreeMemory();
  31. m_mem256.ResetAndFreeMemory();
  32. m_mem512.ResetAndFreeMemory();
  33. FreeBigAllocs();
  34. }
  35. unsigned int gmMemFixedSet::GetSystemMemUsed() const
  36. {
  37. unsigned int total = 0;
  38. total += m_mem8.GetSystemMemUsed();
  39. total += m_mem16.GetSystemMemUsed();
  40. total += m_mem24.GetSystemMemUsed();
  41. total += m_mem32.GetSystemMemUsed();
  42. total += m_mem64.GetSystemMemUsed();
  43. total += m_mem128.GetSystemMemUsed();
  44. total += m_mem256.GetSystemMemUsed();
  45. total += m_mem512.GetSystemMemUsed();
  46. BigMemNode* curNode = m_bigAllocs.GetFirst();
  47. while(m_bigAllocs.IsValid(curNode))
  48. {
  49. total += GetDataAllocationSize( curNode->Data() ); // Pass in the Data ptr, not the node ptr so we can offset correctly
  50. curNode = m_bigAllocs.GetNext(curNode);
  51. }
  52. return total;
  53. }
  54. void gmMemFixedSet::PrintStats() const
  55. {
  56. #ifdef GM_DEBUG_BUILD
  57. int used;
  58. const char * msg = "%d btye pool uses %dk of memory, thats %d allocations\n";
  59. used = m_mem8.GetSystemMemUsed();
  60. GM_PRINTF(msg, 8, used / 1024, used / 8);
  61. used = m_mem16.GetSystemMemUsed();
  62. GM_PRINTF(msg, 16, used / 1024, used / 16);
  63. used = m_mem24.GetSystemMemUsed();
  64. GM_PRINTF(msg, 24, used / 1024, used / 24);
  65. used = m_mem32.GetSystemMemUsed();
  66. GM_PRINTF(msg, 32, used / 1024, used / 32);
  67. used = m_mem64.GetSystemMemUsed();
  68. GM_PRINTF(msg, 64, used / 1024, used / 64);
  69. used = m_mem128.GetSystemMemUsed();
  70. GM_PRINTF(msg, 128, used / 1024, used / 128);
  71. used = m_mem256.GetSystemMemUsed();
  72. GM_PRINTF(msg, 256, used / 1024, used / 256);
  73. used = m_mem512.GetSystemMemUsed();
  74. GM_PRINTF(msg, 512, used / 1024, used / 512);
  75. #endif //GM_DEBUG_BUILD
  76. }
  77. void gmMemFixedSet::Presize(int a_pool8,
  78. int a_pool16,
  79. int a_pool24,
  80. int a_pool32,
  81. int a_pool64,
  82. int a_pool128,
  83. int a_pool256,
  84. int a_pool512
  85. )
  86. {
  87. if( a_pool8 ) { m_mem8.Presize(a_pool8); }
  88. if( a_pool16 ) { m_mem16.Presize(a_pool16); }
  89. if( a_pool24 ) { m_mem24.Presize(a_pool24); }
  90. if( a_pool32 ) { m_mem32.Presize(a_pool32); }
  91. if( a_pool64 ) { m_mem64.Presize(a_pool64); }
  92. if( a_pool128 ) { m_mem128.Presize(a_pool128); }
  93. if( a_pool256 ) { m_mem256.Presize(a_pool256); }
  94. if( a_pool512 ) { m_mem512.Presize(a_pool512); }
  95. }
  96. void gmMemFixedSet::FreeBigAllocs()
  97. {
  98. BigMemNode* curNode = m_bigAllocs.GetFirst();
  99. while(m_bigAllocs.IsValid(curNode))
  100. {
  101. BigMemNode* nodeToDelete = curNode;
  102. curNode = m_bigAllocs.GetNext(curNode);
  103. delete [] (char*)nodeToDelete;
  104. }
  105. m_bigAllocs.RemoveAll();
  106. }