-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Function execution with Lightpad firmware 1.1.0 is slower than what we measured using the same exact scripts in July 2019 (firmware version 0.4.4).
After manually downgrading my Lightpad to firmware version 0.4.4, I obtained the same test results as in July 2019. This suggests that firmware 1.1.0 is the cause of the problem.
Littlefoot performance: firmware 0.4.4 vs firmware 1.1.0 | API Mode
By manually downgrading my Lightpad to firmware version 0.4.4, I was able to directly compare the performance of Littlefoot features between firmwares 1.1.0 and 0.4.4.
1000x data retrieval operations
Benchmark script: BMK_DataRetrievalPerformance.littlefoot.zip
In this test we measure the time it takes to perform 1000 assignments of integer data to a variable from:
| Data source | 0.4.4 | 1.1.0 | Average δ |
|---|---|---|---|
| int literal | 8 - 10 ms | 16 - 18 ms | +89% |
| int constant | 8 - 10 ms | 16 - 19 ms | +94% |
| int variable | 9 - 10 ms | 17 - 19 ms | +89% |
| metadata int variable | 9 - 10 ms | 17 - 19 ms | +89% |
| heap | 12 - 13 ms | 21 - 24 ms | +80% |
| metadata vector element | 22 - 23 ms | 36 - 39 ms | +67% |
| local config item | 33 - 36 ms | 39 ms | +13% |
1000x empty loop iterations
Benchmark script: BMK_LoopPerformance.littlefoot.zip
| 0.4.4 | 1.1.0 | Average δ |
|---|---|---|
| 7 - 8 ms | 13 ms | +73% |
1000x empty function calls
Benchmark script: BMK_FunctionCallPerformance.littlefoot.zip
| 0.4.4 | 1.1.0 | Average δ |
|---|---|---|
| 9 ms | 15 - 16 ms | +72% |
1000x empty conditional statements
Benchmark script: BMK_ConditionalPerformance.littlefoot.zip
| 0.4.4 | 1.1.0 | Average δ |
|---|---|---|
| 9 - 10 ms | 15 - 16 ms | +63% |
Dynamic Controls 2.0.4 performance: firmware 0.4.4 vs firmware 1.1.0 | API Mode
Dynamic Controls
Benchmark script and modes: BMK_DC_204_NS.zip
Test points are marked with BENCHMARK in code.
100x touchMove() executions: Ctrl 1, no ctrl layering
| 0.4.4 | 1.1.0 | |
|---|---|---|
| 16 XYs, latch, pressure | 147 - 148 ms | 227 - 238 ms |
| 16 XYs, latch, no pressure | 138 - 141 ms | 221 - 232 ms |
| 16 Faders, latch, pressure | 139 - 141 ms | 220 - 232 ms |
| 16 Buttons, latch, pressure | 123 - 128 ms | 197 - 207 ms |
| 16 Notes, latch, pressure | 123 - 128 ms | 197 - 208 ms |
100x touchMove() executions: 16 XYs, latch, pressure
| 0.4.4 | 1.1.0 | |
|---|---|---|
| Ctrl 1, no ctrl layering | 147 - 148 ms | 227 - 238 ms |
| Ctrl 16, no ctrl layering | 100 - 102 ms | 155 - 161 ms |
| Ctrl 1, ctrl layering | 147 - 148 ms | 227 - 238 ms |
| Ctrl 16, ctrl layering | 157 - 160 ms | 250 - 262 ms |
10x repaint() execution: 16 XYs, latch, pressure
| 0.4.4 | 1.1.0 |
|---|---|
| 40 - 43 ms | 58 - 64 ms |
10x handleMIDI() executions: 16 XYs, latch
| 0.4.4 | 1.1.0 | |
|---|---|---|
| Correct channel and ctrl | 6 - 7 ms | 11 - 12 ms |
| Correct channel, wrong ctrl | 6 - 7 ms | 11 - 12 ms |
| Wrong channel | 3 - 4 ms | 5 - 6 ms |
Dynamic Controls LE
Benchmark script and modes: BMK_DC-LE_204_NS.zip
Test points are marked with BENCHMARK in code.
100x touchMove() executions: Ctrl 1, no ctrl layering
| 0.4.4 | 1.1.0 | |
|---|---|---|
| 25 Faders, latch | 192 - 197 ms | 303 - 319 ms |
| 25 Button, latch | 179 - 180 ms | 283 - 301 ms |
| 25 Notes, latch | 180 - 181 ms | 284 - 301 ms |
100x touchMove() executions: 25 Faders, latch
| 0.4.4 | 1.1.0 | |
|---|---|---|
| Ctrl 1, no ctrl layering | 192 - 197 ms | 303 - 319 ms |
| Ctrl 25, no ctrl layering | 100 ms | 153 - 162 ms |
| Ctrl 1, ctrl layering | 192 - 197 ms | 303 - 319 ms |
| Ctrl 25, ctrl layering | 192 - 197 ms | 304 - 320 ms |
10x repaint() execution: 25 Faders, latch
| 0.4.4 | 1.1.0 |
|---|---|
| 64 - 67 ms | 98 - 104 ms |
10x handleMIDI() executions: 25 Faders, latch
| 0.4.4 | 1.1.0 | |
|---|---|---|
| Correct channel and ctrl | 7 - 8 ms | 12 - 13 ms |
| Correct channel, wrong ctrl | 7 - 8 ms | 12 - 13 ms |
| Wrong channel | 3 - 4 ms | 6 - 7 ms |
Benchmark comparison: July 2019 (firmware 0.4.4) vs May 2020 (firmware 1.1.0) | API Mode
Note: running the same benchmarks as in July 2019 today on firmware 0.4.4 gave the same results.
Dynamic Controls 1.2.9 Alpha
Benchmark script and modes: DC_129Alpha_Benchmark.zip
Test points are marked with BENCHMARK in code.
100x touchMove() executions: 16 XY, momentary, pressure
| 0.4.4 (July 2019) | 1.1.0 (May 2020) | Average δ | |
|---|---|---|---|
| Ctrl 1, no overlaps | 148 - 149 ms | 229 - 239 ms | +58% |
| Ctrl 16, no overlaps | 100 - 102 ms | 157 - 161 ms | +57% |
| Ctrl 1, overlaps | 148 - 149 ms | 229 - 239 ms | +58% |
| Ctrl 16, overlaps | 157 - 161 ms | 250 - 264 ms | +62% |
10x handleMIDI() executions: 16 XY, latch
| 0.4.4 (July 2019) | 1.1.0 (May 2020) | Average δ | |
|---|---|---|---|
| Correct channel and ctrl | 7 - 8 ms | 11 - 12 ms | +53% |
| Correct channel, wrong ctrl | 7 - 8 ms | 11 - 12 ms | +53% |
| Wrong channel | 4 - 5 ms | 5 - 6 ms | +22% |
Dynamic Controls 1.2.8 Alpha
Benchmark script and modes: DC_128Alpha_Benchmark.zip
Test points are marked with BENCHMARK in code.
1x repaint() execution: 16 XY, momentary, pressure, no overlaps
| 0.4.4 (July 2019) | 1.1.0 (May 2020) | Average δ |
|---|---|---|
| 4 - 5 ms | 6 - 7 ms | +44% |
100x touchMove() executions: Ctrl 1
| 0.4.4 (July 2019) | 1.1.0 (May 2020) | Average δ | |
|---|---|---|---|
| 16 XY, momentary, pressure | 147 - 148 ms | 229 - 239 ms | +59% |
| 16 XY, latch, pressure | 147 - 148 ms | 229 - 239 ms | +59% |
| 16 XY, latch, no pressure | 139 - 142 ms | 221 - 231 ms | +61% |
| 16 Faders, latch, pressure | 139 - 141 ms | 220 - 232 ms | +61% |
| 16 Button, latch, pressure | 124 - 128 ms | 197 - 208 ms | +61% |
| 16 Notes, latch, pressure | 124 - 128 ms | 198 - 209 ms | +62% |
Littlefoot MIDI functions
Benchmark script: midiPerformance.zip
| 0.4.4 (July 2019) | 1.1.0 (May 2020) | Average δ | |
|---|---|---|---|
100x sendMIDI() (CC) |
3 - 4 ms | 3 - 4 ms | - |
100x sendCC() |
3 - 4 ms | 3 - 5 ms | - |
100x sendNoteOn() |
22 ms | 3 - 4 ms | -84% |
100x sendNoteOff() |
22 ms | 5 - 6 ms | -75% |
Note:
I’ve noticed weird behaviour with Lightpad sending Note On messages via both sendMIDI() and sendNoteOn() functions.
When attempting to repeatedly send identical Note On messages (same channel, note number and velocity), Lightpad stops transmitting these messages after sending a seemingly random number of them. Sending the same message becomes possible again only after a Note Off message for the same MIDI channel and note number has been transmitted. This behaviour occurs regardless of the useMPEDuplicateFilter() state.
I can’t imagine a situation where this behaviour can cause any issues, but it seems weird nonetheless.