Added a workaround to the time fluctuation WinXP bug.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2735 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
//
|
//
|
||||||
// $Id: SystemMediaTimer.java,v 1.1 2002/11/20 02:17:38 mdb Exp $
|
// $Id: SystemMediaTimer.java,v 1.2 2003/07/29 00:27:32 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media.timer;
|
package com.threerings.media.timer;
|
||||||
|
|
||||||
|
import com.threerings.media.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements the {@link MediaTimer} interface using {@link
|
* Implements the {@link MediaTimer} interface using {@link
|
||||||
* System#currentTimeMillis} to obtain timing information.
|
* System#currentTimeMillis} to obtain timing information.
|
||||||
@@ -23,7 +25,23 @@ public class SystemMediaTimer implements MediaTimer
|
|||||||
// documentation inherited from interface
|
// documentation inherited from interface
|
||||||
public long getElapsedMillis ()
|
public long getElapsedMillis ()
|
||||||
{
|
{
|
||||||
return System.currentTimeMillis() - _resetStamp;
|
long stamp = System.currentTimeMillis() - _resetStamp;
|
||||||
|
|
||||||
|
// on WinXP the time sometimes seems to leap into the
|
||||||
|
// past; here we do our best to work around this insanity
|
||||||
|
if (stamp < _lastStamp) {
|
||||||
|
// only warn once per time anomaly
|
||||||
|
if (stamp > _lastWarning) {
|
||||||
|
Log.warning("Someone call Einstein! The clock is " +
|
||||||
|
"running backwards [dt=" +
|
||||||
|
(stamp - _lastStamp) + "].");
|
||||||
|
_lastWarning = _lastStamp;
|
||||||
|
}
|
||||||
|
stamp = _lastStamp;
|
||||||
|
}
|
||||||
|
_lastStamp = stamp;
|
||||||
|
|
||||||
|
return stamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited from interface
|
// documentation inherited from interface
|
||||||
@@ -34,4 +52,7 @@ public class SystemMediaTimer implements MediaTimer
|
|||||||
|
|
||||||
/** The time at which this timer was last reset. */
|
/** The time at which this timer was last reset. */
|
||||||
protected long _resetStamp = System.currentTimeMillis();
|
protected long _resetStamp = System.currentTimeMillis();
|
||||||
|
|
||||||
|
/** Used to ensure that the timer is sane. */
|
||||||
|
protected long _lastStamp, _lastWarning;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user