summaryrefslogtreecommitdiff
path: root/wasp
diff options
context:
space:
mode:
authorDaniel Thompson <daniel@redfelineninja.org.uk>2020-04-06 21:03:54 (GMT)
committerDaniel Thompson <daniel@redfelineninja.org.uk>2020-04-06 21:04:21 (GMT)
commit841fbef8a6c61fd6dccf04f640abb5d3701957a3 (patch)
tree1e446479720433bf1096292785396d0f75ee3b40 /wasp
parent8ed80eeebab06dba5839a7f08703494a9917348a (diff)
wasp: testapp: Add RLE drawing benchmarks.
Diffstat (limited to 'wasp')
-rw-r--r--wasp/apps/testapp.py70
1 files changed, 69 insertions, 1 deletions
diff --git a/wasp/apps/testapp.py b/wasp/apps/testapp.py
index 478249f..eece822 100644
--- a/wasp/apps/testapp.py
+++ b/wasp/apps/testapp.py
@@ -11,8 +11,42 @@ class TestApp():
NAME = 'Self Test'
ICON = icons.app
+ # 2-bit RLE, generated from res/app_icon.png, 457 bytes
+ RLE_2BIT = (
+ 96, 64,
+ b'\x1e@md<d<d;f?X\xec2\xf0/'
+ b'\xf2-\xf4,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3\x0c\x80\xfc\x83\x10\xc0]'
+ b'\xc3\x0c@\xffC,C\n\x87\x0c\xc7\nC,C\t'
+ b'\x83\x02\x84\n\xc4\x02\xc3\tC,C\x08\x82\x07\x82\x08'
+ b'\xc2\x07\xc2\x08C,C\x07\x82\t\x82\x06\xc2\t\xc2\x07'
+ b'C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x06'
+ b'\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x05\x82\x0c\x82\x04'
+ b'\xc2\x0c\xc2\x05C,C\x05\x82\x0c\x82\x04\xc2\x0c\xc2\x05'
+ b'C,C\x05\x83\x0b\x82\x04\xc2\x0b\xc3\x05C,C\x06'
+ b'\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x06\x82\x0b\x82\x04'
+ b'\xc2\x0b\xc1\x07C,C\x07\x82\n\x82\x04\xc2\n\xc2\x07'
+ b'C+D\x08\x82\t\x82\x04\xc2\t\xc2\x08C*E\t'
+ b'\x8c\x04\xcc\tC*E\n\x8b\x04\xcb\nC*E.'
+ b'C*E.C*E.C*E.C*E\n'
+ b'\x80\xe9\x8b\x04\xc0o\xcb\nC+D\t\x8c\x04\xcc\t'
+ b'C,C\x08\x82\t\x82\x04\xc2\t\xc2\x08C,C\x07'
+ b'\x82\n\x82\x04\xc2\n\xc2\x07C,C\x06\x82\x0b\x82\x04'
+ b'\xc2\x0b\xc1\x07C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06'
+ b'C,C\x05\x83\x0b\x82\x04\xc2\x0b\xc3\x05C,C\x05'
+ b'\x82\x0c\x82\x04\xc2\x0c\xc2\x05C,C\x05\x82\x0c\x82\x04'
+ b'\xc2\x0c\xc2\x05C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06'
+ b'C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x07'
+ b'\x82\t\x82\x06\xc2\t\xc2\x07C,C\x08\x82\x07\x82\x08'
+ b'\xc2\x07\xc2\x08C,C\t\x83\x02\x84\n\xc4\x02\xc3\t'
+ b'C,C\n\x86\x0e\xc6\nC,C\x0c\x83\x10\xc3\x0c'
+ b'C,C.C,C.C,C.C,C.'
+ b'C,C.C,t-r/p2l?X@'
+ b'mf;d<d<d\x1e'
+ )
+
def __init__(self):
- self.tests = ('Touch', 'String', 'Button', 'Crash')
+ self.tests = ('Touch', 'String', 'Button', 'Crash', '1-bit RLE', '2-bit RLE')
self.test = self.tests[0]
self.scroll = wasp.widgets.ScrollIndicator()
@@ -56,6 +90,36 @@ class TestApp():
event[1], event[2]), 0, 108, width=240)
elif self.test == 'String':
self.benchmark_string()
+ elif self.test == '1-bit RLE':
+ self.benchmark_rle_1bit()
+ elif self.test == '2-bit RLE':
+ self.benchmark_rle_2bit()
+
+ def benchmark_rle_1bit(self):
+ draw = wasp.watch.drawable
+ draw.fill(0, 0, 30, 240, 240-30)
+ self.scroll.draw()
+ t = machine.Timer(id=1, period=8000000)
+ t.start()
+ for i in range(0, 128, 16):
+ draw.rleblit(self.ICON, (i, 30 + i))
+ elapsed = t.time()
+ t.stop()
+ del t
+ draw.string('{}s'.format(elapsed / 1000000), 12, 24+192)
+
+ def benchmark_rle_2bit(self):
+ draw = wasp.watch.drawable
+ draw.fill(0, 0, 30, 240, 240-30)
+ self.scroll.draw()
+ t = machine.Timer(id=1, period=8000000)
+ t.start()
+ for i in range(0, 128, 16):
+ draw.rle2bit(self.RLE_2BIT, i, 30 + i)
+ elapsed = t.time()
+ t.stop()
+ del t
+ draw.string('{}s'.format(elapsed / 1000000), 12, 24+192)
def benchmark_string(self):
draw = wasp.watch.drawable
@@ -85,5 +149,9 @@ class TestApp():
if self.test == 'Crash':
draw.string("Press button to", 12, 24+24)
draw.string("throw exception.", 12, 24+48)
+ elif self.test == '1-bit RLE':
+ draw.rleblit(self.ICON, (120-48, 120-32))
+ elif self.test == '2-bit RLE':
+ draw.rle2bit(self.RLE_2BIT, 120-48, 120-32)
wasp.watch.display.mute(False)