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