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

ulab-next
Jay Sorg 11 years ago
parent 538763e144
commit cd93db2c98

@ -39,6 +39,8 @@ extern ScreenPtr g_pScreen; /* from rdpmain.c */
extern Bool g_wrapPixmap; /* from rdpmain.c */ extern Bool g_wrapPixmap; /* from rdpmain.c */
extern int g_can_do_pix_to_pix; /* 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_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_do_glyph_cache; /* in rdpmain.c */
extern int g_doing_font; /* in rdpmain.c */ extern int g_doing_font; /* in rdpmain.c */
extern int g_do_composite; /* 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) if (pDstWnd->viewable)
{ {
post_process = 1; post_process = 1;
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); rdpup_get_screen_image_rect(&id);
got_id = 1; got_id = 1;
LLOGLN(10, ("rdpComposite: screen")); }
} }
} }
} }

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

@ -47,7 +47,7 @@ DeviceIntPtr g_keyboard = 0;
int g_can_do_pix_to_pix = 0; int g_can_do_pix_to_pix = 0;
int g_do_dirty_os = 1; /* delay remoting off screen bitmaps */ 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_glyph_cache = 0; /* rdpup.c may set this */
int g_do_alpha_glyphs = 1; int g_do_alpha_glyphs = 1;
int g_do_composite = 0; /* rdpup.c may set this */ int g_do_composite = 0; /* rdpup.c may set this */

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

Loading…
Cancel
Save