drivers: st7789: Pre-allocate a memoryview
Reduce the cost of slicing the linebuffer by pre-allocating a memoryview. Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
This commit is contained in:
parent
5abae5a7f6
commit
6b41c8f3db
3 changed files with 9 additions and 9 deletions
|
@ -223,7 +223,7 @@ class GameOfLifeApp():
|
||||||
|
|
||||||
display = wasp.watch.display
|
display = wasp.watch.display
|
||||||
lb = display.linebuffer
|
lb = display.linebuffer
|
||||||
alive = memoryview(lb)[0:2*16]
|
alive = lb[0:2*16]
|
||||||
self._color = xorshift12(self._color)
|
self._color = xorshift12(self._color)
|
||||||
rgbhi = get_color(self._color)
|
rgbhi = get_color(self._color)
|
||||||
rgblo = rgbhi & 0xff
|
rgblo = rgbhi & 0xff
|
||||||
|
@ -234,7 +234,7 @@ class GameOfLifeApp():
|
||||||
for i in (0, 3, 12, 15):
|
for i in (0, 3, 12, 15):
|
||||||
alive[i*2] = 0
|
alive[i*2] = 0
|
||||||
alive[i*2+1] = 0
|
alive[i*2+1] = 0
|
||||||
dead = memoryview(lb)[2*16:4*16]
|
dead = lb[2*16:4*16]
|
||||||
for i in range(len(dead)):
|
for i in range(len(dead)):
|
||||||
dead[i] = 0
|
dead[i] = 0
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ def _bounding_box(s, font):
|
||||||
def _draw_glyph(display, glyph, x, y, bgfg):
|
def _draw_glyph(display, glyph, x, y, bgfg):
|
||||||
(px, h, w) = glyph
|
(px, h, w) = glyph
|
||||||
|
|
||||||
buf = memoryview(display.linebuffer)[0:2*(w+1)]
|
buf = display.linebuffer[0:2*(w+1)]
|
||||||
buf[2*w] = 0
|
buf[2*w] = 0
|
||||||
buf[2*w + 1] = 0
|
buf[2*w + 1] = 0
|
||||||
bytes_per_row = (w + 7) // 8
|
bytes_per_row = (w + 7) // 8
|
||||||
|
@ -155,7 +155,7 @@ class Draw565(object):
|
||||||
|
|
||||||
# Populate the line buffer
|
# Populate the line buffer
|
||||||
buf = display.linebuffer
|
buf = display.linebuffer
|
||||||
sz = len(display.linebuffer) // 2
|
sz = len(buf) // 2
|
||||||
_fill(buf, bg, min(sz, remaining), 0)
|
_fill(buf, bg, min(sz, remaining), 0)
|
||||||
|
|
||||||
display.quick_start()
|
display.quick_start()
|
||||||
|
@ -163,7 +163,7 @@ class Draw565(object):
|
||||||
quick_write(buf)
|
quick_write(buf)
|
||||||
remaining -= sz
|
remaining -= sz
|
||||||
if remaining:
|
if remaining:
|
||||||
quick_write(memoryview(display.linebuffer)[0:2*remaining])
|
quick_write(buf[0:2*remaining])
|
||||||
display.quick_end()
|
display.quick_end()
|
||||||
|
|
||||||
@micropython.native
|
@micropython.native
|
||||||
|
@ -195,7 +195,7 @@ class Draw565(object):
|
||||||
|
|
||||||
display.set_window(pos[0], pos[1], sx, sy)
|
display.set_window(pos[0], pos[1], sx, sy)
|
||||||
|
|
||||||
buf = memoryview(display.linebuffer)[0:2*sx]
|
buf = display.linebuffer[0:2*sx]
|
||||||
bp = 0
|
bp = 0
|
||||||
color = bg
|
color = bg
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ class Draw565(object):
|
||||||
palette = array.array('H', (0, c1, c2, fg))
|
palette = array.array('H', (0, c1, c2, fg))
|
||||||
next_color = 1
|
next_color = 1
|
||||||
rl = 0
|
rl = 0
|
||||||
buf = memoryview(display.linebuffer)[0:2*sx]
|
buf = display.linebuffer[0:2*sx]
|
||||||
bp = 0
|
bp = 0
|
||||||
|
|
||||||
display.quick_start()
|
display.quick_start()
|
||||||
|
|
|
@ -44,7 +44,7 @@ class ST7789(object):
|
||||||
"""
|
"""
|
||||||
self.width = width
|
self.width = width
|
||||||
self.height = height
|
self.height = height
|
||||||
self.linebuffer = bytearray(2 * width)
|
self.linebuffer = memoryview(bytearray(2 * width))
|
||||||
self.init_display()
|
self.init_display()
|
||||||
|
|
||||||
def init_display(self):
|
def init_display(self):
|
||||||
|
@ -167,7 +167,7 @@ class ST7789(object):
|
||||||
self.set_window(x, y, w, h)
|
self.set_window(x, y, w, h)
|
||||||
|
|
||||||
# Populate the line buffer
|
# Populate the line buffer
|
||||||
buf = memoryview(self.linebuffer)[0:2*w]
|
buf = self.linebuffer[0:2*w]
|
||||||
for xi in range(0, 2*w, 2):
|
for xi in range(0, 2*w, 2):
|
||||||
buf[xi] = bg >> 8
|
buf[xi] = bg >> 8
|
||||||
buf[xi+1] = bg & 0xff
|
buf[xi+1] = bg & 0xff
|
||||||
|
|
Loading…
Add table
Reference in a new issue