Mark QElapsedTimer functions as Q_DECL_NOTHROW
All functions in QElapsedTimer are marked Q_DECL_NOTHROW. This code is often introduced in many places to deal with timeouts and doesn't need exception handlers. In particular, it's used in QMutex locking. In addition, mark QDateTime::currentMSecsSinceEpoch as nothrow, as it can't throw exceptions either and it is needed by the generic QElapsedTimer. Q{Date,Time}::current{Date,Time} operate on local time and run into at least one cancellation point, which we must consider throwing. And returning a QDateTime allocates memory. Change-Id: Id776c5ec831fc06d7419a9ff5442d9b35cff1a22 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
parent
44e638f069
commit
6a8537356b
@ -3028,7 +3028,7 @@ QDateTime QDateTime::currentDateTimeUtc()
|
||||
return QDateTime(d, t, Qt::UTC);
|
||||
}
|
||||
|
||||
qint64 QDateTime::currentMSecsSinceEpoch()
|
||||
qint64 QDateTime::currentMSecsSinceEpoch() Q_DECL_NOTHROW
|
||||
{
|
||||
QDate d;
|
||||
QTime t;
|
||||
@ -3139,7 +3139,7 @@ QDateTime QDateTime::currentDateTimeUtc()
|
||||
return dt;
|
||||
}
|
||||
|
||||
qint64 QDateTime::currentMSecsSinceEpoch()
|
||||
qint64 QDateTime::currentMSecsSinceEpoch() Q_DECL_NOTHROW
|
||||
{
|
||||
// posix compliant system
|
||||
// we have milliseconds
|
||||
|
@ -259,7 +259,7 @@ public:
|
||||
#endif
|
||||
static QDateTime fromTime_t(uint secsSince1Jan1970UTC);
|
||||
static QDateTime fromMSecsSinceEpoch(qint64 msecs);
|
||||
static qint64 currentMSecsSinceEpoch();
|
||||
static qint64 currentMSecsSinceEpoch() Q_DECL_NOTHROW;
|
||||
|
||||
private:
|
||||
friend class QDateTimePrivate;
|
||||
|
@ -224,7 +224,7 @@ static const qint64 invalidData = Q_INT64_C(0x8000000000000000);
|
||||
|
||||
\sa isValid(), start(), restart()
|
||||
*/
|
||||
void QElapsedTimer::invalidate()
|
||||
void QElapsedTimer::invalidate() Q_DECL_NOTHROW
|
||||
{
|
||||
t1 = t2 = invalidData;
|
||||
}
|
||||
@ -235,7 +235,7 @@ void QElapsedTimer::invalidate()
|
||||
|
||||
\sa invalidate(), start(), restart()
|
||||
*/
|
||||
bool QElapsedTimer::isValid() const
|
||||
bool QElapsedTimer::isValid() const Q_DECL_NOTHROW
|
||||
{
|
||||
return t1 != invalidData && t2 != invalidData;
|
||||
}
|
||||
@ -248,7 +248,7 @@ bool QElapsedTimer::isValid() const
|
||||
|
||||
\sa elapsed()
|
||||
*/
|
||||
bool QElapsedTimer::hasExpired(qint64 timeout) const
|
||||
bool QElapsedTimer::hasExpired(qint64 timeout) const Q_DECL_NOTHROW
|
||||
{
|
||||
// if timeout is -1, quint64(timeout) is LLINT_MAX, so this will be
|
||||
// considered as never expired
|
||||
|
@ -59,28 +59,28 @@ public:
|
||||
MachAbsoluteTime,
|
||||
PerformanceCounter
|
||||
};
|
||||
static ClockType clockType();
|
||||
static bool isMonotonic();
|
||||
static ClockType clockType() Q_DECL_NOTHROW;
|
||||
static bool isMonotonic() Q_DECL_NOTHROW;
|
||||
|
||||
void start();
|
||||
qint64 restart();
|
||||
void invalidate();
|
||||
bool isValid() const;
|
||||
void start() Q_DECL_NOTHROW;
|
||||
qint64 restart() Q_DECL_NOTHROW;
|
||||
void invalidate() Q_DECL_NOTHROW;
|
||||
bool isValid() const Q_DECL_NOTHROW;
|
||||
|
||||
qint64 nsecsElapsed() const;
|
||||
qint64 elapsed() const;
|
||||
bool hasExpired(qint64 timeout) const;
|
||||
qint64 nsecsElapsed() const Q_DECL_NOTHROW;
|
||||
qint64 elapsed() const Q_DECL_NOTHROW;
|
||||
bool hasExpired(qint64 timeout) const Q_DECL_NOTHROW;
|
||||
|
||||
qint64 msecsSinceReference() const;
|
||||
qint64 msecsTo(const QElapsedTimer &other) const;
|
||||
qint64 secsTo(const QElapsedTimer &other) const;
|
||||
qint64 msecsSinceReference() const Q_DECL_NOTHROW;
|
||||
qint64 msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW;
|
||||
qint64 secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW;
|
||||
|
||||
bool operator==(const QElapsedTimer &other) const
|
||||
bool operator==(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{ return t1 == other.t1 && t2 == other.t2; }
|
||||
bool operator!=(const QElapsedTimer &other) const
|
||||
bool operator!=(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{ return !(*this == other); }
|
||||
|
||||
friend bool Q_CORE_EXPORT operator<(const QElapsedTimer &v1, const QElapsedTimer &v2);
|
||||
friend bool Q_CORE_EXPORT operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW;
|
||||
|
||||
private:
|
||||
qint64 t1;
|
||||
|
@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
|
||||
|
||||
\sa isMonotonic()
|
||||
*/
|
||||
QElapsedTimer::ClockType QElapsedTimer::clockType()
|
||||
QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW
|
||||
{
|
||||
return SystemTime;
|
||||
}
|
||||
@ -61,7 +61,7 @@ QElapsedTimer::ClockType QElapsedTimer::clockType()
|
||||
|
||||
\sa clockType(), QElapsedTimer::ClockType
|
||||
*/
|
||||
bool QElapsedTimer::isMonotonic()
|
||||
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -76,7 +76,7 @@ bool QElapsedTimer::isMonotonic()
|
||||
|
||||
\sa restart(), invalidate(), elapsed()
|
||||
*/
|
||||
void QElapsedTimer::start()
|
||||
void QElapsedTimer::start() Q_DECL_NOTHROW
|
||||
{
|
||||
restart();
|
||||
}
|
||||
@ -95,7 +95,7 @@ void QElapsedTimer::start()
|
||||
|
||||
\sa start(), invalidate(), elapsed()
|
||||
*/
|
||||
qint64 QElapsedTimer::restart()
|
||||
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 old = t1;
|
||||
t1 = QDateTime::currentMSecsSinceEpoch();
|
||||
@ -114,7 +114,7 @@ qint64 QElapsedTimer::restart()
|
||||
|
||||
\sa start(), restart(), hasExpired(), invalidate()
|
||||
*/
|
||||
qint64 QElapsedTimer::nsecsElapsed() const
|
||||
qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
|
||||
{
|
||||
return elapsed() * 1000000;
|
||||
}
|
||||
@ -126,7 +126,7 @@ qint64 QElapsedTimer::nsecsElapsed() const
|
||||
|
||||
\sa start(), restart(), hasExpired(), invalidate()
|
||||
*/
|
||||
qint64 QElapsedTimer::elapsed() const
|
||||
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
|
||||
{
|
||||
return QDateTime::currentMSecsSinceEpoch() - t1;
|
||||
}
|
||||
@ -142,7 +142,7 @@ qint64 QElapsedTimer::elapsed() const
|
||||
|
||||
\sa clockType(), elapsed()
|
||||
*/
|
||||
qint64 QElapsedTimer::msecsSinceReference() const
|
||||
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
|
||||
{
|
||||
return t1;
|
||||
}
|
||||
@ -157,7 +157,7 @@ qint64 QElapsedTimer::msecsSinceReference() const
|
||||
|
||||
\sa secsTo(), elapsed()
|
||||
*/
|
||||
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
|
||||
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 diff = other.t1 - t1;
|
||||
return diff;
|
||||
@ -172,7 +172,7 @@ qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
|
||||
|
||||
\sa msecsTo(), elapsed()
|
||||
*/
|
||||
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
|
||||
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{
|
||||
return msecsTo(other) / 1000;
|
||||
}
|
||||
@ -186,7 +186,7 @@ qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
|
||||
and the other isn't. However, two invalid timers are equal and thus this
|
||||
function will return false.
|
||||
*/
|
||||
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
|
||||
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW
|
||||
{
|
||||
return v1.t1 < v2.t1;
|
||||
}
|
||||
|
@ -47,12 +47,12 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QElapsedTimer::ClockType QElapsedTimer::clockType()
|
||||
QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW
|
||||
{
|
||||
return MachAbsoluteTime;
|
||||
}
|
||||
|
||||
bool QElapsedTimer::isMonotonic()
|
||||
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -71,7 +71,7 @@ static qint64 absoluteToMSecs(qint64 cpuTime)
|
||||
return absoluteToNSecs(cpuTime) / 1000000;
|
||||
}
|
||||
|
||||
timeval qt_gettime()
|
||||
timeval qt_gettime() Q_DECL_NOTHROW
|
||||
{
|
||||
timeval tv;
|
||||
|
||||
@ -82,13 +82,13 @@ timeval qt_gettime()
|
||||
return tv;
|
||||
}
|
||||
|
||||
void QElapsedTimer::start()
|
||||
void QElapsedTimer::start() Q_DECL_NOTHROW
|
||||
{
|
||||
t1 = mach_absolute_time();
|
||||
t2 = 0;
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::restart()
|
||||
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 old = t1;
|
||||
t1 = mach_absolute_time();
|
||||
@ -97,34 +97,34 @@ qint64 QElapsedTimer::restart()
|
||||
return absoluteToMSecs(t1 - old);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::nsecsElapsed() const
|
||||
qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
|
||||
{
|
||||
uint64_t cpu_time = mach_absolute_time();
|
||||
return absoluteToNSecs(cpu_time - t1);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::elapsed() const
|
||||
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
|
||||
{
|
||||
uint64_t cpu_time = mach_absolute_time();
|
||||
return absoluteToMSecs(cpu_time - t1);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::msecsSinceReference() const
|
||||
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
|
||||
{
|
||||
return absoluteToMSecs(t1);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
|
||||
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{
|
||||
return absoluteToMSecs(other.t1 - t1);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
|
||||
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{
|
||||
return msecsTo(other) / 1000;
|
||||
}
|
||||
|
||||
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
|
||||
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW
|
||||
{
|
||||
return v1.t1 < v2.t1;
|
||||
}
|
||||
|
@ -102,13 +102,13 @@ static inline qint64 fractionAdjustment()
|
||||
}
|
||||
}
|
||||
|
||||
bool QElapsedTimer::isMonotonic()
|
||||
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
|
||||
{
|
||||
unixCheckClockType();
|
||||
return monotonicClockAvailable;
|
||||
}
|
||||
|
||||
QElapsedTimer::ClockType QElapsedTimer::clockType()
|
||||
QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW
|
||||
{
|
||||
unixCheckClockType();
|
||||
return monotonicClockAvailable ? MonotonicClock : SystemTime;
|
||||
@ -134,7 +134,7 @@ static inline void do_gettime(qint64 *sec, qint64 *frac)
|
||||
}
|
||||
|
||||
// used in qcore_unix.cpp and qeventdispatcher_unix.cpp
|
||||
timeval qt_gettime()
|
||||
timeval qt_gettime() Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 sec, frac;
|
||||
do_gettime(&sec, &frac);
|
||||
@ -157,17 +157,17 @@ static qint64 elapsedAndRestart(qint64 sec, qint64 frac,
|
||||
return sec * Q_INT64_C(1000) + frac / fractionAdjustment();
|
||||
}
|
||||
|
||||
void QElapsedTimer::start()
|
||||
void QElapsedTimer::start() Q_DECL_NOTHROW
|
||||
{
|
||||
do_gettime(&t1, &t2);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::restart()
|
||||
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
|
||||
{
|
||||
return elapsedAndRestart(t1, t2, &t1, &t2);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::nsecsElapsed() const
|
||||
qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 sec, frac;
|
||||
do_gettime(&sec, &frac);
|
||||
@ -178,30 +178,30 @@ qint64 QElapsedTimer::nsecsElapsed() const
|
||||
return sec * Q_INT64_C(1000000000) + frac;
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::elapsed() const
|
||||
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 sec, frac;
|
||||
return elapsedAndRestart(t1, t2, &sec, &frac);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::msecsSinceReference() const
|
||||
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
|
||||
{
|
||||
return t1 * Q_INT64_C(1000) + t2 / fractionAdjustment();
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
|
||||
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 secs = other.t1 - t1;
|
||||
qint64 fraction = other.t2 - t2;
|
||||
return secs * Q_INT64_C(1000) + fraction / fractionAdjustment();
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
|
||||
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{
|
||||
return other.t1 - t1;
|
||||
}
|
||||
|
||||
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
|
||||
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW
|
||||
{
|
||||
return v1.t1 < v2.t1 || (v1.t1 == v2.t1 && v1.t2 < v2.t2);
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ int qt_msectime()
|
||||
return ticksToNanoseconds(getTickCount()) / 1000000;
|
||||
}
|
||||
|
||||
QElapsedTimer::ClockType QElapsedTimer::clockType()
|
||||
QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW
|
||||
{
|
||||
resolveLibs();
|
||||
|
||||
@ -135,18 +135,18 @@ QElapsedTimer::ClockType QElapsedTimer::clockType()
|
||||
return TickCounter;
|
||||
}
|
||||
|
||||
bool QElapsedTimer::isMonotonic()
|
||||
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void QElapsedTimer::start()
|
||||
void QElapsedTimer::start() Q_DECL_NOTHROW
|
||||
{
|
||||
t1 = getTickCount();
|
||||
t2 = 0;
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::restart()
|
||||
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 oldt1 = t1;
|
||||
t1 = getTickCount();
|
||||
@ -154,35 +154,35 @@ qint64 QElapsedTimer::restart()
|
||||
return ticksToNanoseconds(t1 - oldt1) / 1000000;
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::nsecsElapsed() const
|
||||
qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 elapsed = getTickCount() - t1;
|
||||
return ticksToNanoseconds(elapsed);
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::elapsed() const
|
||||
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 elapsed = getTickCount() - t1;
|
||||
return ticksToNanoseconds(elapsed) / 1000000;
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::msecsSinceReference() const
|
||||
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
|
||||
{
|
||||
return ticksToNanoseconds(t1) / 1000000;
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
|
||||
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{
|
||||
qint64 difference = other.t1 - t1;
|
||||
return ticksToNanoseconds(difference) / 1000000;
|
||||
}
|
||||
|
||||
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
|
||||
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
||||
{
|
||||
return msecsTo(other) / 1000;
|
||||
}
|
||||
|
||||
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
|
||||
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW
|
||||
{
|
||||
return (v1.t1 - v2.t1) < 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user