Bläddra i källkod

Convert the half sleep to a sleep that is a fraction of the target FPS (Default 95%) to reduce CPU use. (#1756)

Co-authored-by: Jeffery Myers <JefMyers@blizzard.com>
pull/1757/head
Jeffery Myers 3 år sedan
committed by GitHub
förälder
incheckning
133e6f097d
Ingen känd nyckel hittad för denna signaturen i databasen GPG-nyckel ID: 4AEE18F83AFDEB23
2 ändrade filer med 13 tillägg och 8 borttagningar
  1. +2
    -2
      src/config.h
  2. +11
    -6
      src/core.c

+ 2
- 2
src/config.h Visa fil

@ -43,8 +43,8 @@
#define SUPPORT_WINMM_HIGHRES_TIMER 1
// Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
//#define SUPPORT_BUSY_WAIT_LOOP 1
// Use a half-busy wait loop, in this case frame sleeps for some time and runs a busy-wait-loop at the end
#define SUPPORT_HALFBUSY_WAIT_LOOP
// Use a partial-busy wait loop, in this case frame sleeps for most of the time, but then runs a busy loop at the end for accuracy
#define SUPPORT_PARTIALBUSY_WAIT_LOOP
// Wait for events passively (sleeping while no events) instead of polling them actively every frame
//#define SUPPORT_EVENTS_WAITING 1
// Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()

+ 11
- 6
src/core.c Visa fil

@ -62,8 +62,8 @@
* #define SUPPORT_BUSY_WAIT_LOOP
* Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
*
* #define SUPPORT_HALFBUSY_WAIT_LOOP
* Use a half-busy wait loop, in this case frame sleeps for some time and runs a busy-wait-loop at the end
* #define SUPPORT_PARTIALBUSY_WAIT_LOOP
* Use a partial-busy wait loop, in this case frame sleeps for most of the time and runs a busy-wait-loop at the end
*
* #define SUPPORT_EVENTS_WAITING
* Wait for events passively (sleeping while no events) instead of polling them actively every frame
@ -4550,10 +4550,15 @@ static void Wait(float ms)
// Busy wait loop
while ((nextTime - prevTime) < ms/1000.0f) nextTime = GetTime();
#else
#if defined(SUPPORT_HALFBUSY_WAIT_LOOP)
#define MAX_HALFBUSY_WAIT_TIME 4
#if defined(SUPPORT_PARTIALBUSY_WAIT_LOOP)
#define DEFAULT_PARTIALBUSY_WAIT_TIME 4
#define PARTIALBUSY_WAIT_FACTOR 0.95f
float halfWait = DEFAULT_PARTIALBUSY_WAIT_TIME;
if (CORE.Time.target > 0)
halfWait = CORE.Time.target * PARTIALBUSY_WAIT_FACTOR;
double destTime = GetTime() + ms/1000;
if (ms > MAX_HALFBUSY_WAIT_TIME) ms -= MAX_HALFBUSY_WAIT_TIME;
if (ms > halfWait) ms -= halfWait;
#endif
#if defined(_WIN32)
@ -4573,7 +4578,7 @@ static void Wait(float ms)
usleep(ms*1000.0f);
#endif
#if defined(SUPPORT_HALFBUSY_WAIT_LOOP)
#if defined(SUPPORT_PARTIALBUSY_WAIT_LOOP)
while (GetTime() < destTime) { }
#endif
#endif

Laddar…
Avbryt
Spara