term: ptmx: don't enqueue extra frame render when app sync updates have been changed

Track whether app-sync updates were enabled or disabled while handling
the current chunk of PTMX data.

This fixes and issue where we called render_refresh() unnecessarily
under (at least) the following conditions:

* Application sent "BSU <data> ESU" in the *same* chunk. In this case
  we never saw that app sync was enabled and triggered delayed
  rendering as usual.

* Application sent ESU. While we had noticed app sync updates being
  enabled in earlier PTMX reads, when it was disabled *in the current*
  PTMX read, we treated it as if it had not been enabled at all.

  This caused us to trigger delayed rendering.

  Now we call render_refresh() directly from ESU, and detect the "flip
  off" case in PTMX read and avoid triggering a delayed rendering.

The end result of all this is that each key press (for e.g. scrolling
in a pager application) went from two frames being rendered, to a
single frame.
This commit is contained in:
Daniel Eklöf 2020-03-16 17:05:44 +01:00
parent 1006608093
commit 233a909160
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 13 additions and 2 deletions

View file

@ -350,6 +350,7 @@ struct terminal {
struct {
bool enabled;
int timer_fd;
bool flipped;
} app_sync_updates;
/* Render threads + synchronization primitives */