Speed up LED-Stalker plugin

The LED-Stalker plugin was looping through its table of `step` values (one for each key)
on every call to `update()`, and calling `compute()` on every value there, but those table
entries were only updated once every 50ms (by default), resulting in a lot of repeated
computation. This resulted in the mean idle cycle time increasing from 565µs to 1317µs on
the Model01 with an (almost) unmodified standard sketch.

This change moves the check for the timeout before the loop through the `step` values, and
aborts processing there if not enough time has elapsed. The resulting mean idle cycle time
becomes 577µs -- an almost negligible increase. It also reduces the PROGMEM footprint by
44 bytes.

Signed-off-by: Michael Richters <gedankenexperimenter@gmail.com>
pull/592/head
Michael Richters 6 years ago
parent e2423fa793
commit ddafb73803
No known key found for this signature in database
GPG Key ID: C40C181A55000EF6

@ -53,8 +53,9 @@ void StalkerEffect::update(void) {
if (!variant) if (!variant)
return; return;
uint16_t now = millis();
uint16_t elapsed = Kaleidoscope.millisAtCycleStart() - step_start_time_; uint16_t elapsed = Kaleidoscope.millisAtCycleStart() - step_start_time_;
if (elapsed < step_length)
return;
for (byte r = 0; r < ROWS; r++) { for (byte r = 0; r < ROWS; r++) {
for (byte c = 0; c < COLS; c++) { for (byte c = 0; c < COLS; c++) {
@ -63,16 +64,13 @@ void StalkerEffect::update(void) {
::LEDControl.setCrgbAt(r, c, variant->compute(&step)); ::LEDControl.setCrgbAt(r, c, variant->compute(&step));
} }
if (elapsed > step_length) {
map_[r][c] = step; map_[r][c] = step;
}
if (!map_[r][c]) if (!map_[r][c])
::LEDControl.setCrgbAt(r, c, inactive_color); ::LEDControl.setCrgbAt(r, c, inactive_color);
} }
} }
if (elapsed > step_length)
step_start_time_ = Kaleidoscope.millisAtCycleStart(); step_start_time_ = Kaleidoscope.millisAtCycleStart();
} }

Loading…
Cancel
Save