~brianaker/gearmand/gearmnan_job_use_client

« back to all changes in this revision

Viewing changes to libtest/timer.hpp

  • Committer: Continuous Integration
  • Date: 2013-01-14 19:17:24 UTC
  • mfrom: (683.1.2 gearmand-1.2)
  • Revision ID: ci@tangent.org-20130114191724-xvtsaq11a7mu28jt
Merge lp:~tangent-org/gearmand/1.2-build/ Build: jenkins-Gearmand-336

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
#include <ctime>
41
41
#include <iostream>
42
42
 
43
 
#ifdef __MACH__
44
 
#  include <mach/clock.h>
45
 
#  include <mach/mach.h>
46
 
#else
47
 
#  include <sys/time.h>
48
 
#endif
49
 
 
50
43
 
51
44
namespace libtest {
52
45
 
53
46
class Timer {
54
47
public:
55
48
 
56
 
  Timer()
57
 
  {
58
 
    _begin.tv_sec= 0;
59
 
    _begin.tv_nsec= 0;
60
 
    _end.tv_sec= 0;
61
 
    _end.tv_nsec= 0;
62
 
  }
63
 
 
64
 
  void reset()
65
 
  {
66
 
    _end.tv_sec= 0;
67
 
    _end.tv_nsec= 0;
68
 
    _time(_begin);
69
 
  }
70
 
 
71
 
  void sample()
72
 
  {
73
 
    _time(_end);
74
 
  }
75
 
 
76
 
  void offset(int64_t minutes_arg, int64_t seconds_arg, int64_t nanoseconds)
77
 
  {
78
 
    reset();
79
 
    _end= _begin;
80
 
    _end.tv_sec+= (minutes_arg * 60) +seconds_arg;
81
 
    _end.tv_nsec+= nanoseconds;
82
 
  }
83
 
 
84
 
  int64_t minutes()
85
 
  {
86
 
    struct timespec result;
87
 
    difference(result);
88
 
    return int64_t(result.tv_sec / 60);
89
 
  }
90
 
 
91
 
  uint64_t elapsed_milliseconds() const
92
 
  {
93
 
    struct timespec temp;
94
 
    difference(temp);
95
 
 
96
 
    return temp.tv_sec*1000 +temp.tv_nsec/1000000;
97
 
  }
98
 
 
99
 
  void difference(struct timespec& arg) const
100
 
  {
101
 
    if ((_end.tv_nsec -_begin.tv_nsec) < 0)
102
 
    {
103
 
      arg.tv_sec= _end.tv_sec -_begin.tv_sec -1;
104
 
      arg.tv_nsec= 1000000000 +_end.tv_nsec -_begin.tv_nsec;
105
 
 
106
 
    }
107
 
    else
108
 
    {
109
 
      arg.tv_sec= _end.tv_sec -_begin.tv_sec;
110
 
      arg.tv_nsec= _end.tv_nsec -_begin.tv_nsec;
111
 
    }
112
 
  }
 
49
  Timer();
 
50
 
 
51
  void reset();
 
52
 
 
53
  void sample();
 
54
 
 
55
  void offset(int64_t minutes_arg, int64_t seconds_arg, int64_t nanoseconds);
 
56
 
 
57
  int64_t minutes();
 
58
 
 
59
  uint64_t elapsed_milliseconds() const;
 
60
 
 
61
  void difference(struct timespec& arg) const;
113
62
 
114
63
private:
115
 
  void _time(struct timespec& ts)
116
 
  {
117
 
#ifdef __MACH__ // OSX lacks clock_gettime()
118
 
    clock_serv_t _clock_serv;
119
 
    mach_timespec_t _mach_timespec;
120
 
    host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &_clock_serv);
121
 
    clock_get_time(_clock_serv, &_mach_timespec);
122
 
    mach_port_deallocate(mach_task_self(), _clock_serv);
123
 
    ts.tv_sec= _mach_timespec.tv_sec;
124
 
    ts.tv_nsec= _mach_timespec.tv_nsec;
125
 
#else
126
 
    clock_gettime(CLOCK_REALTIME, &ts);
127
 
#endif
128
 
  }
 
64
  void _time(struct timespec& ts);
129
65
 
130
66
private:
131
67
  struct timespec _begin;