> On Jun 9, 2023, at 01:22, Alan Third wrote: > > On Thu, Jun 08, 2023 at 10:57:43PM +0800, Kai Ma wrote: >> >> >>> On Jun 8, 2023, at 21:42, Kai Ma wrote: >>> >>> >>>> On Jun 8, 2023, at 20:51, Alan Third 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. Increasing CACHE_MAX_SIZE alone doesn’t seem to help much. (Screencast: https://www.youtube.com/watch?v=9YD9jyP-GKw) Increasing CACHE_MAX_SIZE + Removing performSelectorOnMainThread seems to be better but I can’t be sure. Just observed: (1) M-< at the mid of a buffer, but only the first line of the view is refreshed, and other parts were still there. (2) selecting a region doesn’t always clear the hl-line effect.