diff --git a/icbench.c b/icbench.c index 4f2af7f..a9278c3 100644 --- a/icbench.c +++ b/icbench.c @@ -1,7 +1,7 @@ /** Copyright (C) powturbo 2013-2019 GPL v2 License - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or @@ -21,14 +21,14 @@ - twitter : https://twitter.com/powturbo - email : powturbo [_AT_] gmail [_DOT_] com **/ -// IcBench: main program +// IcBench: main program #define _CRT_SECURE_NO_WARNINGS -#define _GNU_SOURCE -#define _LARGEFILE64_SOURCE 1 -#include -#include -#include -//#include +#define _GNU_SOURCE +#define _LARGEFILE64_SOURCE 1 +#include +#include +#include +//#include #include #include #include @@ -40,32 +40,32 @@ #endif #ifndef _WIN32 #include - #endif + #endif #ifdef _MSC_VER #define PRId64 "I64d" #include "vs/getopt.h" - #else -#include + #else +#include #include -#include +#include #endif - + #if !defined(_WIN32) #include #include #include -#include +#include #include #else #include #include #define srand48(x) srand(x) #define drand48() ((double)(rand()) / RAND_MAX) -#define __off64_t _off64_t - #endif +#define __off64_t _off64_t + #endif #include -#include "conf.h" +#include "conf.h" #define VINT_IN #include "vint.h" #include "bitpack.h" @@ -86,54 +86,54 @@ int strpref(char **str, int n, char sep1, char sep2) { int i, j=0; for(;;j++) for(i = 0; i < n; i++) - if(!str[i][j] || str[i][j] != str[0][j]) { - while (j > 0 && str[0][j-1] != sep1 && str[0][j-1] != sep2) j--; - return j; - } + if(!str[i][j] || str[i][j] != str[0][j]) { + while (j > 0 && str[0][j-1] != sep1 && str[0][j-1] != sep2) j--; + return j; + } return 0; } -int memcheck(unsigned char *_in, unsigned _n, unsigned char *_cpy, int cmp) { +int memcheck(unsigned char *_in, unsigned _n, unsigned char *_cpy, int cmp) { unsigned *in = (unsigned *)_in,*cpy=_cpy,n = (_n+3)/4; int i; - if(cmp <= 1) + if(cmp <= 1) return 0; for(i = 0; i < n; i++) if(in[i] != cpy[i]) { if(cmp > 4) abort(); // crash (AFL) fuzzing - printf("ERROR in[%d]=%x,%d dec[%d]=%x,%d\n", i, in[i], bsr64(in[i]), i, cpy[i], bsr64(cpy[i]) ); - if(cmp>3) { - int j; + printf("ERROR in[%d]=%x,%d dec[%d]=%x,%d\n", i, in[i], bsr64(in[i]), i, cpy[i], bsr64(cpy[i]) ); + if(cmp>3) { + int j; for(j=i & 0xffffff80u; j < i+128;j++) { unsigned e = in[j] != cpy[j]; if(e) printf("#%d:%x,%x ", j, in[j], cpy[j]);else printf("%d:%x ", j, in[j]); } printf("\n"); - } - if(cmp > 2) exit(EXIT_FAILURE); - return i+1; - } + } + if(cmp > 2) exit(EXIT_FAILURE); + return i+1; + } return 0; } -int memcheck64(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 = (uint64_t *)_in,*cpy=_cpy,n = (_n+7)/8; int i; - if(cmp <= 1) + if(cmp <= 1) return 0; for(i = 0; i < n; i++) if(in[i] != cpy[i]) { if(cmp > 4) abort(); // crash (AFL) fuzzing - printf("ERROR in[%d]=%llx,%d dec[%d]=%llx,%d\n", i, in[i], bsr64(in[i]), i, cpy[i], bsr64(cpy[i]) ); - if(cmp>3) { - int j; + printf("ERROR in[%d]=%llx,%d dec[%d]=%llx,%d\n", i, in[i], bsr64(in[i]), i, cpy[i], bsr64(cpy[i]) ); + if(cmp>3) { + int j; for(j=i & 0xffffff80u; j < i+128;j++) { unsigned e = in[j] != cpy[j]; if(e) printf("#%d:%x,%x ", j, in[j], cpy[j]);else printf("%d:%x ", j, in[j]); } printf("\n"); - } - if(cmp > 2) exit(EXIT_FAILURE); - return i+1; - } + } + if(cmp > 2) exit(EXIT_FAILURE); + return i+1; + } return 0; } //------------------------------- malloc ------------------------------------------------ @@ -150,10 +150,10 @@ void *_valloc(size_t size, int a) { return VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); #elif defined(USE_MMAP) void *ptr = mmap((size_t)a<id[0]; pg++) - printf("%-16s %s %s\n", pg->id, pg->desc, pg->name); + for(pg = plugg; pg->id[0]; pg++) + printf("%-16s %s %s\n", pg->id, pg->desc, pg->name); printf("\n\n%-16s %-48s %s\n", "Function","Description", "level"); printf("\n%-16s %-48s %s\n", "--------","-----------", "-----"); - for(gs = plugs; gs->id >= 0; gs++) + for(gs = plugs; gs->id >= 0; gs++) if(gs->codec) - printf("%-16s %-48s %s\n", gs->name, gs->desc?gs->desc:"", gs->lev?gs->lev:""); + printf("%-16s %-48s %s\n", gs->name, gs->desc?gs->desc:"", gs->lev?gs->lev:""); } void plugsprtv(FILE *f, int fmt) { @@ -205,31 +205,31 @@ void plugsprtv(FILE *f, int fmt) { char *pv = ""; switch(fmt) { - case FMT_HTMLT: - case FMT_HTML: - printf("%s\n", "IcBench
    "); + case FMT_HTMLT: + case FMT_HTML: + printf("%s\n", "IcBench
      "); break; case FMT_VBULLETIN: - fprintf(f,"[list]\n"); + fprintf(f,"[list]\n"); break; } for(co = codecs; co->coid >= 0; co++) if(co->coid) { - char name[65],ver[33]; + char name[65],ver[33]; pv = co->name; ver[0] = 0; - codver(co->coid, co->ver, ver); + codver(co->coid, co->ver, ver); sprintf(name, "%s %c%s", co->name, co->ver?'v':' ', ver); - switch(fmt) { - case FMT_VBULLETIN: - fprintf(f, "[*][URL=\"%s\"]%s[/URL]\n", co->url, name ); + switch(fmt) { + case FMT_VBULLETIN: + fprintf(f, "[*][URL=\"%s\"]%s[/URL]\n", co->url, name ); break; - case FMT_HTML : - fprintf(f, "
    • %s\n", co->url, name ); + case FMT_HTML : + fprintf(f, "
    • %s\n", co->url, name ); break; case FMT_MARKDOWN : - fprintf(f, " - [%s](%s)\n", name, co->url); + fprintf(f, " - [%s](%s)\n", name, co->url); break; default: fprintf(f, "%-24s\t%s\n", name, co->url ); @@ -238,18 +238,18 @@ void plugsprtv(FILE *f, int fmt) { switch(fmt) { case FMT_VBULLETIN: - fprintf(f,"[/list]\n"); + fprintf(f,"[/list]\n"); break; case FMT_HTML: - fprintf(f,"
    "); + fprintf(f,"
"); break; } } //------------------ plugin: process ---------------------------------- -struct plug { +struct plug { int id,err,blksize,lev; - char *name,prm[17],tms[20]; + char *name,prm[17],tms[20]; int64_t len,memc,memd; double tc,td; }; @@ -260,18 +260,18 @@ static int cmp = 2,trans; int verbose=1; double fac = 1.3; -int plugins(struct plug *plug, struct plugs *gs, int *pk, unsigned bsize, int bsizex, int lev, char *prm) { +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++) + for(i = 0; i < k; i++) if(plug[i].id == gs->id && plug[i].lev == lev && !strcmp(plug[i].prm,prm)) return -1; - memset(p, 0, sizeof(struct plug)); - p->id = gs->id; - p->err = 0; - p->name = gs->name; - p->lev = lev; - strncpy(p->prm, prm?prm:(char *)"", 16); + memset(p, 0, sizeof(struct plug)); + p->id = gs->id; + p->err = 0; + p->name = gs->name; + p->lev = lev; + strncpy(p->prm, prm?prm:(char *)"", 16); p->prm[16] = 0; p->tms[0] = 0; p->blksize = gs->blksize?gs->blksize:bsize; @@ -280,95 +280,95 @@ int plugins(struct plug *plug, struct plugs *gs, int *pk, unsigned bsize, int bs } int plugreg(struct plug *plug, char *cmd, int k, int bsize, int bsizex) { - static char *cempty=""; + static char *cempty=""; int ignore = 0; - while(*cmd) { + while(*cmd) { char *name; - while(isspace(*cmd)) - cmd++; - name = cmd; - while(isalnum(*cmd) || *cmd == '_' || *cmd == '-' || *cmd == '.') - cmd++; + while(isspace(*cmd)) + cmd++; + name = cmd; + while(isalnum(*cmd) || *cmd == '_' || *cmd == '-' || *cmd == '.') + cmd++; if(*cmd) *cmd++ = 0; - if(!strcmp(name, "ON" )) { - ignore = 1; - continue; + if(!strcmp(name, "ON" )) { + ignore = 1; + continue; } - else if(!strcmp(name, "OFF")) { - ignore = 0; - continue; + else if(!strcmp(name, "OFF")) { + ignore = 0; + continue; } - for(;;) { - char *prm; - int lev; - while(isspace(*cmd) || *cmd == ',') + for(;;) { + char *prm; + int lev; + while(isspace(*cmd) || *cmd == ',') cmd++; - prm = cmd; - lev = strtol(cmd, &cmd, 10); - if(prm == cmd) { - lev = -1; - prm = cempty; + prm = cmd; + lev = strtol(cmd, &cmd, 10); + if(prm == cmd) { + lev = -1; + prm = cempty; } else if(isalnum(*cmd)) { prm = cmd; - while(isalnum(*cmd) || *cmd == '_' || *cmd == '-' || *cmd == '.') - cmd++; - if(*cmd) - *cmd++ = 0; - } else + while(isalnum(*cmd) || *cmd == '_' || *cmd == '-' || *cmd == '.') + cmd++; + if(*cmd) + *cmd++ = 0; + } else prm = cempty; - { int found = 0; - struct plugs *gs,*gfs = NULL; - if(!*name) + { 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) == ',')) { - found++; - plugins(plug, gs, &k, bsize, bsizex, lev, prm); + 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) == ',')) { + found++; + plugins(plug, gs, &k, bsize, bsizex, lev, prm); } - break; + break; } if((found<2 || !gs->codec) && !ignore) { - if(!found) + 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, "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]) + else if(gs->lev && gs->lev[0]) fprintf(stderr, "level '%d' for codec '%s' not in range [%s]\n", lev, name, gs->lev); - else + else fprintf(stderr, "codec '%s' has no levels\n", name); exit(0); - } - } + } + } - while(isspace(*cmd)) - cmd++; - if(*cmd != ',' && (*cmd < '0' || *cmd > '9')) + while(isspace(*cmd)) + cmd++; + if(*cmd != ',' && (*cmd < '0' || *cmd > '9')) break; } - } - a:plug[k].id = -1; + } + a:plug[k].id = -1; return k; } //------------------ plugin: print/plot ----------------------------- struct bandw { uint64_t bw; - unsigned rtt; + unsigned rtt; char *s; -}; - +}; + static struct bandw bw[] = { { 7*KB, 500, "GPRS 56" },//56kbps { 57*KB, 150, "2G 456" }, @@ -393,66 +393,66 @@ void plugprth(FILE *f, int fmt, char *t) { char *jquery = ""; char *tstyle = ""; char *table = ""; - char *code = ""; + char *code = ""; char s[128]; - time_t tm; + time_t tm; time(&tm); sprintf(s, "IcBench: %s - %s", t, asctime(localtime(&tm))); switch(fmt) { - case FMT_TEXT: - fprintf(f,"%s\n", s ); + case FMT_TEXT: + fprintf(f,"%s\n", s ); break; case FMT_VBULLETIN: - fprintf(f,"%s\n", s); + fprintf(f,"%s\n", s); break; - case FMT_HTMLT: - fprintf(f,"IcBench: %s - \n", s); + case FMT_HTMLT: + fprintf(f,"IcBench: %s - \n", s); break; - case FMT_HTML: - fprintf(f,"IcBench: %s - %s%s%s%s%s\n", s, plot, jquery, tstyle, table, code); + case FMT_HTML: + fprintf(f,"IcBench: %s - %s%s%s%s%s\n", s, plot, jquery, tstyle, table, code); break; - case FMT_MARKDOWN: - fprintf(f,"#### %s (bold = pareto) MB=1.000.000\n", s); + case FMT_MARKDOWN: + fprintf(f,"#### %s (bold = pareto) MB=1.000.000\n", s); break; } } void plugprtf(FILE *f, int fmt) { switch(fmt) { - case FMT_HTML: - fprintf(f,"\n"); + case FMT_HTML: + fprintf(f,"\n"); break; } } void plugprtth(FILE *f, int fmt) { - char *head = " C Size ratio%% Bits/Int C MI/s D MI/s Name File (bold = pareto)"; + char *head = " C Size ratio%% Bits/Int C MI/s D MI/s Name File (bold = pareto)"; switch(fmt) { - case FMT_TEXT: - fprintf(f," C Size ratio%% Bits/Int C MI/s D MI/s Name File\n"); + case FMT_TEXT: + fprintf(f," C Size ratio%% Bits/Int C MI/s D MI/s Name File\n"); break; case FMT_VBULLETIN: - fprintf(f,"[CODE][B]%s[/B] MB=1.000.0000\n", head); + fprintf(f,"[CODE][B]%s[/B] MB=1.000.0000\n", head); break; - case FMT_HTMLT: - fprintf(f,"
%s MB=1.000.0000\n", head); 
+    case FMT_HTMLT:
+      fprintf(f,"
%s MB=1.000.0000\n", head);
       break;
-    case FMT_HTML:     
-      fprintf(f,"

IcBench: Compressor Benchmark

\n"); + case FMT_HTML: + fprintf(f,"

IcBench: Compressor Benchmark

C Sizeratio%%C MI/sD MI/sNameC MemD MemFile
\n"); break; - case FMT_MARKDOWN: - fprintf(f,"|C Size|ratio%%|Bits/Integer|C MI/s|D MI/s|Name|File|\n|--------:|-----:|--------:|--------:|----------------|----------------|\n"); + case FMT_MARKDOWN: + fprintf(f,"|C Size|ratio%%|Bits/Integer|C MI/s|D MI/s|Name|File|\n|--------:|-----:|--------:|--------:|----------------|----------------|\n"); break; - case FMT_CSV: - fprintf(f,"size,csize,ratio,bpi,ctime,dtime,name,file\n"); + case FMT_CSV: + fprintf(f,"size,csize,ratio,bpi,ctime,dtime,name,file\n"); break; - case FMT_TSV: - fprintf(f,"size\tcsize\tratio\tbpi\tctime\tdtime\tname\tfile\n"); + case FMT_TSV: + fprintf(f,"size\tcsize\tratio\tbpi\tctime\tdtime\tname\tfile\n"); break; - case FMT_SQUASH: - fprintf(f,"dataset,plugin,codec,level,compressed_size,compress_cpu,compress_wall,decompress_cpu,decompress_wall\n"); + case FMT_SQUASH: + fprintf(f,"dataset,plugin,codec,level,compressed_size,compress_cpu,compress_wall,decompress_cpu,decompress_wall\n"); break; } } @@ -460,16 +460,16 @@ void plugprtth(FILE *f, int fmt) { void plugprttf(FILE *f, int fmt) { switch(fmt) { case FMT_VBULLETIN: - fprintf(f,"[/CODE]\n"); + fprintf(f,"[/CODE]\n"); break; - case FMT_HTMLT: - fprintf(f,"\n"); + case FMT_HTMLT: + fprintf(f,"\n"); break; case FMT_HTML: - fprintf(f,"
C Sizeratio%%C MI/sD MI/sNameC MemD MemFile
\n"); + fprintf(f,"\n"); break; - case FMT_MARKDOWN: - fprintf(f,"\n\n"); + case FMT_MARKDOWN: + fprintf(f,"\n\n"); break; } } @@ -481,50 +481,50 @@ void plugprttf(FILE *f, int fmt) { int be_factor=0; 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), + ratioi = RATIOI(plug->len,totinlen), tc = TMBS(totinlen,plug->tc), td = TMBS(totinlen,plug->td); - char name[65]; + char name[65]; int c = 0, d = 0, n = 0; - if(plug->lev >= 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); - + switch(fmt) { - case FMT_TEXT: - fprintf(f,"%12"PRId64" %5.1f %5.2f %8.2f %8.2f %-16s%s\n", - plug->len, ratio, ratioi, tc, td, name, finame); + case FMT_TEXT: + fprintf(f,"%12"PRId64" %5.1f %5.2f %8.2f %8.2f %-16s%s\n", + plug->len, ratio, ratioi, tc, td, name, finame); break; case FMT_VBULLETIN: - fprintf(f, "%12"PRId64" %5.1f %5.2f %s%8.2f%s %s%8.2f%s %s%-16s%s%s\n", - plug->len, ratio, ratioi, c?"[B]":"", tc, c?"[/B]":"", d?"[B]":"", td, d?"[/B]":"", n?"[B]":"", name, n?"[/B]":"", finame); + fprintf(f, "%12"PRId64" %5.1f %5.2f %s%8.2f%s %s%8.2f%s %s%-16s%s%s\n", + plug->len, ratio, ratioi, c?"[B]":"", tc, c?"[/B]":"", d?"[B]":"", td, d?"[/B]":"", n?"[B]":"", name, n?"[/B]":"", finame); break; - case FMT_HTMLT: - fprintf(f, "%12"PRId64" %5.1f %5.2f %s%8.2f%s %s%8.2f%s %s%-16s%s%s\n", - plug->len, ratio, ratioi, c?"":"", tc, c?"":"", d?"":"", td, d?"":"", n?"":"", name, n?"":"", finame); + case FMT_HTMLT: + fprintf(f, "%12"PRId64" %5.1f %5.2f %s%8.2f%s %s%8.2f%s %s%-16s%s%s\n", + plug->len, ratio, ratioi, c?"":"", tc, c?"":"", d?"":"", td, d?"":"", n?"":"", name, n?"":"", finame); break; - case FMT_HTML: + case FMT_HTML: fprintf(f, "%11"PRId64"%5.1f%5.2f%s%8.2f%s%s%8.2f%s%s%-16s%s%"PRId64"%"PRId64"%s\n", - plug->len, ratio, ratioi, c?"":"", tc, c?"":"", d?"":"", td, d?"":"", n?"":"", name, n?"":"", -// SIZE_ROUNDUP(plug->memc, Kb)/Kb, SIZE_ROUNDUP(plug->memd,Kb)/Kb, - plug->memc, plug->memd, - finame); + plug->len, ratio, ratioi, c?"":"", tc, c?"":"", d?"":"", td, d?"":"", n?"":"", name, n?"":"", +// SIZE_ROUNDUP(plug->memc, Kb)/Kb, SIZE_ROUNDUP(plug->memd,Kb)/Kb, + plug->memc, plug->memd, + finame); break; - case FMT_MARKDOWN: - fprintf(f, "|%"PRId64"|%5.1f|%5.2f|%s%.2f%s|%s%.2f%s|%s%s%s|%s|\n", - plug->len, ratio, ratioi, c?"**":"", tc, c?"**":"", d?"**":"", td, d?"**":"", n?"**":"", name, n?"**":"", finame); + case FMT_MARKDOWN: + fprintf(f, "|%"PRId64"|%5.1f|%5.2f|%s%.2f%s|%s%.2f%s|%s%s%s|%s|\n", + plug->len, ratio, ratioi, c?"**":"", tc, c?"**":"", d?"**":"", td, d?"**":"", n?"**":"", name, n?"**":"", finame); break; case FMT_CSV: fprintf(f, "%12"PRId64",%11"PRId64",%5.1f,%5.2f,%8.2f,%8.2f,%-16s,%s\n", - totinlen, plug->len, ratio, ratioi, tc, td, name, finame); + totinlen, plug->len, ratio, ratioi, tc, td, name, finame); break; - case FMT_TSV: + case FMT_TSV: fprintf(f,"%12"PRId64"\t%11"PRId64"\t%5.1f\t5.2f\t%8.2f\t%8.2f\t%-16s\t%s\n", - totinlen, plug->len, ratio, ratioi, tc, td, name, finame); + totinlen, plug->len, ratio, ratioi, tc, td, name, finame); break; case FMT_SQUASH: fprintf(f,"%12"PRId64",%11"PRId64",%5.1f,%8.2f,%8.2f,%-16s,%s\n", - finame, name, name, plug->len, tc, tc, td, td); + finame, name, name, plug->len, tc, tc, td, td); break; } } @@ -536,124 +536,124 @@ void plugprtph(FILE *f, int fmt) { int i; switch(fmt) { - case FMT_HTML: + case FMT_HTML: fprintf(f,"

IcBench: Speedup %s sheet

", (speedup&1)?"compression":"decompression"); - for(i = 0; i < BWSIZE; i++) + for(i = 0; i < BWSIZE; i++) fprintf(f, "", bw[i].s); - fprintf(f, "\n"); + fprintf(f, "\n"); break; - case FMT_MARKDOWN: + case FMT_MARKDOWN: fprintf(f,"#### IcBench: Speedup %s sheet\n\n", (speedup&1)?"compression":"decompression"); - fprintf(f, "|Name"); - for(i = 0; i < BWSIZE; i++) + fprintf(f, "|Name"); + for(i = 0; i < BWSIZE; i++) fprintf(f, "|%s", bw[i].s); - fprintf(f, "|File"); - if(blknum) + fprintf(f, "|File"); + if(blknum) fprintf(f, " blknum=%d ", blknum); - fprintf(f, "|\n"); + fprintf(f, "|\n"); fprintf(f, "|-------------"); - for(i = 0; i < BWSIZE; i++) + for(i = 0; i < BWSIZE; i++) fprintf(f, "|---------:"); - fprintf(f, "|-------------|\n"); + fprintf(f, "|-------------|\n"); break; case FMT_VBULLETIN: fprintf(f,"IcBench: Speedup %s sheet\n\n", (speedup&1)?"compression":"decompression"); - fprintf(f,"[CODE][B]\n"); - default: + fprintf(f,"[CODE][B]\n"); + default: fprintf(f,"Name "); - for(i = 0; i < BWSIZE; i++) + for(i = 0; i < BWSIZE; i++) fprintf(f, "%10s", bw[i].s); - if(blknum) + if(blknum) fprintf(f, " blknum=%d ", blknum); - fprintf(f, "\n"); - if(fmt == FMT_VBULLETIN) - fprintf(f,"[/B]\n"); + fprintf(f, "\n"); + if(fmt == FMT_VBULLETIN) + fprintf(f,"[/B]\n"); } } -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 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, 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 ); +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, int64_t totinlen, char *finame, int fmt, int speedup, FILE *f) { int i; - char name[65]; - if(plug->lev>=0) + char name[65]; + if(plug->lev>=0) sprintf(name, "%s%s%s%d%s", plug->err?"?":"", plug->name, fmt==FMT_MARKDOWN?"_":" ", plug->lev, plug->prm); else sprintf(name, "%s%s%s", plug->err?"?":"", plug->name, plug->prm); - if(fmt == FMT_HTML) + if(fmt == FMT_HTML) fprintf(f, "", name); - else - fprintf(f, "%-16s", name); + else + fprintf(f, "%-16s", name); for(i = 0; i < BWSIZE; i++) { switch(fmt) { - case FMT_HTMLT: - case FMT_HTML: - fprintf(f, ""); break; - case FMT_MARKDOWN: + case FMT_MARKDOWN: break; } } switch(fmt) { - case FMT_HTMLT: - case FMT_HTML: + case FMT_HTMLT: + case FMT_HTML: fprintf(f, "\n", finame); break; - case FMT_MARKDOWN: - fprintf(f, "|%s|\n", finame); + case FMT_MARKDOWN: + fprintf(f, "|%s|\n", finame); break; - default: - fprintf(f, "%s\n", finame); + default: + fprintf(f, "%s\n", finame); break; } } -struct { unsigned x,y; } divplot[] = { +struct { unsigned x,y; } divplot[] = { { 1920, 1080}, // 16:9 - { 1600, 900}, - { 1280, 720}, - { 800, 600} + { 1600, 900}, + { 1280, 720}, + { 800, 600} }; static unsigned divxy = 1, xlog = 1, xlog2, ylog, ylog2, plotmcpy; -void plugplotb(FILE *f, int fmt, int idiv) { - fprintf(f, "
Name%sFile"); - if(blknum) + fprintf(f, "File"); + if(blknum) fprintf(f, " blknum=%d ", blknum); - fprintf(f, "
%s"); + case FMT_HTMLT: + case FMT_HTML: + fprintf(f, ""); break; - case FMT_MARKDOWN: - fprintf(f, "|"); + case FMT_MARKDOWN: + fprintf(f, "|"); break; } switch(speedup) { - case SP_TRANSFERD: - fprintf(f,"%9.3f ", spmbs(plug->td, plug->len, i, totinlen)); + case SP_TRANSFERD: + fprintf(f,"%9.3f ", spmbs(plug->td, plug->len, i, totinlen)); break; - case SP_SPEEDUPD: - fprintf(f,"%9d ", (int)(spdup(plug->td, plug->len, i, totinlen)+0.5)); + case SP_SPEEDUPD: + fprintf(f,"%9d ", (int)(spdup(plug->td, plug->len, i, totinlen)+0.5)); break; - case SP_TRANSFERC: - fprintf(f,"%9.3f ", spmbs(plug->td, plug->len, i, totinlen)); + case SP_TRANSFERC: + fprintf(f,"%9.3f ", spmbs(plug->td, plug->len, i, totinlen)); break; - case SP_SPEEDUPC: - fprintf(f,"%9d ", (int)(spdup(plug->td, plug->len, i, totinlen)+0.5)); + case SP_SPEEDUPC: + fprintf(f,"%9d ", (int)(spdup(plug->td, plug->len, i, totinlen)+0.5)); break; } switch(fmt) { - case FMT_HTMLT: - case FMT_HTML: + case FMT_HTMLT: + case FMT_HTML: fprintf(f, "%s