Re-request render frames if we dont hear back in a quarter of a second

Fixes #1748 (I hope)
This commit is contained in:
Kovid Goyal
2019-06-28 18:26:11 +05:30
parent 86305fdeb3
commit 3fb00f6c70
3 changed files with 9 additions and 1 deletions

View File

@@ -675,6 +675,11 @@ draw_resizing_text(OSWindow *w) {
}
}
static inline bool
no_render_frame_received_recently(OSWindow *w, double now) {
return now - w->last_render_frame_received_at > 0.25;
}
static inline void
render(double now) {
double time_since_last_render = now - last_render_at;
@@ -691,7 +696,7 @@ render(double now) {
continue;
}
if (USE_RENDER_FRAMES && w->render_state != RENDER_FRAME_READY) {
if (w->render_state == RENDER_FRAME_NOT_REQUESTED) request_frame_render(w);
if (w->render_state == RENDER_FRAME_NOT_REQUESTED || no_render_frame_received_recently(w, now)) request_frame_render(w);
continue;
}
make_os_window_context_current(w);

View File

@@ -1052,6 +1052,7 @@ cocoa_frame_request_callback(GLFWwindow *window) {
for (size_t i = 0; i < global_state.num_os_windows; i++) {
if (global_state.os_windows[i].handle == window) {
global_state.os_windows[i].render_state = RENDER_FRAME_READY;
global_state.os_windows[i].last_render_frame_received_at = monotonic();
request_tick_callback();
break;
}
@@ -1071,6 +1072,7 @@ wayland_frame_request_callback(id_type os_window_id) {
for (size_t i = 0; i < global_state.num_os_windows; i++) {
if (global_state.os_windows[i].id == os_window_id) {
global_state.os_windows[i].render_state = RENDER_FRAME_READY;
global_state.os_windows[i].last_render_frame_received_at = monotonic();
request_tick_callback();
break;
}

View File

@@ -148,6 +148,7 @@ typedef struct {
id_type temp_font_group_id;
double pending_scroll_pixels;
enum RENDER_STATE render_state;
double last_render_frame_received_at;
id_type last_focused_counter;
ssize_t gvao_idx;
} OSWindow;