Wow, the media framework gets into a bad way if it's forced to use the
inaccurate System.currentTimeMillis() timer. Fortuately Sun introduced System.nanoTime() in 1.5 which provides civilized timing information, so we can use that instead of sun.misc.Perf which is unavailable in an applet sandbox. We will need to go in and try to cope as best we can with currentTimeMillis() if we want to support unsigned play in JDK 1.4 or earlier. We'll do that later. git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@231 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
+8
-10
@@ -22,20 +22,18 @@
|
||||
package com.threerings.media.timer;
|
||||
|
||||
/**
|
||||
* Implements the {@link MediaTimer} interface using {@link
|
||||
* System#currentTimeMillis} to obtain timing information.
|
||||
* Implements the {@link MediaTimer} interface using {@link System#currentTimeMillis} to obtain
|
||||
* timing information.
|
||||
*
|
||||
* <p> <em>Note:</em> {@link System#currentTimeMillis} is notoriously
|
||||
* inaccurate on different platforms. See <a
|
||||
* href="http://developer.java.sun.com/developer/bugParade/bugs/4486109.html">
|
||||
* <p> <em>Note:</em> {@link System#currentTimeMillis} is notoriously inaccurate on different
|
||||
* platforms. See <a href="http://developer.java.sun.com/developer/bugParade/bugs/4486109.html">
|
||||
* bug report 4486109</a> for more information.
|
||||
*
|
||||
* <p> <em>Also note:</em> clock drift on Windows XP is especially
|
||||
* pronounced and is exacerbated by the fact that WinXP periodically
|
||||
* resyncs the system clock with the hardware clock, causing discontinuous
|
||||
* jumps in the progression of time (usually backwards in time).
|
||||
* <p> <em>Also note:</em> clock drift on Windows XP is especially pronounced and is exacerbated by
|
||||
* the fact that WinXP periodically resyncs the system clock with the hardware clock, causing
|
||||
* discontinuous jumps in the progression of time (usually backwards in time).
|
||||
*/
|
||||
public class SystemMediaTimer implements MediaTimer
|
||||
public class MillisTimer implements MediaTimer
|
||||
{
|
||||
// documentation inherited from interface
|
||||
public void reset ()
|
||||
@@ -0,0 +1,50 @@
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// Nenya library - tools for developing networked games
|
||||
// Copyright (C) 2002-2007 Three Rings Design, Inc., All Rights Reserved
|
||||
// http://www.threerings.net/code/nenya/
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or modify it
|
||||
// under the terms of the GNU Lesser General Public License as published
|
||||
// by the Free Software Foundation; either version 2.1 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
package com.threerings.media.timer;
|
||||
|
||||
/**
|
||||
* Uses the {@link System#nanoTime} method introduced in 1.5 to try to obtain higher resolution
|
||||
* timestamps than those available via {@link System#currentTimeMillis}.
|
||||
*/
|
||||
public class NanoTimer implements MediaTimer
|
||||
{
|
||||
// documentation inherited from interface
|
||||
public void reset ()
|
||||
{
|
||||
_resetStamp = System.nanoTime();
|
||||
}
|
||||
|
||||
// documentation inherited from interface
|
||||
public long getElapsedMillis ()
|
||||
{
|
||||
return (System.nanoTime() - _resetStamp) / 1000000L;
|
||||
}
|
||||
|
||||
// documentation inherited from interface
|
||||
public long getElapsedMicros ()
|
||||
{
|
||||
return (System.nanoTime() - _resetStamp) / 1000L;
|
||||
}
|
||||
|
||||
/** The time at which this timer was last reset. */
|
||||
protected long _resetStamp = System.nanoTime();
|
||||
}
|
||||
Reference in New Issue
Block a user