bus.setPicelColor optimization: optimizing some CPU cycles out of the hot path in sPC and gPC

* optimize loops that scan through all busses
* small speedups for  Bus::autoWhiteCalc()
* small speedups for ColorOrderMap::getPixelColorOrder()

thanks to github Copilot for giving me the right ideas for this optimization
This commit is contained in:
Frank
2025-10-20 21:58:23 +02:00
parent 6e8ab94ee9
commit 541b201855
2 changed files with 67 additions and 47 deletions

View File

@@ -463,13 +463,14 @@ class BusManager {
// WLEDMM clear cached Bus info
lastBus = nullptr;
laststart = 0;
lastend = 0;
lastlen= 0;
slowMode = isRTMode;
}
void setStatusPixel(uint32_t c);
void setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1);
void setPixelColor(uint16_t pix, uint32_t c); // WLEDMM third parameter "cct" is never used - removed
//void setPixelColor(uint16_t pix, uint32_t c, int16_t cct) {Bus::setCCT(cct); setPixelColor(pix, c);}; // WLEDMM legacy support - slow, avoid using it
void setBrightness(uint8_t b, bool immediate=false); // immediate=true is for use in ABL, it applies brightness immediately (warning: inefficient)
@@ -504,7 +505,7 @@ class BusManager {
// WLEDMM cache last used Bus -> 20% to 30% speedup when using many LED pins
Bus *lastBus = nullptr;
unsigned laststart = 0;
unsigned lastend = 0;
unsigned lastlen = 0;
bool slowMode = false; // WLEDMM not sure why we need this. But its necessary.
inline uint8_t getNumVirtualBusses() const {