Advertisement
Hatedpain

orm_bench2

Aug 28th, 2013
462
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. #include <a_samp>
  2. #include <a_mysql>
  3.  
  4.  
  5. //#define BENCH_ORM
  6. #define BENCH_CACHE
  7.  
  8. #define ITERATIONS 10000
  9. #define NUM_RUNS 20 //number of overall runs
  10.  
  11.  
  12.  
  13. new SQL = -1;
  14.  
  15. enum e_Player {
  16.     ORM:Orm,
  17.     ID,
  18.     Name[24],
  19.     Money,
  20.     Float:PosX,
  21.     Float:PosY,
  22.     String1[32]
  23. };
  24.  
  25. new Player[ITERATIONS][e_Player];
  26.  
  27.  
  28. new
  29.     BenchStartTime[NUM_RUNS],
  30.     BenchEndTime[NUM_RUNS];
  31.  
  32. public OnGameModeExit() {
  33.     mysql_close(SQL);
  34. }
  35.  
  36. StartBenchmark(run) {
  37.     if(run >= NUM_RUNS)
  38.         return 0;
  39.        
  40.     BenchStartTime[run] = GetTickCount();
  41.     return 1;
  42. }
  43.  
  44. EndBenchmark(run) {
  45.     BenchEndTime[run] = GetTickCount();
  46.     new BenchTime = BenchEndTime[run]-BenchStartTime[run];
  47.     printf("run #%d:\n\t%dms", run+1, BenchTime);
  48.     printf("\t%.4fms\n", float(BenchTime)/float(ITERATIONS));
  49.    
  50.    
  51.     #if NUM_RUNS > 1
  52.     if(run == NUM_RUNS-1) {
  53.         new Float:BenchAverageTime;
  54.         for(new r=0; r < NUM_RUNS; ++r)
  55.             BenchAverageTime += float(BenchEndTime[r]-BenchStartTime[r]);
  56.         BenchAverageTime /= float(NUM_RUNS);
  57.         printf("overall average:\n\t%.04fms\n\t%.4fms", BenchAverageTime, BenchAverageTime/float(ITERATIONS));
  58.     }
  59.     #endif
  60.     return 1;
  61. }
  62.  
  63. #if defined BENCH_ORM
  64. InitOrm(playerid) {
  65.     new ORM:orm_id = Player[playerid][Orm] = orm_create("test1", SQL);
  66.     orm_addvar_int(orm_id, Player[playerid][ID], "ID");
  67.     orm_addvar_string(orm_id, Player[playerid][Name], 24, "Name");
  68.     orm_addvar_int(orm_id, Player[playerid][Money], "Money");
  69.     orm_addvar_float(orm_id, Player[playerid][PosX], "PosX");
  70.     orm_addvar_float(orm_id, Player[playerid][PosY], "PosY");
  71.     orm_addvar_string(orm_id, Player[playerid][String1], 32, "String1");
  72.     orm_setkey(orm_id, "ID");
  73.     return 1;
  74. }
  75. #endif
  76.  
  77. main() {
  78. #if defined BENCH_ORM
  79.     printf("Starting data-fetching-by-ORM benchmarking with "#NUM_RUNS" runs and "#ITERATIONS" iterations...\n");
  80. #elseif defined BENCH_CACHE
  81.     printf("Starting data-fetching-by-cache benchmarking with "#NUM_RUNS" runs and "#ITERATIONS" iterations...\n");
  82. #else
  83.     #error No benchmark type defined!
  84. #endif
  85.            
  86.     mysql_log(LOG_NONE);
  87.    
  88.     SQL = mysql_connect("127.0.0.1", "root", "test", "1234");
  89.     if(mysql_errno() != 0)
  90.         exit(0);
  91.    
  92. #if defined BENCH_ORM
  93.     for(new i=0; i < ITERATIONS; ++i) {
  94.         InitOrm(i);
  95.     }
  96. #endif
  97.     SetTimerEx("StartRun", 2000, false, "d", 0);
  98. }
  99.  
  100. forward StartRun(run);
  101. public StartRun(run) {
  102.     if(run >= NUM_RUNS)
  103.         return 1;
  104.     StartBenchmark(run);
  105.     for(new i=0; i < ITERATIONS; ++i) {
  106.     #if defined BENCH_ORM
  107.         orm_select(Player[i][Orm], "Bench_Select", "dd", run, i);
  108.     #elseif defined BENCH_CACHE
  109.         new query[256];
  110.         format(query, sizeof(query), "SELECT `ID`, `Name`, `Money`, `PosX`, `PosY`, `String1` FROM test1 WHERE `ID` = '%d'", i+25000);
  111.         mysql_tquery(SQL, query, "Bench_Select", "dd", run, i);
  112.     #else
  113.         #error No benchmark type defined!
  114.     #endif
  115.     }
  116.     return 1;
  117. }
  118.  
  119. forward Bench_Select(run, playerid);
  120. public Bench_Select(run, playerid)
  121. {
  122. #if defined BENCH_CACHE
  123.     Player[playerid][ID] = cache_get_row_int(0, 0);
  124.     cache_get_row(0, 1, Player[playerid][Name], 1, 24);
  125.     Player[playerid][Money] = cache_get_row_int(0, 2);
  126.     Player[playerid][PosX] = cache_get_row_float(0, 3);
  127.     Player[playerid][PosY] = cache_get_row_float(0, 4);
  128.     cache_get_row(0, 5, Player[playerid][String1], 1, 32);
  129. #endif
  130.  
  131.     if(playerid == ITERATIONS-1) {
  132.         EndBenchmark(run);
  133.         SetTimerEx("StartRun", 2000, false, "d", run+1);
  134.     }
  135.     return 1;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement