Hi, I have also being doing some measurements. I am using an M5StickC which has an 80x160 pixel ST7735S screen.
With SPISENDMANY_BUFFER_SIZE=64
Displaying a 80x160 FillRect = 20ms
Displaying a 80x160 drawImage = 345ms.
I thought there was room for improvement for drawImage so I implemented a version of lcd_spi_unbuf with a chunk buffer that is flushed to screen when it is full or when the address window is changed. Now the results are:
With SPISENDMANY_BUFFER_SIZE=80 - the size of the chunk buffer
Displaying a 80x160 FillRect = 19ms
Displaying a 80x160 drawImage = 61ms.
Essentially the speed up is achieved by passing bigger chunks to the spi_send_many. The only disadvantage is that I have had to implement a flip() routine ro flush the chunk buffer after the last graphics operation. For images this more than 5 time speed up is really worth it. I suspect it would also work for the horizontal line example.
If the image is rotated, the performance disappears cf vertical lines, so perhaps we should see how that can be dealt with. However, rotation within an image is not a problem.
What would be the best way of letting you all look at the code?
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
Hi, I have also being doing some measurements. I am using an M5StickC which has an 80x160 pixel ST7735S screen.
With
SPISENDMANY_BUFFER_SIZE=64
Displaying a 80x160
FillRect
= 20msDisplaying a 80x160
drawImage
= 345ms.I thought there was room for improvement for drawImage so I implemented a version of
lcd_spi_unbuf
with a chunk buffer that is flushed to screen when it is full or when the address window is changed. Now the results are:With
SPISENDMANY_BUFFER_SIZE=80
- the size of the chunk bufferDisplaying a 80x160
FillRect
= 19msDisplaying a 80x160
drawImage
= 61ms.Essentially the speed up is achieved by passing bigger chunks to the
spi_send_many
. The only disadvantage is that I have had to implement aflip()
routine ro flush the chunk buffer after the last graphics operation. For images this more than 5 time speed up is really worth it. I suspect it would also work for the horizontal line example.If the image is rotated, the performance disappears cf vertical lines, so perhaps we should see how that can be dealt with. However, rotation within an image is not a problem.
What would be the best way of letting you all look at the code?