YDLIDAR SDK  V1.3.6
StatTimer.h
1 /*----------------------------------------------------------------------------*/
2 /* */
3 /* StatTimer.h: interface for the CStatTimer class. */
4 /* */
5 /* Author: Mark Carrier (mark@carrierlabs.com) */
6 /* */
7 /*----------------------------------------------------------------------------*/
8 /* Copyright (c) 2006 CarrierLabs, LLC. All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * 1. Redistributions of source code must retain the above copyright
15  * notice, this list of conditions and the following disclaimer.
16  *
17  * 2. Redistributions in binary form must reproduce the above copyright
18  * notice, this list of conditions and the following disclaimer in
19  * the documentation and/or other materials provided with the
20  * distribution.
21  *
22  * 3. The name of the author may not be used to endorse or promote products
23  * derived from this software without specific prior written permission.
24  *
25  * 4. The name "CarrierLabs" must not be used to
26  * endorse or promote products derived from this software without
27  * prior written permission. For written permission, please contact
28  * mark@carrierlabs.com.
29  *
30  * THIS SOFTWARE IS PROVIDED BY MARK CARRIER ``AS IS'' AND ANY
31  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
32  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
33  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MARK CARRIER OR
34  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
36  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
37  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
40  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
41  * OF THE POSSIBILITY OF SUCH DAMAGE.
42  *----------------------------------------------------------------------------*/
43 #ifndef __CSTATTIMER_H__
44 #define __CSTATTIMER_H__
45 
46 #include <string.h>
47 
48 #if defined(_WIN32)
49 #include <Winsock2.h>
50 #include <time.h>
51 #else
52 #include <stdio.h>
53 #include <sys/time.h>
54 #endif
55 
56 
57 #include "Host.h"
58 
59 #if defined(_WIN32)
60  #define GET_CLOCK_COUNT(x) QueryPerformanceCounter((LARGE_INTEGER *)x)
61 #else
62  #define GET_CLOCK_COUNT(x) gettimeofday(x, NULL)
63 #endif
64 
65 #define MILLISECONDS_CONVERSION 1000
66 #define MICROSECONDS_CONVERSION 1000000
67 
70 class CStatTimer {
71 public:
72  CStatTimer()
73  {
74  };
75 
76  ~CStatTimer()
77  {
78  };
79 
80  void Initialize()
81  {
82  memset(&m_startTime, 0, sizeof(struct timeval));
83  memset(&m_endTime, 0, sizeof(struct timeval));
84  };
85 
86  struct timeval GetStartTime() { return m_startTime; };
87  void SetStartTime() { GET_CLOCK_COUNT(&m_startTime); };
88 
89  struct timeval GetEndTime() { return m_endTime; };
90  void SetEndTime() { GET_CLOCK_COUNT(&m_endTime); };
91 
92  uint32_t GetMilliSeconds() { return (CalcTotalUSec() / MILLISECONDS_CONVERSION); };
93  uint64_t GetMicroSeconds() { return (CalcTotalUSec()); };
94  uint32_t GetSeconds() { return (CalcTotalUSec() / MICROSECONDS_CONVERSION); };
95 
96  static uint64_t GetCurrentTime()
97  {
98  struct timeval tmpTime;
99  GET_CLOCK_COUNT(&tmpTime);
100  return ((tmpTime.tv_sec * MICROSECONDS_CONVERSION) + tmpTime.tv_usec);
101  };
102 
103 private:
104  uint32_t CalcTotalUSec() { return (((m_endTime.tv_sec - m_startTime.tv_sec) * MICROSECONDS_CONVERSION) +
105  (m_endTime.tv_usec - m_startTime.tv_usec)); };
106 
107 
108 private:
109  struct timeval m_startTime;
110  struct timeval m_endTime;
111 };
112 
113 #endif // __CSTATTIMER_H__
Definition: StatTimer.h:70