From: Ian Jackson Date: Tue, 16 Jun 2009 15:06:07 +0000 (+0100) Subject: WIP MIT-SHM; performance checks added; need to test on liberator now X-Git-Tag: 1.9.2~122 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.web-live.git;a=commitdiff_plain;h=0584d4dc42b7f9e75878b5281dde05f35e2f4365 WIP MIT-SHM; performance checks added; need to test on liberator now --- diff --git a/pctb/pages.c b/pctb/pages.c index cdf7c05..58cb306 100644 --- a/pctb/pages.c +++ b/pctb/pages.c @@ -228,9 +228,9 @@ static void compute_shift_mask(ShMask *sm, unsigned long ximage_mask) { assert(sm->rshift < LONG_BIT); } -static void rtimestamp(double *t) { +static void rtimestamp(double *t, const char *wh) { double n= timestamp(); - debugf("PAGING INTERVAL %f\n", n-*t); + debugf("PAGING INTERVAL %f %s\n", n-*t, wh); *t= n; } @@ -243,13 +243,20 @@ static void snapshot(Snapshot **output) { double begin= timestamp(); if (shmim) { - im_use= shmim; xassert( XShmGetImage(disp,id,shmim, 0,0, AllPlanes) ); + rtimestamp(&begin, "XShmGetImage"); + + size_t dsz= shmim->bytes_per_line * shmim->height; + im_use= im_free= mmalloc(sizeof(*im_use) + dsz); + *im_free= *shmim; + im_free->data= (void*)(im_free+1); + memcpy(im_free->data, shmim->data, dsz); + rtimestamp(&begin, "mmalloc/memcpy"); } else { xassert( im_use= im_free= XGetImage(disp,id, 0,0, wwidth,wheight, AllPlanes, ZPixmap) ); + rtimestamp(&begin, "XGetImage"); } - rtimestamp(&begin); #define COMPUTE_SHIFT_MASK(ix, rgb) \ compute_shift_mask(&shiftmasks[ix], im_use->rgb##_mask) @@ -260,7 +267,7 @@ static void snapshot(Snapshot **output) { if (!*output) *output= alloc_rgb_image(wwidth, wheight); - rtimestamp(&begin); + rtimestamp(&begin, "compute_shift_masks+alloc_rgb_image"); int x,y,i; unsigned char *op= (*output)->data; @@ -276,11 +283,11 @@ static void snapshot(Snapshot **output) { } } - rtimestamp(&begin); + rtimestamp(&begin,"w*h*XGetPixel"); if (im_free) XDestroyImage(im_free); - rtimestamp(&begin); + rtimestamp(&begin,"XDestroyImage"); check_not_disturbed(); debugf("PAGING snapshot done.\n"); @@ -396,7 +403,7 @@ static void raise_and_get_details(void) { check_client_window_all_on_screen(); int shm= XShmQueryExtension(disp); - // shm=0; + shm=0; if (shm) { xassert( shmim= XShmCreateImage(disp, attr.visual, attr.depth, ZPixmap, 0,&shminfo, wwidth,wheight) );