Commit cf30498f authored by Adam Jackson's avatar Adam Jackson 🎧
Browse files

ephyr: Sync even less in ephyrInternalDamageRedisplay

If we have multiple damage rects we would sync (if we would sync) after
every hostx_paint_rect. For shm images you'd rather push all the
ShmPutImage requests and wait after the last one.

      before                  after   Operation
------------   --------------------   -------------------------
 232000000.0    240000000.0 (1.034)   Dot
  41500000.0     41400000.0 (0.998)   1x1 rectangle
  11400000.0     11400000.0 (1.000)   10x10 rectangle
    553000.0       553000.0 (1.000)   100x100 rectangle
     37300.0        38500.0 (1.032)   500x500 rectangle
    831000.0      1140000.0 (1.372)   PutImage 10x10 square
     65200.0       134000.0 (2.055)   PutImage 100x100 square
      3410.0         3500.0 (1.026)   PutImage 500x500 square
    810000.0      1150000.0 (1.420)   ShmPutImage 10x10 square
    346000.0       364000.0 (1.052)   ShmPutImage 100x100 square
     22400.0        22800.0 (1.018)   ShmPutImage 500x500 square

Reviewed-by: Emma Anholt <em...
parent 7f884899
Pipeline #623561 passed with stages
in 1 minute and 26 seconds
......@@ -298,7 +298,7 @@ ephyrShadowUpdate(ScreenPtr pScreen, shadowBufPtr pBuf)
* pBuf->pDamage regions
*/
shadowUpdateRotatePacked(pScreen, pBuf);
hostx_paint_rect(screen, 0, 0, 0, 0, screen->width, screen->height);
hostx_paint_rect(screen, 0, 0, 0, 0, screen->width, screen->height, TRUE);
}
static void
......@@ -328,7 +328,8 @@ ephyrInternalDamageRedisplay(ScreenPtr pScreen)
hostx_paint_rect(screen,
pbox->x1, pbox->y1,
pbox->x1, pbox->y1,
pbox->x2 - pbox->x1, pbox->y2 - pbox->y1);
pbox->x2 - pbox->x1, pbox->y2 - pbox->y1,
nbox == 0);
pbox++;
}
}
......@@ -889,7 +890,8 @@ ephyrProcessExpose(xcb_generic_event_t *xev)
if (scrpriv) {
hostx_paint_rect(scrpriv->screen, 0, 0, 0, 0,
scrpriv->win_width,
scrpriv->win_height);
scrpriv->win_height,
TRUE);
} else {
EPHYR_LOG_ERROR("failed to get host screen\n");
}
......
......@@ -1011,7 +1011,8 @@ static void hostx_paint_debug_rect(KdScreenInfo *screen,
void
hostx_paint_rect(KdScreenInfo *screen,
int sx, int sy, int dx, int dy, int width, int height)
int sx, int sy, int dx, int dy, int width, int height,
Bool sync)
{
EphyrScrPriv *scrpriv = screen->driver;
......@@ -1100,7 +1101,8 @@ hostx_paint_rect(KdScreenInfo *screen,
HostX.gc, scrpriv->ximg,
scrpriv->shminfo,
sx, sy, dx, dy, width, height, FALSE);
xcb_aux_sync(HostX.conn);
if (sync)
xcb_aux_sync(HostX.conn);
}
else {
xcb_image_t *subimg = xcb_image_subimage(scrpriv->ximg, sx, sy,
......
......@@ -146,7 +146,8 @@ void *hostx_screen_init(KdScreenInfo *screen,
void
hostx_paint_rect(KdScreenInfo *screen,
int sx, int sy, int dx, int dy, int width, int height);
int sx, int sy, int dx, int dy, int width, int height,
Bool sync);
Bool
hostx_load_keymap(KeySymsPtr keySyms, CARD8 *modmap, XkbControlsPtr controls);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment