-
Notifications
You must be signed in to change notification settings - Fork 298
/
measure_time_rdtsc.hpp
53 lines (37 loc) · 1.29 KB
/
measure_time_rdtsc.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef MEASURE_TIME_RDTSC_HPP_
#define MEASURE_TIME_RDTSC_HPP_
#include <Core/Utils/extension/measure_time.hpp>
class BOOST_EXTENSION_EXPORT_DECL MeasureTimeValuesRDTSC : public MeasureTimeValues
{
public:
unsigned long long _time;
unsigned long long _maxTime;
MeasureTimeValuesRDTSC(unsigned long long time);
MeasureTimeValuesRDTSC(const MeasureTimeValuesRDTSC &timeValues);
virtual ~MeasureTimeValuesRDTSC();
virtual std::string serializeToJson() const;
virtual void add(MeasureTimeValues *values);
virtual void sub(MeasureTimeValues *values);
virtual void div(int counter);
virtual MeasureTimeValuesRDTSC* clone() const;
virtual void reset();
};
class BOOST_EXTENSION_EXPORT_DECL MeasureTimeRDTSC : public MeasureTime
{
protected:
MeasureTimeRDTSC();
MeasureTimeValues* getZeroValuesP() const;
void getTimeValuesStartP(MeasureTimeValues *res) const;
void getTimeValuesEndP(MeasureTimeValues *res) const;
public:
virtual ~MeasureTimeRDTSC();
static void initialize()
{
_instance = new MeasureTimeRDTSC();
_instance->setOverheadToZero();
}
virtual void initializeThread(unsigned long int threadNumber);
virtual void deinitializeThread();
static inline unsigned long long RDTSC(); //__attribute__((always_inline));
};
#endif /* MEASURE_TIME_RDTSC_HPP_ */