NdbTimer.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef NDBTIMER_H
  14. #define NDBTIMER_H
  15. #include <NdbTick.h>
  16. #include <NdbOut.hpp>
  17. // 
  18. // Class used for measuring time and priting the results
  19. // 
  20. // Currently measures time in milliseconds
  21. // 
  22. class NdbTimer
  23. {
  24. public:
  25.   NdbTimer();
  26.   ~NdbTimer() {};
  27.   void doStart();
  28.   void doStop();
  29.   void doReset();
  30.   NDB_TICKS elapsedTime();
  31.   void printTransactionStatistics(const char* text, 
  32.   int numTransactions, 
  33.   int numOperations);
  34.   void printTestTimer(int numLoops, 
  35.       int numRecords);
  36.   void printTotalTime(void);
  37. private:
  38.   NDB_TICKS startTime;
  39.   NDB_TICKS stopTime;
  40. };
  41. inline NdbTimer::NdbTimer(){
  42.   doReset();
  43. }
  44. inline void NdbTimer::doReset(void){
  45.   startTime = 0;
  46.   stopTime = 0;
  47. }
  48. inline void NdbTimer::doStart(void){
  49.   startTime = NdbTick_CurrentMillisecond();
  50. }
  51. inline void NdbTimer::doStop(void){
  52.   stopTime = NdbTick_CurrentMillisecond();
  53. }
  54. inline NDB_TICKS NdbTimer::elapsedTime(void){
  55.   return (stopTime - startTime); 
  56. }
  57. inline void NdbTimer::printTransactionStatistics(const char* text, 
  58.  int numTransactions, 
  59.  int numOperations){
  60.   // Convert to Uint32 in order to be able to print it to screen
  61.   Uint32 lapTime = (Uint32)elapsedTime();
  62.   ndbout_c("%i transactions, %i %s total time = %d msnAverage %f ms/transaction, %f ms/%s.n%f transactions/second, %f %ss/second.n",
  63.  numTransactions, numTransactions*numOperations, text, lapTime,
  64.          ((double)lapTime/numTransactions), ((double)lapTime/(numTransactions*numOperations)), text, 
  65.          1000.0/((double)lapTime/numOperations), 1000.0/((double)lapTime/(numTransactions*numOperations)), text);
  66. }
  67. inline void NdbTimer::printTestTimer(int numLoops, 
  68.      int numRecords){
  69.   // Convert to Uint32 in order to be able to print it to screen
  70.   Uint32 lapTime = (Uint32)elapsedTime();
  71.   ndbout_c("%i loop * %i records, total time = %d msnAverage %f ms/loop, %f ms/record.n%f looop/second, %f records/second.n",
  72.    numLoops, numRecords, lapTime,
  73.    ((double)lapTime/numLoops), ((double)lapTime/(numLoops*numRecords)),
  74.    1000.0/((double)lapTime/numLoops), 1000.0/((double)lapTime/(numLoops*numRecords)));
  75. }
  76. inline void NdbTimer::printTotalTime(void){
  77.   // Convert to Uint32 in order to be able to print it to screen
  78.   Uint32 lapTime = (Uint32)elapsedTime();
  79.   Uint32 secTime = lapTime/1000;
  80.   ndbout_c("Total time : %d seconds (%d ms)n", secTime, lapTime);
  81. }
  82. #endif