From 0f5da09916025af8e7263acbb32626824efecb0e Mon Sep 17 00:00:00 2001 From: Pazaz Date: Wed, 27 Apr 2022 14:46:14 -0400 Subject: [PATCH] Fixed render loop slowing down update loop if OpenGL performance was being limited by a power target --- client/src/main/java/rt4/GameShell.java | 13 +++++-------- client/src/main/java/rt4/MillisTimer.java | 4 ++++ client/src/main/java/rt4/NanoTimer.java | 19 +++++++++++++++++++ client/src/main/java/rt4/Timer.java | 2 ++ 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/client/src/main/java/rt4/GameShell.java b/client/src/main/java/rt4/GameShell.java index b78b7b6..bf6141b 100644 --- a/client/src/main/java/rt4/GameShell.java +++ b/client/src/main/java/rt4/GameShell.java @@ -534,7 +534,10 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene updateDelta = currentTime - lastUpdateTime; if (updateDelta >= FIXED_UPDATE_RATE * 1_000_000) { - this.mainLoopWrapper(); + logicCycles = timer.count(minimumDelay, (int)FIXED_UPDATE_RATE); + for (int cycle = 0; cycle < logicCycles; ++cycle) { + this.mainLoopWrapper(); + } lastUpdateTime = currentTime; flush(signLink, canvas); } @@ -544,13 +547,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene this.mainInputLoop(); this.mainRedrawWrapper(); lastDrawTime = currentTime; - - if (VARIABLE_RENDER_RATE > minimumDelay) { - timer.sleep(minimumDelay, (int) VARIABLE_RENDER_RATE); - } else { - // encourage thread switching - Thread.yield(); - } + Thread.yield(); } } } catch (@Pc(198) Exception ex) { diff --git a/client/src/main/java/rt4/MillisTimer.java b/client/src/main/java/rt4/MillisTimer.java index f879820..9784cf9 100644 --- a/client/src/main/java/rt4/MillisTimer.java +++ b/client/src/main/java/rt4/MillisTimer.java @@ -87,4 +87,8 @@ public final class MillisTimer extends Timer { this.anInt3553 &= 0xFF; return local139; } + + public int count(int arg0, int arg1) { + return 1; + } } diff --git a/client/src/main/java/rt4/NanoTimer.java b/client/src/main/java/rt4/NanoTimer.java index 4d18fa1..6d4be6b 100644 --- a/client/src/main/java/rt4/NanoTimer.java +++ b/client/src/main/java/rt4/NanoTimer.java @@ -37,4 +37,23 @@ public final class NanoTimer extends Timer { } return local31; } + + @Override + public int count(int arg0, int arg1) { + @Pc(9) long local9 = (long) arg0 * 1000000L; + @Pc(14) long local14 = this.aLong142 - System.nanoTime(); + if (local9 > local14) { + local14 = local9; + } + @Pc(31) int local31 = 0; + @Pc(33) long local33 = System.nanoTime(); + while (local31 < 10 && (local31 < 1 || this.aLong142 < local33)) { + local31++; + this.aLong142 += (long) arg1 * 1000000L; + } + if (local33 > this.aLong142) { + this.aLong142 = local33; + } + return local31; + } } diff --git a/client/src/main/java/rt4/Timer.java b/client/src/main/java/rt4/Timer.java index 25cb348..fbb97f9 100644 --- a/client/src/main/java/rt4/Timer.java +++ b/client/src/main/java/rt4/Timer.java @@ -22,4 +22,6 @@ public abstract class Timer { @OriginalMember(owner = "client!s", name = "b", descriptor = "(I)V") public abstract void reset(); + + public abstract int count(int arg0, int arg1); }