chiark
/
gitweb
/
~yarrgweb
/
ypp-sc-tools.main.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
87f7f25
)
WIP MIT-SHM; performance checks added; need to test on liberator now
author
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Tue, 16 Jun 2009 15:06:07 +0000
(16:06 +0100)
committer
Ian Jackson
<Ian.Jackson@eu.citrix.com>
Tue, 16 Jun 2009 15:06:07 +0000
(16:06 +0100)
pctb/pages.c
patch
|
blob
|
history
diff --git
a/pctb/pages.c
b/pctb/pages.c
index cdf7c05b41999e82190047b36ab524c3944cfa50..58cb306b436f9c3d76937396e763e81fd50aa07f 100644
(file)
--- 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);
}
assert(sm->rshift < LONG_BIT);
}
-static void rtimestamp(double *t) {
+static void rtimestamp(double *t
, const char *wh
) {
double n= timestamp();
double n= timestamp();
- debugf("PAGING INTERVAL %f
\n", n-*t
);
+ debugf("PAGING INTERVAL %f
%s\n", n-*t, wh
);
*t= n;
}
*t= n;
}
@@
-243,13
+243,20
@@
static void snapshot(Snapshot **output) {
double begin= timestamp();
if (shmim) {
double begin= timestamp();
if (shmim) {
- im_use= shmim;
xassert( XShmGetImage(disp,id,shmim, 0,0, AllPlanes) );
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) );
} 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)
#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);
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;
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);
if (im_free)
XDestroyImage(im_free);
- rtimestamp(&begin);
+ rtimestamp(&begin
,"XDestroyImage"
);
check_not_disturbed();
debugf("PAGING snapshot done.\n");
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);
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) );
if (shm) {
xassert( shmim= XShmCreateImage(disp, attr.visual, attr.depth, ZPixmap,
0,&shminfo, wwidth,wheight) );