--- ray/src/hd/rhdisp.c 1998/01/04 18:37:10 3.20 +++ ray/src/hd/rhdisp.c 1998/01/08 21:19:05 3.23 @@ -1,4 +1,4 @@ -/* Copyright (c) 1997 Silicon Graphics, Inc. */ +/* Copyright (c) 1998 Silicon Graphics, Inc. */ #ifndef lint static char SCCSid[] = "$SunId$ SGI"; @@ -30,6 +30,14 @@ char *progname; /* global argv[0] */ FILE *sstdin, *sstdout; /* server's standard input and output */ +#ifdef DEBUG +#include +extern time_t time(); +static time_t tmodesw; +static time_t timm, tadd; +static long nimmrays, naddrays; +#endif + #define RDY_SRV 01 #define RDY_DEV 02 #define RDY_SIN 04 @@ -55,6 +63,9 @@ char *argv[]; sstdin = fdopen(inp, "r"); /* set command error vector */ erract[COMMAND].pf = eputs; +#ifdef DEBUG + tmodesw = time(NULL); +#endif /* enter main loop */ do { rdy = disp_wait(); @@ -110,6 +121,16 @@ char *argv[]; break; } } while (res != DS_SHUTDOWN); +#ifdef DEBUG + if (timm && nimmrays) + fprintf(stderr, + "%s: %.1f rays recalled/second (%ld rays total)\n", + progname, (double)nimmrays/timm, nimmrays); + if (tadd && naddrays) + fprintf(stderr, + "%s: %.1f rays calculated/second (%ld rays total)\n", + progname, (double)naddrays/tadd, naddrays); +#endif /* all done */ quit(0); } @@ -138,6 +159,7 @@ disp_wait() /* wait for more input */ n = odev.ifd+1; if (sstdin != NULL) { FD_SET(fileno(sstdin), &readset); + FD_SET(fileno(sstdin), &errset); if (fileno(sstdin) >= n) n = fileno(sstdin) + 1; } @@ -152,7 +174,8 @@ disp_wait() /* wait for more input */ flgs |= RDY_SRV; if (FD_ISSET(odev.ifd, &readset) || FD_ISSET(odev.ifd, &errset)) flgs |= RDY_DEV; - if (sstdin != NULL && FD_ISSET(fileno(sstdin), &readset)) + if (sstdin != NULL && (FD_ISSET(fileno(sstdin), &readset) || + FD_ISSET(fileno(sstdin), &errset))) flgs |= RDY_SIN; return(flgs); } @@ -212,6 +235,10 @@ register PACKHEAD *p; VSUM(wp, ro, rd, d); /* might be behind viewpoint */ dev_value(packra(p)[i].v, wp, rd); } +#ifdef DEBUG + if (imm_mode) nimmrays += p->nr; + else naddrays += p->nr; +#endif } @@ -256,12 +283,15 @@ int usr_input() /* get user input and process it */ { VIEW vparams; - char cmd[128]; + char cmd[256]; register char *args; register int i; - if (fgets(cmd, sizeof(cmd), sstdin) == NULL) - return(DC_QUIT); + if (fgets(cmd, sizeof(cmd), sstdin) == NULL) { + fclose(sstdin); + sstdin = NULL; + return(0); + } for (args = cmd; *args && !isspace(*args); args++) ; while (isspace(*args)) @@ -298,6 +328,7 @@ usr_input() /* get user input and process it */ break; case DC_REDRAW: /* redraw from server */ imm_mode = beam_sync() > 0; + dev_clear(); break; case DC_KILL: /* kill rtrace process(es) */ serv_request(DR_KILL, 0, NULL); @@ -366,6 +397,14 @@ serv_result() /* get next server result and process break; case DS_STARTIMM: case DS_ENDIMM: +#ifdef DEBUG + if (imm_mode != (msg.type==DS_STARTIMM)) { + time_t tnow = time(NULL); + if (imm_mode) timm += tnow - tmodesw; + else tadd += tnow - tmodesw; + tmodesw = tnow; + } +#endif imm_mode = msg.type==DS_STARTIMM; /* fall through */ case DS_ACKNOW: