diff options
| author | Jeffery Myers <[email protected]> | 2021-05-07 10:49:44 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-05-07 19:49:44 +0200 |
| commit | 133e6f097d9c088c36100cc1cd1d0773daf8e19b (patch) | |
| tree | 7025510e4660775b923eadbb58dba1b1d880b959 /src/core.c | |
| parent | b62c86572e58c95e23c19d03e9b0bdacfa214f80 (diff) | |
| download | raylib-133e6f097d9c088c36100cc1cd1d0773daf8e19b.tar.gz raylib-133e6f097d9c088c36100cc1cd1d0773daf8e19b.zip | |
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 <[email protected]>
Diffstat (limited to 'src/core.c')
| -rw-r--r-- | src/core.c | 17 |
1 files changed, 11 insertions, 6 deletions
@@ -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 |
