adafruit / Adafruit_CircuitPython_DotStar

Dotstarrin' away in CircuitPython land
MIT License
46 stars 38 forks source link

remove math dependency; speedups #24

Closed dhalbert closed 6 years ago

dhalbert commented 6 years ago
  1. For pirkey, I needed to remove math to be able to freeze a number of modules. adafruit_dotstar uses math.ceil(). I removed that dependency and redid those calculations in specialized ways, which probably sped them up.
  2. Replace enumerate() with range() in fill(). This speeds up fill() by 25% or so.
  3. Don't bother trimming the four-tuple with brightness, since the value isn't used anyway.

In general I am trying to avoid generating garbage. If people were to use integer values a lot instead of tuples, we could preallocate an rgb bytearray and store into it instead of converting the integer value to a tuple.

I experimented with pre-fetching the pixel order values in advance and storing them in instance variables. That would improve fill by about 4%. I didn't bother with that right now.

Tagging @mcscope, who may be interested.

dhalbert commented 6 years ago

@tannewt the change from range() to enumerate() tracks the same change in NeoPixel. Not sure why it was changed: enumerate() fetches the values as well as the indices, but discards the values. Do you remember why? Am I missing something?