From 6cccd396e6c94c43358f15967e7898a293b4f6db Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Fri, 8 Aug 2003 21:41:10 +0000 Subject: [PATCH] Two fixes: use the high-performance timer if it's available and make our frame tick interval 10ms on Windows because any non-multiple of 10 causes the big fat fuckola in the form of heinously accelerated clock drift. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2751 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../com/threerings/media/FrameManager.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/java/com/threerings/media/FrameManager.java b/src/java/com/threerings/media/FrameManager.java index 86d0bdeb6..dcbf306ce 100644 --- a/src/java/com/threerings/media/FrameManager.java +++ b/src/java/com/threerings/media/FrameManager.java @@ -1,5 +1,5 @@ // -// $Id: FrameManager.java,v 1.44 2003/07/29 00:41:40 mdb Exp $ +// $Id: FrameManager.java,v 1.45 2003/08/08 21:41:10 mdb Exp $ package com.threerings.media; @@ -107,7 +107,17 @@ public abstract class FrameManager */ public static FrameManager newInstance (JFrame frame) { - return newInstance(frame, new SystemMediaTimer()); + // first try creating a PerfTimer which is the best if we're using + // JDK1.4.2 + MediaTimer timer = null; + try { + timer = (MediaTimer)Class.forName(PERF_TIMER).newInstance(); + } catch (Exception e) { + Log.info("Can't use PerfTimer (" + e + ") reverting to " + + "System.currentTimeMillis() based timer."); + timer = new SystemMediaTimer(); + } + return newInstance(frame, timer); } /** @@ -685,6 +695,8 @@ public abstract class FrameManager { public void run () { + Log.info("Frame manager ticker running " + + "[sleepGran=" + _sleepGranularity.getValue() + "]."); while (_running) { long start = 0L; if (MediaPanel._perfDebug.getValue()) { @@ -846,8 +858,12 @@ public abstract class FrameManager new RuntimeAdjust.IntAdjust( "The number of milliseconds slept before checking to see if " + "it's time to queue up a new frame tick.", "narya.media.sleep_gran", - MediaPrefs.config, 7); + MediaPrefs.config, RunAnywhere.isWindows() ? 10 : 7); /** Whether to enable AWT event debugging for the frame. */ protected static final boolean DEBUG_EVENTS = false; + + /** The name of the high-performance timer class we attempt to load. */ + protected static final String PERF_TIMER = + "com.threerings.media.timer.PerfTimer"; }