X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=blobdiff_plain;f=pctb%2Fpages.c;h=32e429ab39df1be1220b2bedbe083a1be7ccf17d;hp=cdf7c05b41999e82190047b36ab524c3944cfa50;hb=1c6f4876b9a4f76f89a0df81ec2cc6c4ec76334e;hpb=87f7f25f01e3c0af51cce64fb7f93dd7b0d0861a diff --git a/pctb/pages.c b/pctb/pages.c index cdf7c05..32e429a 100644 --- a/pctb/pages.c +++ b/pctb/pages.c @@ -45,7 +45,7 @@ CanonImage *page_images[MAX_PAGES]; int npages; RgbImage *page0_rgbimage; -char *ocean, *pirate; +const char *ocean, *pirate; static XWindowAttributes attr; static Window id; @@ -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,12 +267,12 @@ 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; - for (y=0; y0 ); \ - }while(0) - ASSIGN(pirate, title + S(prefix), spc1); +#define ASSIGN(what, start, end) \ + what= masprintf("%.*s", (end)-(start), start); \ + if (o_##what) REQUIRE( !strcmp(o_##what, what) ); \ + else + ASSIGN(ocean, spc1 + S(onthe), (title + len) - S(suffix)); + ASSIGN(pirate, title + S(prefix), spc1); debugfind(" YES!\n"); id= w2; @@ -705,9 +714,10 @@ void find_yppclient_window(void) { if (children1) XFree(children1); } if (nfound>1) - fatal("Found several YPP clients." + fatal("Found several possible YPP clients." " Close one, or specify the windowid with --window-id.\n"); if (nfound<1) - fatal("Did not find YPP client." - " Use --window-id and/or report this as a fault.\n"); + fatal("Did not find %sYPP client." + " Use --window-id and/or report this as a fault.\n", + o_ocean || o_pirate ? "matching ": ""); }