8266: improve accuracy of FPS calculation
based on a similar correction I made in upstream recently.
This commit is contained in:
@@ -1775,16 +1775,18 @@ void WS2812FX::show(void) {
|
|||||||
|
|
||||||
estimateCurrentAndLimitBri();
|
estimateCurrentAndLimitBri();
|
||||||
|
|
||||||
|
#if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_FASTPATH)
|
||||||
|
unsigned long b4show = millis(); // WLEDMM the time before calling "show"
|
||||||
|
#endif
|
||||||
// some buses send asynchronously and this method will return before
|
// some buses send asynchronously and this method will return before
|
||||||
// all of the data has been sent.
|
// all of the data has been sent.
|
||||||
// See https://github.com/Makuna/NeoPixelBus/wiki/ESP32-NeoMethods#neoesp32rmt-methods
|
// See https://github.com/Makuna/NeoPixelBus/wiki/ESP32-NeoMethods#neoesp32rmt-methods
|
||||||
unsigned long b4show = millis(); // WLEDMM the time before calling "show"
|
|
||||||
busses.show();
|
busses.show();
|
||||||
unsigned long now = millis();
|
unsigned long now = millis();
|
||||||
unsigned long diff = now - _lastShow;
|
unsigned long diff = now - _lastShow;
|
||||||
uint16_t fpsCurr = 200;
|
uint16_t fpsCurr = 200;
|
||||||
if (diff > 0) fpsCurr = 1000 / diff;
|
if (diff > 0) fpsCurr = 1000 / diff;
|
||||||
_cumulativeFps = (3 * _cumulativeFps + fpsCurr) >> 2;
|
_cumulativeFps = (3 * _cumulativeFps + fpsCurr +2) >> 2; // "+2" for proper rounding (2/4 = 0.5)
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_FASTPATH)
|
#if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_FASTPATH)
|
||||||
_lastShow = b4show; // WLEDMM this is more accurate, however it also icreases CPU load - strip.service will run more frequently
|
_lastShow = b4show; // WLEDMM this is more accurate, however it also icreases CPU load - strip.service will run more frequently
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user