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;
_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)
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;
}
}
}
+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)
{
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;
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;
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;
}
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;
}
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)
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;
}
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;