Subject: Re: bug#63187: 30.0.50; Tail of longer lines painted after end of nearby lines on macOS

From: Alan Third <[email-masked]>
Date: Thu, 8 Jun 2023 18:22:51 +0100

On Thu, Jun 08, 2023 at 10:57:43PM +0800, Kai Ma wrote:
> 
> 
> > On Jun 8, 2023, at 21:42, Kai Ma <[email-masked]> wrote:
> > 
> > 
> >> On Jun 8, 2023, at 20:51, Alan Third <[email-masked]> wrote:
> >> 
> >> I've got two things it could be worth trying to see if they make any
> >> difference.
> >> Change the CACHE_MAX_SIZE to something greater than 2, probably 4 is a
> >> good number. That would rule out some sort of locking problem, as it
> >> would reduce the chance a surface would be re-used before it's been
> >> sent to the screen.
> >> 
> >> The downside of this is probably going to be an increase in "lag"
> >> because it's possible to have more surfaces "in-flight".
> >> 
> >> The other option is to remove this call (nsterm.m:10636):
> >> 
> >>  /* Schedule a run of getContext so that if Emacs is idle it will
> >>     perform the buffer copy, etc.  */
> >>  [self performSelectorOnMainThread:@selector (getContext)
> >>                         withObject:nil
> >>                      waitUntilDone:NO];
> >> 
> >> I think this is harmless, but it's in there as I *assume*, with
> >> absolutely no proof, that it will improve performance and it seems
> >> possible (but I think unlikely) that it may affect the sequencing of
> >> surface operations.
> > 
> > Tested locally. I can confirm that removing
> > performSelectorOnMainThread (with CACHE_MAX_SIZE = 2) fixes the
> > problem for me. I now observe zero glitches or tearings!
> > 
> 
> Sorry, I concluded too fast. I can still see tearings, though very
> rarely. So this is still not a real fix. :-(

Try increasing CACHE_MAX_SIZE too. Tearing would, I believe, be
because a surface is being reused while it's still being copied to the
VRAM, so you'll see a partially modified output.

If increasing CACHE_MAX_SIZE fixes it then there are a couple of
possible options we can look at.
-- 
Alan Third