1*4882a593SmuzhiyunFrom d452ad4bc7d66b15884e3e82762e1bd3046da54d Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Thu, 28 Oct 2021 12:47:09 +0800 4*4882a593SmuzhiyunSubject: [PATCH 54/93] HACK: Use negative value for dynamic repaint window 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunSupport using negative value for a vblank based dynamic repaint window: 7*4882a593SmuzhiyunWhen negative, repaint-window = vblank-duration - abs(repaint-window) 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 10*4882a593Smuzhiyun--- 11*4882a593Smuzhiyun compositor/main.c | 2 +- 12*4882a593Smuzhiyun libweston/compositor.c | 9 ++++++++- 13*4882a593Smuzhiyun 2 files changed, 9 insertions(+), 2 deletions(-) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyundiff --git a/compositor/main.c b/compositor/main.c 16*4882a593Smuzhiyunindex efd861b..e57d26a 100644 17*4882a593Smuzhiyun--- a/compositor/main.c 18*4882a593Smuzhiyun+++ b/compositor/main.c 19*4882a593Smuzhiyun@@ -1116,7 +1116,7 @@ weston_compositor_init_config(struct weston_compositor *ec, 20*4882a593Smuzhiyun s = weston_config_get_section(config, "core", NULL, NULL); 21*4882a593Smuzhiyun weston_config_section_get_int(s, "repaint-window", &repaint_msec, 22*4882a593Smuzhiyun ec->repaint_msec); 23*4882a593Smuzhiyun- if (repaint_msec < -10 || repaint_msec > 1000) { 24*4882a593Smuzhiyun+ if (repaint_msec < -1000 || repaint_msec > 1000) { 25*4882a593Smuzhiyun weston_log("Invalid repaint_window value in config: %d\n", 26*4882a593Smuzhiyun repaint_msec); 27*4882a593Smuzhiyun } else { 28*4882a593Smuzhiyundiff --git a/libweston/compositor.c b/libweston/compositor.c 29*4882a593Smuzhiyunindex 2ea1967..ff07e40 100644 30*4882a593Smuzhiyun--- a/libweston/compositor.c 31*4882a593Smuzhiyun+++ b/libweston/compositor.c 32*4882a593Smuzhiyun@@ -3665,10 +3665,17 @@ weston_output_finish_frame(struct weston_output *output, 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun output->frame_time = *stamp; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun- timespec_add_nsec(&output->next_repaint, stamp, refresh_nsec); 37*4882a593Smuzhiyun+ /* HACK: Use negative value for dynamic repaint window */ 38*4882a593Smuzhiyun+ if (compositor->repaint_msec > 0) 39*4882a593Smuzhiyun+ timespec_add_nsec(&output->next_repaint, stamp, refresh_nsec); 40*4882a593Smuzhiyun+ 41*4882a593Smuzhiyun timespec_add_msec(&output->next_repaint, &output->next_repaint, 42*4882a593Smuzhiyun -compositor->repaint_msec); 43*4882a593Smuzhiyun msec_rel = timespec_sub_to_msec(&output->next_repaint, &now); 44*4882a593Smuzhiyun+ if (msec_rel < 0) { 45*4882a593Smuzhiyun+ output->next_repaint = now; 46*4882a593Smuzhiyun+ msec_rel = 0; 47*4882a593Smuzhiyun+ } 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun if (msec_rel < -1000 || msec_rel > 1000) { 50*4882a593Smuzhiyun static bool warned; 51*4882a593Smuzhiyun-- 52*4882a593Smuzhiyun2.20.1 53*4882a593Smuzhiyun 54