afProfiler.cpp
上传用户:kaiguan
上传日期:2007-10-28
资源大小:1074k
文件大小:2k
源码类别:

其他游戏

开发平台:

Visual C++

  1. #include "afProfiler.h"
  2. afList<afProfiler::ProfileInfo> afProfiler::timerList;
  3. LARGE_INTEGER afProfiler::globalBeginTime;
  4. afProfiler::afProfiler(const char* nName)
  5. {
  6. ProfileInfo pi;
  7. pi.name = nName;
  8. pi.time.QuadPart = 0;
  9. if(timerList.getSize()==0)
  10. afProfiler::globalBegin();
  11. listIndex = timerList.addTail(pi);
  12. }
  13. afProfiler::~afProfiler()
  14. {
  15. }
  16. /*void
  17. afProfiler::beginSection()
  18. {
  19. QueryPerformanceCounter(&beginTime);
  20. }
  21. void
  22. afProfiler::endSection()
  23. {
  24. LARGE_INTEGER& time = timerList.getAt(listIndex).time;
  25. LARGE_INTEGER tmpTime;
  26. QueryPerformanceCounter(&tmpTime);
  27. time.QuadPart += tmpTime.QuadPart - beginTime.QuadPart;
  28. }*/
  29. bool afProfiler::globalBegin()
  30. {
  31. if(timerList.getSize()!=0)
  32. return false;
  33. ProfileInfo pi;
  34. pi.name = "Overall";
  35. pi.time.QuadPart = 0;
  36. timerList.addTail(pi);
  37. QueryPerformanceCounter(&globalBeginTime);
  38. return true;
  39. }
  40. bool
  41. afProfiler::globalEnd()
  42. {
  43. if(timerList.getSize()==0)
  44. return false;
  45. ProfileInfo& pi = timerList.getAt(0);
  46. LARGE_INTEGER time;
  47. if(pi.name != "Overall")
  48. return false;
  49. pi.name = "Overall DONE";
  50. QueryPerformanceCounter(&time);
  51. pi.time.QuadPart = time.QuadPart - globalBeginTime.QuadPart;
  52. return true;
  53. }
  54. void afProfiler::logResult()
  55. {
  56. afLog::info("==============================================================");
  57. afLog::info("");
  58. afLog::info(" profiling results:");
  59. afLog::info("");
  60. if(timerList.getSize()==0)
  61. {
  62. afLog::info("  nothing profiled");
  63. afLog::info("");
  64. afLog::info("==============================================================");
  65. return;
  66. }
  67. ProfileInfo& globalPi = timerList.getAt(0);
  68. LARGE_INTEGER freq;
  69. afString str;
  70. if(globalPi.name!="Overall DONE" && !afProfiler::globalEnd())
  71. {
  72. afLog::error("calling afProfiler::globalEnd() failed");
  73. afLog::info("");
  74. afLog::info("==============================================================");
  75. return;
  76. }
  77. QueryPerformanceFrequency(&freq);
  78. afLog::info(" overall time: %.2f seconds", (double)globalPi.time.QuadPart / (double)freq.QuadPart);
  79. for(int i=1; i<timerList.getSize(); i++)
  80. {
  81. ProfileInfo& pi = timerList.getAt(i);
  82. double v = 100.0*(double)pi.time.QuadPart / (double)globalPi.time.QuadPart;
  83. str.set("%s %.2f", (v<10.0 ? " " : ""), v);
  84. afLog::info(str + "%%%%  : " + pi.name);
  85. }
  86. afLog::info("");
  87. afLog::info("==============================================================");
  88. }