diff options
-rw-r--r-- | test/encodingstest.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/test/encodingstest.c b/test/encodingstest.c index c2f8135..bef30a8 100644 --- a/test/encodingstest.c +++ b/test/encodingstest.c @@ -78,8 +78,6 @@ static void updateStatistics(int encodingIndex,rfbBool failed) { UNLOCK(statisticsMutex); } - - /* Here begin the functions for the client. They will be called in a * pthread. */ @@ -99,7 +97,7 @@ static rfbBool doFramebuffersMatch(rfbScreenInfo* server,rfbClient* client, for(k=0;k<3/*server->serverFormat.bitsPerPixel/8*/;k++) { unsigned char s=server->frameBuffer[k+i*4+j*server->paddedWidthInBytes]; unsigned char cl=client->frameBuffer[k+i*4+j*client->width*4]; - + if(maxDelta==0 && s!=cl) { UNLOCK(frameBufferMutex); return FALSE; @@ -133,7 +131,7 @@ typedef struct clientData { static void update(rfbClient* client,int x,int y,int w,int h) { clientData* cd=(clientData*)client->clientData; int maxDelta=0; - + #ifndef VERY_VERBOSE static const char* progress="|/-\\"; static int counter=0; @@ -159,7 +157,7 @@ static void update(rfbClient* client,int x,int y,int w,int h) { if(testEncodings[cd->encodingIndex].id==rfbEncodingTight) maxDelta=5; #endif - + updateStatistics(cd->encodingIndex, !doFramebuffersMatch(cd->server,client,maxDelta)); } @@ -169,7 +167,7 @@ static void* clientLoop(void* data) { clientData* cd=(clientData*)client->clientData; client->appData.encodingsString=strdup(testEncodings[cd->encodingIndex].str); - + sleep(1); rfbClientLog("Starting client (encoding %s, display %s)\n", testEncodings[cd->encodingIndex].str, @@ -193,11 +191,13 @@ static void* clientLoop(void* data) { return NULL; } +static pthread_t all_threads[NUMBER_OF_ENCODINGS_TO_TEST]; +static int thread_counter; + static void startClient(int encodingIndex,rfbScreenInfo* server) { rfbClient* client=rfbGetClient(8,3,4); clientData* cd; - pthread_t clientThread; - + client->clientData=malloc(sizeof(clientData)); client->MallocFrameBuffer=resize; client->GotFrameBufferUpdate=update; @@ -212,7 +212,7 @@ static void startClient(int encodingIndex,rfbScreenInfo* server) { lastUpdateRect.x2=server->width; lastUpdateRect.y2=server->height; - pthread_create(&clientThread,NULL,clientLoop,(void*)client); + pthread_create(&all_threads[thread_counter++],NULL,clientLoop,(void*)client); } /* Here begin the server functions */ @@ -288,7 +288,7 @@ rfbTestLog(const char *format, ...) /* the main function */ int main(int argc,char** argv) -{ +{ int i,j; time_t t; rfbScreenInfoPtr server; @@ -336,8 +336,10 @@ int main(int argc,char** argv) } #endif - free(server->frameBuffer); rfbScreenCleanup(server); + for(i=0;i<thread_counter;i++) + pthread_join(all_threads[i], NULL); + free(server->frameBuffer); rfbLog("Statistics:\n"); for(i=0;i<NUMBER_OF_ENCODINGS_TO_TEST;i++) |