mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-13 14:58:15 +00:00
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>
This commit is contained in:
@@ -43,8 +43,8 @@
|
|||||||
#define SUPPORT_WINMM_HIGHRES_TIMER 1
|
#define SUPPORT_WINMM_HIGHRES_TIMER 1
|
||||||
// Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
|
// Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
|
||||||
//#define SUPPORT_BUSY_WAIT_LOOP 1
|
//#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
|
// 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_HALFBUSY_WAIT_LOOP
|
#define SUPPORT_PARTIALBUSY_WAIT_LOOP
|
||||||
// Wait for events passively (sleeping while no events) instead of polling them actively every frame
|
// Wait for events passively (sleeping while no events) instead of polling them actively every frame
|
||||||
//#define SUPPORT_EVENTS_WAITING 1
|
//#define SUPPORT_EVENTS_WAITING 1
|
||||||
// Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()
|
// Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()
|
||||||
|
17
src/core.c
17
src/core.c
@@ -62,8 +62,8 @@
|
|||||||
* #define SUPPORT_BUSY_WAIT_LOOP
|
* #define SUPPORT_BUSY_WAIT_LOOP
|
||||||
* Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
|
* Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
|
||||||
*
|
*
|
||||||
* #define SUPPORT_HALFBUSY_WAIT_LOOP
|
* #define SUPPORT_PARTIALBUSY_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
|
* 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
|
* #define SUPPORT_EVENTS_WAITING
|
||||||
* Wait for events passively (sleeping while no events) instead of polling them actively every frame
|
* 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
|
// Busy wait loop
|
||||||
while ((nextTime - prevTime) < ms/1000.0f) nextTime = GetTime();
|
while ((nextTime - prevTime) < ms/1000.0f) nextTime = GetTime();
|
||||||
#else
|
#else
|
||||||
#if defined(SUPPORT_HALFBUSY_WAIT_LOOP)
|
#if defined(SUPPORT_PARTIALBUSY_WAIT_LOOP)
|
||||||
#define MAX_HALFBUSY_WAIT_TIME 4
|
#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;
|
double destTime = GetTime() + ms/1000;
|
||||||
if (ms > MAX_HALFBUSY_WAIT_TIME) ms -= MAX_HALFBUSY_WAIT_TIME;
|
if (ms > halfWait) ms -= halfWait;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
@@ -4573,7 +4578,7 @@ static void Wait(float ms)
|
|||||||
usleep(ms*1000.0f);
|
usleep(ms*1000.0f);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SUPPORT_HALFBUSY_WAIT_LOOP)
|
#if defined(SUPPORT_PARTIALBUSY_WAIT_LOOP)
|
||||||
while (GetTime() < destTime) { }
|
while (GetTime() < destTime) { }
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user