diff --git a/icbench.c b/icbench.c index 2c4f9f0..dc8d281 100644 --- a/icbench.c +++ b/icbench.c @@ -28,8 +28,7 @@ #include #include #include -#include -#include +//#include #include #include #include @@ -39,11 +38,14 @@ #include #endif #ifdef _MSC_VER +#define PRId64 "I64d" #include "vs/getopt.h" #else +#include #include #include #endif + #if !defined(_WIN32) #include #include @@ -60,14 +62,18 @@ #include #include "conf.h" -#include "plugins.h" #include "vint.h" #include "vp4.h" +#include "plugins.h" //#define RDTSC_ON #define TM_F 4 #include "time_.h" +#ifndef min +#define min(x,y) (((x)<(y)) ? (x) : (y)) +#endif + int strpref(char **str, int n, char sep1, char sep2) { int i, j=0; for(;;j++) @@ -80,7 +86,7 @@ int strpref(char **str, int n, char sep1, char sep2) { } int memcheck(unsigned char *_in, unsigned _n, unsigned char *_cpy, int cmp) { - unsigned *in = _in,*cpy=_cpy,n = (_n+3)/4; + unsigned *in = (unsigned *)_in,*cpy=_cpy,n = (_n+3)/4; int i; if(cmp <= 1) return 0; @@ -102,7 +108,7 @@ int memcheck(unsigned char *_in, unsigned _n, unsigned char *_cpy, int cmp) { } int memcheck64(unsigned char *_in, unsigned _n, unsigned char *_cpy, int cmp) { - uint64_t *in = _in,*cpy=_cpy,n = (_n+7)/8; + uint64_t *in = (uint64_t *)_in,*cpy=_cpy,n = (_n+7)/8; int i; if(cmp <= 1) return 0; @@ -169,12 +175,12 @@ enum { char *fmtext[] = { "txt", "txt", "html", "htm", "md", "vbul", "csv", "tsv", "squash" }; //------------- plugin : usage --------------------------------- -extern struct plugg plugg[]; +//extern struct plugg plugg[]; void plugsprt(void) { struct plugs *gs; - struct plugg *pg; + struct plugg *pg; printf("Codec group:\n"); for(pg = plugg; pg->id[0]; pg++) printf("%-16s %s %s\n", pg->id, pg->desc, pg->name); @@ -202,8 +208,8 @@ void plugsprtv(FILE *f, int fmt) { for(co = codecs; co->coid >= 0; co++) if(co->coid) { - pv = co->name; char name[65],ver[33]; + pv = co->name; ver[0] = 0; codver(co->coid, co->ver, ver); sprintf(name, "%s %c%s", co->name, co->ver?'v':' ', ver); @@ -236,7 +242,7 @@ void plugsprtv(FILE *f, int fmt) { struct plug { int id,err,blksize,lev; char *name,prm[17],tms[20]; - long long len,memc,memd; + int64_t len,memc,memd; double tc,td; }; @@ -248,10 +254,10 @@ double fac = 1.3; int plugins(struct plug *plug, struct plugs *gs, int *pk, unsigned bsize, int bsizex, int lev, char *prm) { int i,k = *pk; + struct plug *p = &plug[k]; for(i = 0; i < k; i++) if(plug[i].id == gs->id && plug[i].lev == lev && !strcmp(plug[i].prm,prm)) return -1; - struct plug *p = &plug[k]; memset(p, 0, sizeof(struct plug)); p->id = gs->id; p->err = 0; @@ -270,9 +276,10 @@ int plugreg(struct plug *plug, char *cmd, int k, int bsize, int bsizex) { int ignore = 0; while(*cmd) { + char *name; while(isspace(*cmd)) cmd++; - char *name = cmd; + name = cmd; while(isalnum(*cmd) || *cmd == '_' || *cmd == '-' || *cmd == '.') cmd++; if(*cmd) *cmd++ = 0; @@ -287,11 +294,13 @@ int plugreg(struct plug *plug, char *cmd, int k, int bsize, int bsizex) { } for(;;) { + char *prm; + int lev; while(isspace(*cmd) || *cmd == ',') cmd++; - char *prm = cmd; - int lev = strtol(cmd, &cmd, 10); + prm = cmd; + lev = strtol(cmd, &cmd, 10); if(prm == cmd) { lev = -1; prm = cempty; @@ -305,36 +314,36 @@ int plugreg(struct plug *plug, char *cmd, int k, int bsize, int bsizex) { } else prm = cempty; - int found = 0; - struct plugs *gs,*gfs=NULL; - if(!*name) - break; - for(gs = plugs; gs->id >= 0; gs++) - if(!strcasecmp(gs->name, name) ) { - char s[33],*q; - sprintf(s,"%d", lev); - found++; - if(lev<0 && gs->lev && !gs->lev[0] || gs->lev && (q=strstr(gs->lev, s)) && (q==gs->lev || *(q-1) == ',')) { + { int found = 0; + struct plugs *gs,*gfs = NULL; + if(!*name) + break; + for(gs = plugs; gs->id >= 0; gs++) + if(!strcasecmp(gs->name, name) ) { + char s[33],*q; + sprintf(s,"%d", lev); found++; - plugins(plug, gs, &k, bsize, bsizex, lev, prm); + if(lev<0 && gs->lev && !gs->lev[0] || gs->lev && (q=strstr(gs->lev, s)) && (q==gs->lev || *(q-1) == ',')) { + found++; + plugins(plug, gs, &k, bsize, bsizex, lev, prm); + } + break; } - break; - } - if((found<2 || !gs->codec) && !ignore) { - if(!found) - fprintf(stderr, "codec '%s' not found\n", name); - else if(!gs->codec) - fprintf(stderr, "codec '%s' not compiled in icbench\n", name); - else if(lev<0) - fprintf(stderr, "level [%s] not specified for codec '%s'\n", gs->lev, name ); - else if(gs->lev && gs->lev[0]) - fprintf(stderr, "level '%d' for codec '%s' not in range [%s]\n", lev, name, gs->lev); - else - fprintf(stderr, "codec '%s' has no levels\n", name); - exit(0); + if((found<2 || !gs->codec) && !ignore) { + if(!found) + fprintf(stderr, "codec '%s' not found\n", name); + else if(!gs->codec) + fprintf(stderr, "codec '%s' not compiled in icbench\n", name); + else if(lev<0) + fprintf(stderr, "level [%s] not specified for codec '%s'\n", gs->lev, name ); + else if(gs->lev && gs->lev[0]) + fprintf(stderr, "level '%d' for codec '%s' not in range [%s]\n", lev, name, gs->lev); + else + fprintf(stderr, "codec '%s' has no levels\n", name); + exit(0); + } } - while(isspace(*cmd)) cmd++; if(*cmd != ',' && (*cmd < '0' || *cmd > '9')) @@ -347,7 +356,7 @@ int plugreg(struct plug *plug, char *cmd, int k, int bsize, int bsizex) { //------------------ plugin: print/plot ----------------------------- struct bandw { - unsigned long long bw; + uint64_t bw; unsigned rtt; char *s; }; @@ -462,17 +471,17 @@ void plugprttf(FILE *f, int fmt) { #define FACTOR(_clen_, _len_) ((double)_len_*100.0/(double)_clen_) #define RATIOF(_clen_, _len_, _mode_) _mode_?FACTOR(_clen_, _len_):RATIO(_clen_, _len_) int be_factor=0; -void plugprt(struct plug *plug, long long totinlen, char *finame, int fmt, FILE *f) { +void plugprt(struct plug *plug, int64_t totinlen, char *finame, int fmt, FILE *f) { double ratio = RATIOF(plug->len,totinlen, be_factor), ratioi = RATIOI(plug->len,totinlen), tc = TMBS(totinlen,plug->tc), td = TMBS(totinlen,plug->td); char name[65]; + int c = 0, d = 0, n = 0; if(plug->lev >= 0) sprintf(name, "%s%s %d%s", plug->err?"?":"", plug->name, plug->lev, plug->prm); else sprintf(name, "%s%s%s", plug->err?"?":"", plug->name, plug->prm); - int c = 0, d = 0, n = 0; switch(fmt) { case FMT_TEXT: fprintf(f,"%12"PRId64" %5.1f %5.2f %8.2f %8.2f %-16s%s\n", @@ -557,17 +566,17 @@ void plugprtph(FILE *f, int fmt) { } } -static inline double spmbs(double td, long long len, int i, long long totinlen) { +static inline double spmbs(double td, int64_t len, int i, int64_t totinlen) { double t = td + len*TM_T/(double)bw[i].bw + blknum*(bw[i].rtt*1000.0); return TMBS(totinlen,t); } -//static inline double spdup(double td, long long len, int i, long long totinlen) { double t = td + len*TM_T/(double)bw[i].bw + blknum*(bw[i].rtt*1000.0); return ((double)totinlen*TM_T*100.0/t)/(double)bw[i].bw;} -static inline double spdup(double td, long long len, int i, long long totinlen) { +//static inline double spdup(double td, int64_t len, int i, int64_t totinlen) { double t = td + len*TM_T/(double)bw[i].bw + blknum*(bw[i].rtt*1000.0); return ((double)totinlen*TM_T*100.0/t)/(double)bw[i].bw;} +static inline double spdup(double td, int64_t len, int i, int64_t totinlen) { return (double)totinlen*100.0 / ((double)len + ((td+blknum*bw[i].rtt*1000.0)/TM_T)*(double)bw[i].bw ); } -void plugprtp(struct plug *plug, long long totinlen, char *finame, int fmt, int speedup, FILE *f) { +void plugprtp(struct plug *plug, int64_t totinlen, char *finame, int fmt, int speedup, FILE *f) { int i; char name[65]; if(plug->lev>=0) @@ -639,7 +648,7 @@ void plugplotb(FILE *f, int fmt, int idiv) { fprintf(f, "