diff options
author | Jay Sorg <jay.sorg@gmail.com> | 2013-10-01 14:52:53 -0700 |
---|---|---|
committer | Jay Sorg <jay.sorg@gmail.com> | 2013-10-01 14:52:53 -0700 |
commit | cd93db2c98425645c9c79fece04617c4d82184c3 (patch) | |
tree | 428e6352fdfda9cbbf6528d87c2fea285893dc52 /xorg | |
parent | 538763e1442d58c999101f2b934fb3df3aa341c5 (diff) | |
download | xrdp-proprietary-cd93db2c98425645c9c79fece04617c4d82184c3.tar.gz xrdp-proprietary-cd93db2c98425645c9c79fece04617c4d82184c3.zip |
X11rdp: fix for composite on screen delay and fixes for shared memory order
Diffstat (limited to 'xorg')
-rw-r--r-- | xorg/X11R7.6/rdp/rdpComposite.c | 17 | ||||
-rw-r--r-- | xorg/X11R7.6/rdp/rdpglyph.c | 2 | ||||
-rw-r--r-- | xorg/X11R7.6/rdp/rdpmain.c | 2 | ||||
-rw-r--r-- | xorg/X11R7.6/rdp/rdpup.c | 12 |
4 files changed, 25 insertions, 8 deletions
diff --git a/xorg/X11R7.6/rdp/rdpComposite.c b/xorg/X11R7.6/rdp/rdpComposite.c index 57661520..f763783e 100644 --- a/xorg/X11R7.6/rdp/rdpComposite.c +++ b/xorg/X11R7.6/rdp/rdpComposite.c @@ -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; + } } } } diff --git a/xorg/X11R7.6/rdp/rdpglyph.c b/xorg/X11R7.6/rdp/rdpglyph.c index 954fbbe4..cb895ae5 100644 --- a/xorg/X11R7.6/rdp/rdpglyph.c +++ b/xorg/X11R7.6/rdp/rdpglyph.c @@ -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; diff --git a/xorg/X11R7.6/rdp/rdpmain.c b/xorg/X11R7.6/rdp/rdpmain.c index 20fe437d..1b924db7 100644 --- a/xorg/X11R7.6/rdp/rdpmain.c +++ b/xorg/X11R7.6/rdp/rdpmain.c @@ -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 */ diff --git a/xorg/X11R7.6/rdp/rdpup.c b/xorg/X11R7.6/rdp/rdpup.c index e9b050a8..4e9b9659 100644 --- a/xorg/X11R7.6/rdp/rdpup.c +++ b/xorg/X11R7.6/rdp/rdpup.c @@ -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(®, &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, ®); RegionUninit(®); @@ -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); |