Merge branch 'master' into scroll-damage-performance

This commit is contained in:
Daniel Eklöf 2020-03-24 17:44:05 +01:00
commit 3a04061847
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 23 additions and 31 deletions

View file

@ -1606,30 +1606,25 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da
wl_callback_destroy(wl_callback); wl_callback_destroy(wl_callback);
term->window->frame_callback = NULL; term->window->frame_callback = NULL;
if (term->render.pending.csd) { bool grid = term->render.pending.grid;
term->render.pending.csd = false; bool csd = term->render.pending.csd;
bool search = term->render.pending.search;
if (term->window->use_csd == CSD_YES) { term->render.pending.grid = false;
quirk_weston_csd_on(term); term->render.pending.csd = false;
render_csd(term); term->render.pending.search = false;
quirk_weston_csd_off(term);
} if (csd && term->window->use_csd == CSD_YES) {
quirk_weston_csd_on(term);
render_csd(term);
quirk_weston_csd_off(term);
} }
if (term->render.pending.search) { if (search && term->is_searching)
term->render.pending.search = false; render_search_box(term);
if (term->is_searching) if (grid && (!term->delayed_render_timer.is_armed || csd || search))
render_search_box(term); grid_render(term);
}
if (term->render.pending.grid) {
term->render.pending.grid = false;
/* TODO: need to check if this breaks GNOME/weston */
if (!term->delayed_render_timer.is_armed)
grid_render(term);
}
} }
/* Move to terminal.c? */ /* Move to terminal.c? */
@ -1974,9 +1969,9 @@ fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data)
grid_render(term); grid_render(term);
} else { } else {
/* Tells the frame callback to render again */ /* Tells the frame callback to render again */
term->render.pending.grid = grid; term->render.pending.grid |= grid;
term->render.pending.csd = csd; term->render.pending.csd |= csd;
term->render.pending.search = search; term->render.pending.search |= search;
} }
} }

View file

@ -409,9 +409,6 @@ fdm_delayed_render(struct fdm *fdm, int fd, int events, void *data)
if (errno == EAGAIN) if (errno == EAGAIN)
return true; return true;
if (!term->delayed_render_timer.is_armed)
return true;
LOG_ERRNO("failed to read timeout timer"); LOG_ERRNO("failed to read timeout timer");
return false; return false;
} }
@ -421,6 +418,9 @@ fdm_delayed_render(struct fdm *fdm, int fd, int events, void *data)
else if (ret2 > 0) else if (ret2 > 0)
LOG_DBG("upper delay timer expired"); LOG_DBG("upper delay timer expired");
if (ret1 == 0 && ret2 == 0)
return true;
#if PTMX_TIMING #if PTMX_TIMING
last = (struct timespec){0}; last = (struct timespec){0};
#endif #endif
@ -429,12 +429,9 @@ fdm_delayed_render(struct fdm *fdm, int fd, int events, void *data)
struct itimerspec reset = {{0}}; struct itimerspec reset = {{0}};
timerfd_settime(term->delayed_render_timer.lower_fd, 0, &reset, NULL); timerfd_settime(term->delayed_render_timer.lower_fd, 0, &reset, NULL);
timerfd_settime(term->delayed_render_timer.upper_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) { render_refresh(term);
term->delayed_render_timer.is_armed = false;
render_refresh(term);
}
return true; return true;
} }