void vncspuInitialize(void) { #if defined(HAVE_XCLIPLIST_EXT) || defined(HAVE_VNC_EXT) char *dpyStr = NULL; vnc_spu.dpy = XOpenDisplay(vnc_spu.display_string); if (!vnc_spu.dpy) vnc_spu.dpy = XOpenDisplay(":0"); CRASSERT(vnc_spu.dpy); dpyStr = DisplayString(vnc_spu.dpy); #endif /* * XClipList extension - get clip rects for an X window. */ #if defined(HAVE_XCLIPLIST_EXT) { int eventBase, errorBase; vnc_spu.haveXClipListExt = XClipListQueryExtension(vnc_spu.dpy, &eventBase, &errorBase); if (vnc_spu.haveXClipListExt) { crDebug("VNC SPU: XClipList extension present on %s", dpyStr); } else { crWarning("VNC SPU: The display %s doesn't support the XClipList extension", dpyStr); } /* Note: not checking XClipList extension version at this time */ } #else crWarning("VNC SPU: Not compiled with HAVE_XCLIPLIST_EXT=1"); #endif /* HAVE_XCLIPLIST_EXT */ /* * XClipList extension - get clip rects for an X window. */ #if defined(HAVE_VNC_EXT) { int major, minor; vnc_spu.haveVncExt = XVncQueryExtension(vnc_spu.dpy, &major, &minor); if (vnc_spu.haveVncExt) { crDebug("VNC SPU: XVnc extension present on %s", dpyStr); } else { crWarning("VNC SPU: The display %s doesn't support the VNC extension", dpyStr); } } #else crWarning("VNC SPU: Not compiled with HAVE_VNC_EXT=1"); #endif /* HAVE_VNC_EXT */ vnc_spu.timer = crTimerNewTimer(); crDebug("VNC SPU: double buffering: %d", vnc_spu.double_buffer); InitScreenBufferQueue(&vnc_spu.emptyQueue, "empty"); InitScreenBufferQueue(&vnc_spu.filledQueue, "filled"); { int i; /* create screen buffers and put them into the 'empty buffer' queue */ crDebug("VNC SPU: Creating %d screen buffers", vnc_spu.double_buffer + 1); for (i = 0; i <= vnc_spu.double_buffer; i++) { ScreenBuffer *b = AllocScreenBuffer(); EnqueueBuffer(b, &vnc_spu.emptyQueue); } } }
int main(int argc, char *argv[]) { const int port = 10000; CRConnection *conn[MAX_SERVERS]; const char *servers[MAX_SERVERS]; int numServers = 0; int bufferSize = 10000; int numBuffers = 10; int autoMode = 0; int size; int i, j; if (argc < 2) { PrintHelp(); return 0; } for (i = 1; i < argc; i++) { if (!crStrcmp(argv[i], "-a")) { autoMode = 1; } else if (!crStrcmp(argv[i], "-b") && (i + 1 < argc)) { bufferSize = crStrToInt(argv[i + 1]); i++; } else if (!crStrcmp(argv[i], "-h")) { PrintHelp(); return 0; } else if (!crStrcmp(argv[i], "-m") && (i + 1 < argc)) { MTU = crStrToInt(argv[i + 1]); i++; } else if (!crStrcmp(argv[i], "-n") && (i + 1 < argc)) { numBuffers = crStrToInt(argv[i + 1]); i++; } else if ((argv[i][0] != '-') && (numServers < MAX_SERVERS)) { servers[numServers] = argv[i]; numServers++; } } if (numServers == 0) { printf("npclient error: need to specify at least one server\n"); return 1; } if (autoMode) printf("npclient: MTU=%d (automatic buffer sizing)\n", MTU); else printf("npclient: MTU=%d bufferSize=%d numBuffers=%d\n", MTU, bufferSize, numBuffers); MyTimer = crTimerNewTimer(); crNetInit( ReceiveFunc, CloseFunc ); printf("npclient: Connecting to servers\n"); for (i = 0; i < numServers; i++) { conn[i] = crNetConnectToServer(servers[i], (unsigned short) port, MTU, 0); if (conn[i]) { printf("npclient: Connection to %s OK.\n", servers[i]); } else { printf("npclient: Connection to %s failed!\n", servers[i]); exit(1); } } printf("npclient: Testing...\n"); if (autoMode) { bufferSize = 10000; for (size = 0; size < 5; size++) { double t0, t1, dt, rate; double bytes; int buffers; bytes = 0.0; buffers = 0; crStartTimer(MyTimer); t0 = crTimerTime(MyTimer); do { for (j = 0; j < numServers; j++) { SendOpcodes(conn[j], bufferSize, 0); } bytes += (double) bufferSize; buffers++; t1 = crTimerTime(MyTimer); } while (t1 - t0 < 5.0); crStopTimer(MyTimer); dt = t1 - t0; rate = (double) bytes / dt / 1000000.0; printf("npclient: %8.3f MB/s (%d bytes / buffer, %d buffers, %d servers)\n", rate, bufferSize, buffers, numServers); if (rate < 0.0) { char *t = 0; *t = 0; CRASSERT(rate >= 0.0); } bufferSize *= 10; } } else { double t0, t1, dt, rate; double bytes; crStartTimer(MyTimer); t0 = crTimerTime(MyTimer); bytes = 0.0; for (i = 0; i < numBuffers; i++) { for (j = 0; j < numServers; j++) { SendOpcodes(conn[j], bufferSize, 0); } bytes += (double) bufferSize; } t1 = crTimerTime(MyTimer); dt = t1 - t0; rate = (double) bytes / dt / 1000000.0; printf("npclient: %8.3f MB/s (%d bytes / buffer, %d buffers, %d servers)\n", rate, bufferSize, numBuffers, numServers); } /* Send exit message to servers */ for (j = 0; j < numServers; j++) { SendOpcodes(conn[j], 100, 1); } for (j = 0; j < numServers; j++) { crNetDisconnect(conn[j]); } printf("npclient: done!\n"); return 0; }