Merge branch 'master' into scroll-damage-performance

This commit is contained in:
Daniel Eklöf 2020-03-23 19:30:20 +01:00
commit 6bc9fd4ba1
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 18 additions and 13 deletions

View file

@ -1606,7 +1606,10 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da
if (term->render.pending.grid) {
term->render.pending.grid = false;
grid_render(term);
/* TODO: need to check if this breaks GNOME/weston */
if (!term->delayed_render_timer.is_armed)
grid_render(term);
}
}

View file

@ -32,6 +32,8 @@
#define min(x, y) ((x) < (y) ? (x) : (y))
#define max(x, y) ((x) > (y) ? (x) : (y))
#define PTMX_TIMING 0
static const char *const XCURSOR_LEFT_PTR = "left_ptr";
static const char *const XCURSOR_TEXT = "text";
static const char *const XCURSOR_HAND2 = "hand2";
@ -125,8 +127,6 @@ fdm_ptmx_out(struct fdm *fdm, int fd, int events, void *data)
return true;
}
#define PTMX_TIMING 0
#if PTMX_TIMING
static struct timespec last = {0};
#endif
@ -197,9 +197,10 @@ fdm_ptmx(struct fdm *fdm, int fd, int events, void *data)
* compositor anyway. The delay we introduce here only
* has any effect when the renderer is idle.
*/
if (term->window->frame_callback == NULL) {
/* First timeout - reset each time we receive input. */
uint64_t lower_ns = term->conf->tweak.delayed_render_lower_ns;
uint64_t upper_ns = term->conf->tweak.delayed_render_upper_ns;
if (lower_ns > 0 && upper_ns > 0) {
#if PTMX_TIMING
struct timespec now;
@ -215,8 +216,6 @@ fdm_ptmx(struct fdm *fdm, int fd, int events, void *data)
last = now;
#endif
uint64_t lower_ns = term->conf->tweak.delayed_render_lower_ns;
uint64_t upper_ns = term->conf->tweak.delayed_render_upper_ns;
assert(lower_ns < 1000000000);
assert(upper_ns < 1000000000);
assert(upper_ns > lower_ns);
@ -236,7 +235,7 @@ fdm_ptmx(struct fdm *fdm, int fd, int events, void *data)
term->delayed_render_timer.is_armed = true;
}
} else
term->render.pending.grid = true;
render_refresh(term);
}
if (hup) {
@ -396,8 +395,6 @@ fdm_delayed_render(struct fdm *fdm, int fd, int events, void *data)
return false;
struct terminal *term = data;
if (!term->delayed_render_timer.is_armed)
return true;
uint64_t unused;
ssize_t ret1 = 0;
@ -412,6 +409,9 @@ fdm_delayed_render(struct fdm *fdm, int fd, int events, void *data)
if (errno == EAGAIN)
return true;
if (!term->delayed_render_timer.is_armed)
return true;
LOG_ERRNO("failed to read timeout timer");
return false;
}
@ -425,13 +425,15 @@ fdm_delayed_render(struct fdm *fdm, int fd, int events, void *data)
last = (struct timespec){0};
#endif
render_refresh(term);
/* Reset timers */
struct itimerspec reset = {{0}};
timerfd_settime(term->delayed_render_timer.lower_fd, 0, &reset, NULL);
timerfd_settime(term->delayed_render_timer.upper_fd, 0, &reset, NULL);
term->delayed_render_timer.is_armed = false;
if (term->delayed_render_timer.is_armed) {
term->delayed_render_timer.is_armed = false;
render_refresh(term);
}
return true;
}