Feature Request ID: 1669025
[csql.git] / include / NanoTimer.h
blobf6e93ba5e2080bef38d479e18a17974ea6c6fe5a
1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.com *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 ***************************************************************************/
16 #ifndef NANO_TIMER_H
17 #define NANO_TIMER_H
18 #include<time.h>
19 #include<limits.h>
20 class NanoTimer
22 long long max_, min_, total, count, last_;
23 struct timespec begin;
24 struct timespec end;
26 public:
27 NanoTimer() { reset(); }
28 void reset() { max_ = 0; min_ = LONG_MAX; total =0; count = 0; last_ =0; }
29 void start()
31 count++;
32 clock_gettime(CLOCK_REALTIME, &begin);
34 void stop()
36 clock_gettime(CLOCK_REALTIME, &end);
37 long long secs = end.tv_sec-begin.tv_sec;
38 long long nano = end.tv_nsec-begin.tv_nsec;
39 last_ = (secs*1000000000)+nano;
40 total += last_;
41 if ( max_ < last_ ) max_ = last_;
42 if ( min_ > last_ ) min_ = last_;
44 long long last() { return last_; }
45 long long avg() { return total/count; }
46 long long min() { return min_; }
47 long long max() { return max_; }
50 #endif