source: trunk/poppler/expat-1.95.8/tests/benchmark/benchmark.c @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 15 years ago

First import

File size: 2.5 KB
Line 
1#include <sys/stat.h>
2#include <stdlib.h>
3#include <stdio.h>
4#include <time.h>
5#include "expat.h"
6
7static void
8usage(const char *prog, int rc)
9{
10  fprintf(stderr,
11          "usage: %s [-n] filename bufferSize nr_of_loops\n", prog);
12  exit(rc);
13}
14
15int main (int argc, char *argv[]) 
16{
17  XML_Parser  parser;
18  char        *XMLBuf, *XMLBufEnd, *XMLBufPtr;
19  FILE        *fd;
20  struct stat fileAttr;
21  int         nrOfLoops, bufferSize, fileSize, i, isFinal;
22  int         j = 0, ns = 0;
23  clock_t     tstart, tend;
24  double      cpuTime = 0.0;
25
26  if (argc > 1) {
27    if (argv[1][0] == '-') {
28      if (argv[1][1] == 'n' && argv[1][2] == '\0') {
29        ns = 1;
30        j = 1;
31      }
32      else
33        usage(argv[0], 1);
34    }
35  }
36
37  if (argc != j + 4)
38    usage(argv[0], 1);
39
40  if (stat (argv[j + 1], &fileAttr) != 0) {
41    fprintf (stderr, "could not access file '%s'\n", argv[j + 1]);
42    return 2;
43  }
44 
45  fd = fopen (argv[j + 1], "r");
46  if (!fd) {
47    fprintf (stderr, "could not open file '%s'\n", argv[j + 1]);
48    exit(2);
49  }
50 
51  bufferSize = atoi (argv[j + 2]);
52  nrOfLoops = atoi (argv[j + 3]);
53  if (bufferSize <= 0 || nrOfLoops <= 0) {
54    fprintf (stderr, 
55             "buffer size and nr of loops must be greater than zero.\n");
56    exit(3);
57  }
58
59  XMLBuf = malloc (fileAttr.st_size);
60  fileSize = fread (XMLBuf, sizeof (char), fileAttr.st_size, fd);
61  fclose (fd);
62 
63  i = 0;
64  XMLBufEnd = XMLBuf + fileSize;
65  while (i < nrOfLoops) {
66    XMLBufPtr = XMLBuf;
67    isFinal = 0;
68    if (ns)
69      parser = XML_ParserCreateNS(NULL, '!');
70    else
71      parser = XML_ParserCreate(NULL);
72    tstart = clock();
73    do {
74      int parseBufferSize = XMLBufEnd - XMLBufPtr;
75      if (parseBufferSize <= bufferSize)
76        isFinal = 1;
77      else
78        parseBufferSize = bufferSize;
79      if (!XML_Parse (parser, XMLBufPtr, parseBufferSize, isFinal)) {
80        fprintf (stderr, "error '%s' at line %d character %d\n",
81                 XML_ErrorString (XML_GetErrorCode (parser)),
82                 XML_GetCurrentLineNumber (parser),
83                 XML_GetCurrentColumnNumber (parser));
84        free (XMLBuf);
85        XML_ParserFree (parser);
86        exit (4);
87      }
88      XMLBufPtr += bufferSize;
89    } while (!isFinal);
90    tend = clock();
91    cpuTime += ((double) (tend - tstart)) / CLOCKS_PER_SEC;
92    XML_ParserFree (parser);
93    i++;
94  }
95
96  free (XMLBuf);
97     
98  printf ("%d loops, with buffer size %d. Average time per loop: %f\n", 
99          nrOfLoops, bufferSize, cpuTime / (double) nrOfLoops);
100  return 0;
101}
Note: See TracBrowser for help on using the repository browser.