<div dir="ltr">HiĀ Juan,<div><br></div><div>I think you missed the point I was trying to make. The drawing code is very fast - it would run at 70+ fps if I was calling the draw code directly as fast as it can go.</div><div><br></div><div>The issue is the delay between sending #redrawNeeded and the system sending #drawOn:. On my desktop, that delay is around 50ms. On the rpi4, that delay is around 250-300ms. It doesn't matter how fast the draw code is if the fastest you can call the drawOn: is 3-4 times per second.</div><div><br></div><div>I don't know if there is something in my image that is messed up, but I don't think so - the image on the rpi was a virgin image that I loaded my package into (plus all the dependent packages that get loaded automatically).</div><div><br></div><div>There are no extra processes running in the background.</div><div><br></div><div>- Jon</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 3 May 2023 at 10:39, Juan Vuletich <<a href="mailto:juan@cuis.st">juan@cuis.st</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 5/2/2023 5:42 PM, Jon Hylands via Cuis-dev wrote:<br>
><br>
> Hi everyone,<br>
><br>
> I'm doing some GUI work on a Raspberry pi 4 that has a 1080p HDMI LCD <br>
> screen (in portrait mode).<br>
><br>
> I have a special morph, which displays a list of nearby airports, <br>
> sorted by distance from the user's gps location. The morph can show 9 <br>
> airports at a time, and you can smoothly scroll the list (which has a <br>
> couple hundred entries in total).<br>
><br>
> ...<br>
><br>
> On my desktop, it takes about 14ms to draw the 9 entries, and I get <br>
> about 11 frames per second scrolling. The scroll code is implemented <br>
> in a method called from #mouseMove:localPosition:, and it simply does <br>
> some math, sets the scrollPosition variable, and calls #redrawNeeded.<br>
><br>
> On the rpi4, it takes about 50ms to draw the list, and it averages 2.5 <br>
> frames per second, which is terrible.<br>
><br>
> On my desktop, it appears that there is a fairly large gap (50ms) <br>
> between the time #redrawNeeded is sent, and the corresponding call to <br>
> #drawOn: is sent. This explains the poor performance pretty much in <br>
> total. What can I do to make that happen faster?<br>
><br>
> - Jon<br>
><br>
<br>
Hi Jon,<br>
<br>
It really looks like it could be way faster, both on the Raspi and your <br>
Desktop. The first thing that comes to mind is that text rendering is <br>
much slower if there's scaling or rotation. So, the first advice is to <br>
be sure that all the morphs involved in the list, up to world, don't do <br>
rotation or scaling (their locations should only be integer <br>
translations). If needed, use a different font size.<br>
<br>
Yep. If I zoom in your screenshot, I can see that the letters 'o' in <br>
'London' have subpixels rendered differently. This is geometrically <br>
correct, but it shows that it is not caching font glyphs, but drawing <br>
the TrueType Beziers each time. Caching is only done if there's no zoom <br>
or rotation, and it really speeds up text rendering.<br>
<br>
If the above doesn't help, I'd like to be able to reproduce the <br>
behavior, so I can understand in detail. I have a Raspi 3B I can use for <br>
testing. If the issue persists, please prepare an image, or some <br>
instructions to load the code, so I can try.<br>
<br>
Thanks,<br>
<br>
-- <br>
Juan Vuletich<br>
<a href="http://cuis.st" rel="noreferrer" target="_blank">cuis.st</a><br>
<a href="http://github.com/jvuletich" rel="noreferrer" target="_blank">github.com/jvuletich</a><br>
<a href="http://researchgate.net/profile/Juan-Vuletich" rel="noreferrer" target="_blank">researchgate.net/profile/Juan-Vuletich</a><br>
<a href="http://independent.academia.edu/JuanVuletich" rel="noreferrer" target="_blank">independent.academia.edu/JuanVuletich</a><br>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" rel="noreferrer" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a><br>
<a href="http://linkedin.com/in/juan-vuletich-75611b3" rel="noreferrer" target="_blank">linkedin.com/in/juan-vuletich-75611b3</a><br>
<a href="http://twitter.com/JuanVuletich" rel="noreferrer" target="_blank">twitter.com/JuanVuletich</a><br>
<br>
</blockquote></div>