double begin= timestamp();
if (shmim) {
+ rtimestamp(&begin, "XShmGetImage before");
xassert( XShmGetImage(disp,id,shmim, 0,0, AllPlanes) );
rtimestamp(&begin, "XShmGetImage");
memcpy(im_free->data, shmim->data, dsz);
rtimestamp(&begin, "mmalloc/memcpy");
} else {
+ rtimestamp(&begin, "XGetImage before");
xassert( im_use= im_free=
XGetImage(disp,id, 0,0, wwidth,wheight, AllPlanes, ZPixmap) );
rtimestamp(&begin, "XGetImage");
va_start(al,fmt);
Snapshot *last=0;
+ int nidentical=0;
/* waits longer if we're going to return an image identical to previously
* if previously==0, all images are considered identical to it */
last_input, previously, doing);
for (;;) {
- double at_snapshot= timestamp();
- double need_sleep= min_update_allowance - (at_snapshot - last_input);
- if (need_sleep > 0) { delay(need_sleep); continue; }
-
+ usleep(250000);
snapshot(output);
- if (!with_keypress &&
- !(previously && identical(*output,previously))) {
- debugf("PAGING wait_for_stability simple\n");
- break;
- }
-
- if (last && identical(*output,last)) {
- debugf("PAGING wait_for_stability stabilised\n");
- break;
+ if (!last) {
+ debugf("PAGING wait_for_stability first...\n");
+ last=*output; *output=0;
+ } else if (!identical(*output,last)) {
+ debugf("PAGING wait_for_stability changed...\n");
+ free(last); last=*output; *output=0;
+ nidentical=0;
+ } else {
+ nidentical++;
+ int threshold=
+ !previously ? 3 :
+ identical(*output,previously) ? 3
+ : 1;
+ debugf("PAGING wait_for_stability nidentical=%d threshold=%d\n",
+ nidentical, threshold);
+ if (nidentical >= threshold)
+ break;
}
-
progress_spinner("%s",doing);
- debugf("PAGING wait_for_stability retry\n");
-
- free_snapshot(&last); last=*output; *output=0;
-
if (with_keypress)
with_keypress();
- delay(0.5);
+ usleep(250000);
}
free_snapshot(&last);
check_client_window_all_on_screen();
- int shm= XShmQueryExtension(disp);
- debugf("PAGING shm=%d\n",shm);
+ Bool shmpixmaps=0;
+ int major=0,minor=0;
+ int shm= XShmQueryVersion(disp, &major,&minor,&shmpixmaps);
+ debugf("PAGING shm=%d %d.%d pixmaps=%d\n",shm,major,minor,shmpixmaps);
if (shm) {
xassert( shmim= XShmCreateImage(disp, attr.visual, attr.depth, ZPixmap,
0,&shminfo, wwidth,wheight) );