rfx fixes for large tile sets, performance change, Xorg will start next frame earlier
This commit is contained in:
+4
-4
@@ -320,21 +320,21 @@ process_enc_rfx(struct xrdp_encoder *self, XRDP_ENC_DATA *enc)
|
||||
mutex = self->mutex;
|
||||
event_processed = self->xrdp_encoder_event_processed;
|
||||
|
||||
if ((enc->num_crects > 512) || (enc->num_drects > 512))
|
||||
if ((enc->num_crects > 4096) || (enc->num_drects > 4096))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
out_data_bytes = 16 * 1024 * 1024;
|
||||
index = 256 + sizeof(struct rfx_tile) * 512 +
|
||||
sizeof(struct rfx_rect) * 512;
|
||||
index = 256 + sizeof(struct rfx_tile) * 4096 +
|
||||
sizeof(struct rfx_rect) * 4096;
|
||||
out_data = (char *) g_malloc(out_data_bytes + index, 0);
|
||||
if (out_data == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
tiles = (struct rfx_tile *) (out_data + out_data_bytes + 256);
|
||||
rfxrects = (struct rfx_rect *) (tiles + 512);
|
||||
rfxrects = (struct rfx_rect *) (tiles + 4096);
|
||||
|
||||
count = enc->num_crects;
|
||||
for (index = 0; index < count; index++)
|
||||
|
||||
@@ -2175,6 +2175,7 @@ xrdp_mm_check_wait_objs(struct xrdp_mm *self)
|
||||
int cx;
|
||||
int cy;
|
||||
int use_frame_acks;
|
||||
int ex;
|
||||
|
||||
if (self == 0)
|
||||
{
|
||||
@@ -2279,6 +2280,19 @@ xrdp_mm_check_wait_objs(struct xrdp_mm *self)
|
||||
enc_done->enc->flags,
|
||||
enc_done->enc->frame_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
ex = self->wm->client_info->max_unacknowledged_frame_count;
|
||||
if (self->encoder->frame_id_client + ex >= self->encoder->frame_id_server)
|
||||
{
|
||||
if (self->encoder->frame_id_server > self->encoder->frame_id_server_sent)
|
||||
{
|
||||
LLOGLN(10, ("xrdp_mm_check_wait_objs: 1 -- %d", self->encoder->frame_id_server));
|
||||
self->encoder->frame_id_server_sent = self->encoder->frame_id_server;
|
||||
self->mod->mod_frame_ack(self->mod, 0, self->encoder->frame_id_server);
|
||||
}
|
||||
}
|
||||
}
|
||||
g_free(enc_done->enc->drects);
|
||||
g_free(enc_done->enc->crects);
|
||||
g_free(enc_done->enc);
|
||||
|
||||
Reference in New Issue
Block a user