QElapsedTimer/Win: Fix 64-bit integer overflow
The ticksToNanoseconds function in qelapsedtimer_win.cpp multiplies ticks from performance counter with 1000000000 which can sometimes result in 64-bit integer overflow. This can cause the elapsed time to reset or jump around. Task-number: QTBUG-23150 Change-Id: I464503e03cbe64e13906e773beafbf88e7dc256a Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit f30a91ba9d98de1a0ebee5608ba289ac35871a8c)
This commit is contained in:
parent
d1abf3e3e7
commit
e8ecf3ad03
@ -83,7 +83,9 @@ static inline qint64 ticksToNanoseconds(qint64 ticks)
|
||||
{
|
||||
if (counterFrequency > 0) {
|
||||
// QueryPerformanceCounter uses an arbitrary frequency
|
||||
return ticks * 1000000000 / counterFrequency;
|
||||
qint64 seconds = ticks / counterFrequency;
|
||||
qint64 nanoSeconds = (ticks - seconds * counterFrequency) * 1000000000 / counterFrequency;
|
||||
return seconds * 1000000000 + nanoSeconds;
|
||||
} else {
|
||||
// GetTickCount(64) return milliseconds
|
||||
return ticks * 1000000;
|
||||
|
Loading…
Reference in New Issue
Block a user