Qt 4.8
qelapsedtimer_mac.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtCore module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #include "qelapsedtimer.h"
43 #include <sys/time.h>
44 #include <unistd.h>
45 
46 #include <mach/mach_time.h>
47 
49 
51 {
52  return MachAbsoluteTime;
53 }
54 
56 {
57  return true;
58 }
59 
60 static mach_timebase_info_data_t info = {0,0};
61 static qint64 absoluteToNSecs(qint64 cpuTime)
62 {
63  if (info.denom == 0)
64  mach_timebase_info(&info);
65  qint64 nsecs = cpuTime * info.numer / info.denom;
66  return nsecs;
67 }
68 
69 static qint64 absoluteToMSecs(qint64 cpuTime)
70 {
71  return absoluteToNSecs(cpuTime) / 1000000;
72 }
73 
74 timeval qt_gettime()
75 {
76  timeval tv;
77 
78  uint64_t cpu_time = mach_absolute_time();
79  uint64_t nsecs = absoluteToNSecs(cpu_time);
80  tv.tv_sec = nsecs / 1000000000ull;
81  tv.tv_usec = (nsecs / 1000) - (tv.tv_sec * 1000000);
82  return tv;
83 }
84 
86 {
87  t1 = mach_absolute_time();
88  t2 = 0;
89 }
90 
92 {
93  qint64 old = t1;
94  t1 = mach_absolute_time();
95  t2 = 0;
96 
97  return absoluteToMSecs(t1 - old);
98 }
99 
101 {
102  uint64_t cpu_time = mach_absolute_time();
103  return absoluteToNSecs(cpu_time - t1);
104 }
105 
107 {
108  uint64_t cpu_time = mach_absolute_time();
109  return absoluteToMSecs(cpu_time - t1);
110 }
111 
113 {
114  return absoluteToMSecs(t1);
115 }
116 
117 qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
118 {
119  return absoluteToMSecs(other.t1 - t1);
120 }
121 
122 qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
123 {
124  return msecsTo(other) / 1000;
125 }
126 
127 bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
128 {
129  return v1.t1 < v2.t1;
130 }
131 
static mach_timebase_info_data_t info
ClockType
This enum contains the different clock types that QElapsedTimer may use.
Definition: qelapsedtimer.h:56
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
qint64 msecsTo(const QElapsedTimer &other) const
Returns the number of milliseconds between this QElapsedTimer and other.
friend bool Q_CORE_EXPORT operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
Returns true if v1 was started before v2, false otherwise.
The QElapsedTimer class provides a fast way to calculate elapsed times.
Definition: qelapsedtimer.h:53
static bool isMonotonic()
Returns true if this is a monotonic clock, false otherwise.
qint64 elapsed() const
Returns the number of milliseconds since this QElapsedTimer was last started.
timeval qt_gettime()
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
qint64 restart()
Restarts the timer and returns the time elapsed since the previous start.
qint64 nsecsElapsed() const
Returns the number of nanoseconds since this QElapsedTimer was last started.
__int64 qint64
Definition: qglobal.h:942
static ClockType clockType()
Returns the clock type that this QElapsedTimer implementation uses.
qint64 msecsSinceReference() const
Returns the number of milliseconds between last time this QElapsedTimer object was started and its re...
static qint64 absoluteToMSecs(qint64 cpuTime)
static qint64 absoluteToNSecs(qint64 cpuTime)
void start()
Starts this timer.
qint64 secsTo(const QElapsedTimer &other) const
Returns the number of seconds between this QElapsedTimer and other.