From: Junkyeong, Kim Date: Fri, 22 Apr 2022 05:14:43 +0000 (+0900) Subject: Improve cursor performance X-Git-Tag: submit/tizen/20220427.130003~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5ca2773784fa87d63c259b3978a987594274f17d;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-rdp.git Improve cursor performance change timer interval according to the condition. - only cursor moving -> VGA_TIME setting - else (buffer changed) -> resolution related time setting Change-Id: I48bf9683af647c3f650ef27b67595372d08e9623 Signed-off-by: Junkyeong, Kim --- diff --git a/src/e_mod_rdp.c b/src/e_mod_rdp.c index 0663efb..ee194c5 100644 --- a/src/e_mod_rdp.c +++ b/src/e_mod_rdp.c @@ -94,13 +94,13 @@ struct _E_Rdp_Output uint32_t prev_x; uint32_t prev_y; - Eina_Bool frame_changed; Eina_Bool cursor_changed; double refresh_time; int refresh_count; Eina_Bool mouse_moved; Eina_Bool buffer_changed; + int buffer_changed_count; Eina_Bool buffer_reuse; Eina_Rectangle cursor_crop_dst; @@ -975,7 +975,7 @@ _e_rdp_pixman_output_image_get_all(E_Rdp_Output *output, Eina_List *visible_list _e_rdp_pixman_output_image_composite(output, hwc_window, pix_surface, info.width, info.height, e_output_w, e_output_h); } - if (output->refresh_count == 0) + if ((output->refresh_count == 0) || (output->buffer_changed_count == 0)) _e_rdp_backup_buffer_create(output, tbm_surface, &info); if (hwc_window_cursor != NULL) @@ -1321,6 +1321,11 @@ _e_rdp_frame_timer(void *data) INF("pixman refresh time: %.1f ms", (end_refresh - end_capture) * 1000); #endif + if (output->buffer_changed_count < 0) + output->buffer_changed = EINA_FALSE; + else + output->buffer_changed_count--; + return ECORE_CALLBACK_RENEW; } @@ -1336,6 +1341,21 @@ _e_rdp_free_keyfile(E_Rdp_Backend *b, rdpSettings *settings) } } +static void +_e_rdp_set_refresh_timer(E_Rdp_Output *output, double refresh_time) +{ + if (!output->frame_timer) + { + output->frame_timer = ecore_timer_add(refresh_time, _e_rdp_frame_timer, output); + } + else + { + if (ecore_timer_interval_get(output->frame_timer) != refresh_time) + ecore_timer_interval_set(output->frame_timer, refresh_time); + } + output->refresh_count = 5; +} + static Eina_Bool _e_rdp_cb_client_buffer_change(void *data, int type, void *event) { @@ -1385,13 +1405,8 @@ _e_rdp_cb_client_buffer_change(void *data, int type, void *event) if (find == EINA_FALSE) return ECORE_CALLBACK_PASS_ON; - if (!output->frame_timer) - { - output->refresh_count = 5; - output->frame_timer = ecore_timer_add(output->refresh_time, _e_rdp_frame_timer, output); - } - else - output->refresh_count = 5; + _e_rdp_set_refresh_timer(output, output->refresh_time); + output->buffer_changed_count = 4; output->buffer_changed = EINA_TRUE; return ECORE_CALLBACK_PASS_ON; @@ -1445,9 +1460,8 @@ _e_rdp_cb_client_uniconify(void *data, int type, void *event) if (find == EINA_FALSE) return ECORE_CALLBACK_PASS_ON; - if (!output->frame_timer) - output->frame_timer = ecore_timer_add(output->refresh_time, _e_rdp_frame_timer, output); - output->refresh_count = 5; + _e_rdp_set_refresh_timer(output, output->refresh_time); + output->buffer_changed_count = 4; output->buffer_changed = EINA_TRUE; return ECORE_CALLBACK_PASS_ON; @@ -1470,13 +1484,10 @@ _e_rdp_cb_pointer_mouse_move(void *data, E_Pointer *ptr) if (b->client_count == 0) return; - if (!output->frame_timer) - { - output->refresh_count = 5; - output->frame_timer = ecore_timer_add(output->refresh_time, _e_rdp_frame_timer, output); - } + if (output->buffer_changed) + _e_rdp_set_refresh_timer(output, output->refresh_time); else - output->refresh_count = 5; + _e_rdp_set_refresh_timer(output, VGA_TIME); output->mouse_moved = EINA_TRUE; } @@ -1494,9 +1505,8 @@ _e_rdp_canvas_render_post(void *data EINA_UNUSED, Evas *e EINA_UNUSED, void *eve if (b->client_count == 0) return; - if (!output->frame_timer) - output->frame_timer = ecore_timer_add(output->refresh_time, _e_rdp_frame_timer, output); - output->refresh_count = 5; + _e_rdp_set_refresh_timer(output, output->refresh_time); + output->buffer_changed_count = 4; output->buffer_changed = EINA_TRUE; } @@ -1577,7 +1587,7 @@ e_rdp_peer_activate(freerdp_peer *client) if (output->w != settings->DesktopWidth || output->h != settings->DesktopHeight) { - if (b->no_clients_resize) + if (b->no_clients_resize || b->client_count > 0) { /* RDP peers don't dictate their resolution to e */ if (!settings->DesktopResize) @@ -1655,13 +1665,15 @@ e_rdp_peer_activate(freerdp_peer *client) output->refresh_time = _e_rdp_refresh_time_set(output->w, output->h); output->refresh_count = 5; output->frame_timer = ecore_timer_add(output->refresh_time, _e_rdp_frame_timer, output); + output->buffer_changed_count = 4; output->buffer_changed = EINA_TRUE; e_video_debug_display_primary_plane_set(EINA_TRUE); } else { - output->refresh_count = 5; + _e_rdp_set_refresh_timer(output, output->refresh_time); + output->buffer_changed_count = 4; output->buffer_changed = EINA_TRUE; } @@ -1700,13 +1712,8 @@ e_rdp_input_synchronize_event(rdpInput *input, UINT32 flags) if (b->client_count == 0) return TRUE; - if (!output->frame_timer) - { - output->refresh_count = 5; - output->frame_timer = ecore_timer_add(output->refresh_time, _e_rdp_frame_timer, output); - } - else - output->refresh_count = 5; + _e_rdp_set_refresh_timer(output, output->refresh_time); + output->buffer_changed_count = 4; output->buffer_changed = EINA_TRUE; return TRUE;