X11rdp: fix for composite on screen delay and fixes for shared memory order

This commit is contained in:
Jay Sorg 2013-10-01 14:52:53 -07:00
parent 538763e144
commit cd93db2c98
4 changed files with 25 additions and 8 deletions

View File

@ -39,6 +39,8 @@ extern ScreenPtr g_pScreen; /* from rdpmain.c */
extern Bool g_wrapPixmap; /* from rdpmain.c */
extern int g_can_do_pix_to_pix; /* from rdpmain.c */
extern int g_do_dirty_os; /* in rdpmain.c */
extern int g_do_dirty_ons; /* in rdpmain.c */
extern rdpPixmapRec g_screenPriv; /* in rdpmain.c */
extern int g_do_glyph_cache; /* in rdpmain.c */
extern int g_doing_font; /* in rdpmain.c */
extern int g_do_composite; /* in rdpmain.c */
@ -766,9 +768,18 @@ rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
if (pDstWnd->viewable)
{
post_process = 1;
rdpup_get_screen_image_rect(&id);
got_id = 1;
LLOGLN(10, ("rdpComposite: screen"));
if (g_do_dirty_ons)
{
LLOGLN(10, ("rdpComposite: getting dirty"));
g_screenPriv.is_dirty = 1;
pDirtyPriv = &g_screenPriv;
dirty_type = g_doing_font ? RDI_IMGLL : RDI_IMGLY;
}
else
{
rdpup_get_screen_image_rect(&id);
got_id = 1;
}
}
}
}

View File

@ -826,6 +826,8 @@ rdpGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
LLOGLN(10, ("rdpGlyphs: op %d xSrc %d ySrc %d maskFormat %p",
op, xSrc, ySrc, maskFormat));
LLOGLN(10, ("rdpGlyphs: g_do_glyph_cache %d", g_do_glyph_cache));
if (g_do_glyph_cache && rdpGlyphCheck(nlists, lists, glyphs))
{
g_doing_font = 2;

View File

@ -47,7 +47,7 @@ DeviceIntPtr g_keyboard = 0;
int g_can_do_pix_to_pix = 0;
int g_do_dirty_os = 1; /* delay remoting off screen bitmaps */
int g_do_dirty_ons = 0; /* delay remoting screen */
int g_do_dirty_ons = 1; /* delay remoting screen */
int g_do_glyph_cache = 0; /* rdpup.c may set this */
int g_do_alpha_glyphs = 1;
int g_do_composite = 0; /* rdpup.c may set this */

View File

@ -1113,8 +1113,8 @@ rdpup_process_msg(struct stream *s)
in_uint32_le(s, y);
in_uint32_le(s, cx);
in_uint32_le(s, cy);
LLOGLN(10, (" %d %d %d %d", x, y, cx ,cy));
LLOGLN(10, (" rect_id %d rect_id_ack %d", g_rect_id, g_rect_id_ack));
LLOGLN(10, ("rdpup_process_msg: %d %d %d %d", x, y, cx ,cy));
LLOGLN(10, ("rdpup_process_msg: rect_id %d rect_id_ack %d", g_rect_id, g_rect_id_ack));
box.x1 = x;
box.y1 = y;
@ -1122,7 +1122,7 @@ rdpup_process_msg(struct stream *s)
box.y2 = box.y1 + cy;
RegionInit(&reg, &box, 0);
LLOGLN(10, ("< %d %d %d %d", box.x1, box.y1, box.x2, box.y2));
LLOGLN(10, ("rdpup_process_msg: %d %d %d %d", box.x1, box.y1, box.x2, box.y2));
RegionSubtract(g_shm_reg, g_shm_reg, &reg);
RegionUninit(&reg);
@ -2088,14 +2088,17 @@ rdpup_send_area(struct image_data *id, int x, int y, int w, int h)
box.y1 = y;
box.x2 = box.x1 + w;
box.y2 = box.y1 + h;
LLOGLN(10, ("rdpup_send_area: 1 x %d y %d w %d h %d", x, y, w, h));
safety = 0;
while (RegionContainsRect(g_shm_reg, &box))
{
rdpup_end_update();
/* instread of rdpup_end_update, call rdpup_send_pending */
rdpup_send_pending();
rdpup_begin_update();
safety++;
if (safety > 100)
{
LLOGLN(0, ("rdpup_send_area: shmem timeout"));
break;
}
if (sck_can_recv(g_sck, 100))
@ -2125,6 +2128,7 @@ rdpup_send_area(struct image_data *id, int x, int y, int w, int h)
out_uint16_le(g_out_s, 60);
out_uint16_le(g_out_s, size);
g_count++;
LLOGLN(10, ("rdpup_send_area: 2 x %d y %d w %d h %d", x, y, w, h));
out_uint16_le(g_out_s, x);
out_uint16_le(g_out_s, y);
out_uint16_le(g_out_s, w);