6
#include "../tools/disp.h"
7
#include "../xmlgen/xmlgen.h"
8
#include "../xmlgen/opcgen.h"
11
unsigned long iterations;
22
char *ReadFile(char *fn) {
29
printf("Can't open XML file!\n");
32
fstat(f->_fileno,&st);
33
buf=(char*)malloc(st.st_size+sizeof(unsigned long)+1);
35
printf("Can't allocate memory!\n");
38
((unsigned long*)buf)[0]=st.st_size;
39
fread(buf+sizeof(unsigned long),st.st_size,1,f);
41
buf[st.st_size+sizeof(unsigned long)]=0;
45
void ReadConfig(struct TestData *td) {
47
f=fopen("config","r");
49
printf("Error opening config file!\n");
52
fscanf(f,"%lu",&(td->iterations));
56
void parseXML(struct TestData *td, unsigned long iter);
57
void transformXML(struct TestData *td, unsigned long iter);
58
void initXML_Transformation(struct TestData *td);
59
void initXML(struct TestData *td);
60
void releaseXML(struct TestData *td);
63
void Usage(char *myname) {
64
printf("Usage:\n\t%s <iterations> [<xml file>|xmlgen|opcgen] [<xsl file>|<size>]\n",myname);
69
int Test(int argc, char *argv[]) {
71
struct timeval pre_time,post_time;
73
unsigned long init_time,init_time2,time;
74
double init_dtime,init_d;
75
unsigned long parse_s;
76
double parse_m,parse_d;
77
unsigned char mode=0; /* 0 - file, 1 - xmlgen, 2 - opcgen */
81
if (argc!=4) Usage(argv[0]);
83
td.iterations = atol(argv[1]);
84
if (td.iterations<=0) Usage(argv[0]);
86
if (!strncmp(argv[2],"xmlgen",6)) mode=1;
87
else if (!strncmp(argv[2],"opcgen",6)) mode=2;
91
td.size = atol(argv[3]);
92
if (td.size<=0) Usage(argv[0]);
93
td.scfn = (char*)malloc(32);
95
rnd_init(); /* Initialising Random Generator */
100
xmlbuf=ReadFile(argv[2]);
102
fprintf(stderr,"Can't read XML file!\n");
105
td.xml=xmlbuf+sizeof(unsigned long);
106
td.xmllen=((unsigned long*)xmlbuf)[0];
111
xmlbuf=xmlgen_init(td.size);
115
strcpy(td.scfn,"../xml.files/generated.xsl");
118
xmlbuf=opcgen_init(td.size);
122
strcpy(td.scfn,"../xml.files/opc.xsl");
123
fprintf(stderr,"OPC XML Transformation not supported!\n");
128
xslbuf=ReadFile(td.scfn);
130
fprintf(stderr,"Can't read XSL file!\n");
134
td.xsl=xslbuf+sizeof(unsigned long);
135
td.xsllen=((unsigned long*)xslbuf)[0];
142
for (i=1;i<=td.iterations;i++) {
151
gettimeofday(&pre_time,NULL);
153
gettimeofday(&post_time,NULL);
154
time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
156
// printf("%lu\n",time);
163
rnd_init(); /* Restarting random generator */
167
gettimeofday(&pre_time,NULL);
168
initXML_Transformation(&td);
169
gettimeofday(&post_time,NULL);
170
init_time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
172
gettimeofday(&pre_time,NULL);
174
gettimeofday(&post_time,NULL);
175
init_time2=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
178
for (i=1;i<=td.iterations;i++) {
188
gettimeofday(&pre_time,NULL);
190
gettimeofday(&post_time,NULL);
191
time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
193
// printf("%lu\n",time);
211
if (mode) free(td.scfn);
215
printf("XSL Transformation Time %lf ms for %lu messages\n", ((double)(disp_s)) / 1000,td.iterations);
217
init_dtime=(init_time2 - disp_m);
222
init_d=300 * disp_d / init_dtime;
225
printf("Initialisation time %.3lf + %.3lf(%.2lf%) ms\nXSL Transformation Time %.3lf(%.2lf%) ms\n",(1. * init_time) / 1000, init_dtime, init_d, (disp_m - parse_m) / 1000, 300*(disp_d+parse_d)/(disp_m-parse_m));