|
From: <eli...@us...> - 2007-08-30 12:35:00
|
Revision: 2895
http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=2895&view=rev
Author: elias_naur
Date: 2007-08-30 05:34:56 -0700 (Thu, 30 Aug 2007)
Log Message:
-----------
Don't let Display.sync* sleep with the global lock held
Modified Paths:
--------------
trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java
Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java 2007-08-30 12:19:34 UTC (rev 2894)
+++ trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java 2007-08-30 12:34:56 UTC (rev 2895)
@@ -351,16 +351,19 @@
* @param fps The desired frame rate, in frames per second
*/
public static void sync3(int fps) {
+ long savedTimeThen;
+ long timeNow;
synchronized (GlobalLock.lock) {
- float frameTime = 1.0f / (fps > 1 ? fps - 1 : 1);
- long timeNow = Sys.getTime();
- while (timeNow > timeThen && (float) (timeNow - timeThen) / (float) Sys.getTimerResolution() < frameTime) {
- // This is a system-friendly way of allowing other stuff to use CPU if it wants to
- Thread.yield();
- timeNow = Sys.getTime();
- }
+ timeNow = Sys.getTime();
+ savedTimeThen = timeThen;
timeThen = timeNow;
}
+ float frameTime = 1.0f / (fps > 1 ? fps - 1 : 1);
+ while (timeNow > savedTimeThen && (float) (timeNow - savedTimeThen) / (float) Sys.getTimerResolution() < frameTime) {
+ // This is a system-friendly way of allowing other stuff to use CPU if it wants to
+ Thread.yield();
+ timeNow = Sys.getTime();
+ }
}
private static long timeLate;
@@ -371,15 +374,21 @@
* @param fps The desired frame rate, in frames per second
*/
public static void sync2(int fps) {
+ long timeNow;
+ long gapTo;
+ long savedTimeLate;
synchronized (GlobalLock.lock) {
- long gapTo = Sys.getTimerResolution() / fps + timeThen;
- long timeNow = Sys.getTime();
+ gapTo = Sys.getTimerResolution() / fps + timeThen;
+ timeNow = Sys.getTime();
+ savedTimeLate = timeLate;
+ }
- while (gapTo > timeNow + timeLate) {
- Thread.yield();
- timeNow = Sys.getTime();
- }
+ while (gapTo > timeNow + savedTimeLate) {
+ Thread.yield();
+ timeNow = Sys.getTime();
+ }
+ synchronized (GlobalLock.lock) {
if (gapTo < timeNow)
timeLate = timeNow - gapTo;
else
@@ -395,18 +404,24 @@
* @param fps The desired frame rate, in frames per second
*/
public static void sync(int fps) {
+ long timeNow;
+ long gapTo;
+ long savedTimeLate;
synchronized (GlobalLock.lock) {
- long gapTo = Sys.getTimerResolution() / fps + timeThen;
- long timeNow = Sys.getTime();
+ gapTo = Sys.getTimerResolution() / fps + timeThen;
+ timeNow = Sys.getTime();
+ savedTimeLate = timeLate;
+ }
- while (gapTo > timeNow + timeLate) {
- try {
- Thread.sleep(1);
- } catch (InterruptedException e) {
- }
- timeNow = Sys.getTime();
+ while (gapTo > timeNow + savedTimeLate) {
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
}
+ timeNow = Sys.getTime();
+ }
+ synchronized (GlobalLock.lock) {
if (gapTo < timeNow)
timeLate = timeNow - gapTo;
else
@@ -415,7 +430,7 @@
timeThen = timeNow;
}
}
-
+
/**
* @return the X coordinate of the window (always 0 for fullscreen)
*/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|