source: trunk/PerfTest/intel_markup_stats/intel_markup_stats.cpp @ 192

Last change on this file since 192 was 192, checked in by ksherdy, 11 years ago

Updated PerfTest? Makefiles to autodetect 32 vs. 64 bit architecture on Intel.
Initial Intel Markup Stats check in.
Renamed Xerces-C files names to be Xerces-C specific.

File size: 4.4 KB
Line 
1#include "include/common/exception.h"
2#include "include/xpa/sax/saxparser.h"
3#include "include/xpa/sax/saxparserfactory.h"
4#include "include/util/memoryreader.h"
5#include "intel_markup_stats.hpp"
6
7#include <sys/stat.h>
8#include <unistd.h>
9#include <stdlib.h>
10#include <stdio.h>
11#include <iostream>
12using namespace std;
13
14#ifndef REPEAT_RUNS
15#define REPEAT_RUNS 1
16#endif
17
18#ifdef PAPI
19#include "../../../code_clocker/clocker/cc.h"
20#include "../../../code_clocker/clocker/cc.cxx"
21
22CC * c;
23#endif
24
25int main(int argc, char* argv[])
26{
27        if (argc != 2) {
28        printf("Usage: %s <filename>\n", argv[0]);
29                exit(-1);
30        }
31
32        // Read the source file name
33        char * src_filename = argv[1];
34        char * cmdline = new char[strlen(argv[0]) + strlen(argv[1]) +1 +1];
35        strcat(cmdline, argv[0]);
36        strcat(cmdline," ");
37        strcat(cmdline,argv[1]);
38
39        // Read the entire file into a memory buffer
40        FILE * src_file;
41        struct stat fileinfo;
42        int src_filesize;
43        char * src_buf = NULL;
44        size_t result;
45
46        // Open file and fstat
47        src_file = fopen ( src_filename , "rb" );
48        if(!src_file) {
49                fprintf(stderr, "Cannot fstat '%s'. Terminating the process ...\n", src_filename);
50                exit(-1);
51        }
52
53        if(fstat(fileno(src_file), &fileinfo)!=0) {
54                fprintf(stderr, "Cannot fstat '%s'. Terminating the process ...\n", src_filename);
55                exit(-1);
56        }
57
58        src_filesize = fileinfo.st_size;
59        src_buf = (char*) new char[src_filesize];
60        if (src_buf == NULL)
61        {
62                fprintf(stderr, "Out of memory. Terminating the process ...\n");
63                exit(-1);
64        }
65
66        // Copy the file into an in-memory buffer
67        result = fread (src_buf,1,src_filesize,src_file);
68        if (result != src_filesize)
69        {
70                fprintf(stderr, "Error reading '%s'. Terminating the process ...\n", src_filename);
71                exit(-1);
72        }
73
74        // close file
75        fclose (src_file);
76
77        // Get SAX Parser Factory.
78    SAXParserFactory* sax_impl = SAXParserFactory::newInstance();
79
80    //Create a SAXParser form SAX Factory.
81    SAXParser* parser = sax_impl->createSAXParser();
82
83    //Implement a SAX2CoreDumper to dump XML event to XML content.
84    MarkupStatsHandler * default_handler = new MarkupStatsHandler();
85
86    //Set SAX2CoreDumper as ContentHandler, DTDHandler, LexicalHandler, EntityResolver into SAXparser
87        parser->setContentHandler(default_handler);
88
89        //Create Memory Reader
90        MemoryReader * mem_reader = MemoryReader::createMemoryReader (src_buf, src_filesize);
91
92        // Parse the file
93        #ifdef PAPI
94                #define NUM_EVENTS 1
95                //      int Events[NUM_EVENTS] = {PAPI_TOT_CYC, PAPI_BR_MSP};
96                //      int Events[NUM_EVENTS] = {PAPI_TOT_CYC, PAPI_L1_DCM};
97                int Events[NUM_EVENTS] = {PAPI_L2_DCM};
98                int cal_size = 100;
99                c = new CC(Events,NUM_EVENTS,cal_size);
100                c->set_cmd(cmdline);
101        #endif
102
103        for (int run = 0; run < REPEAT_RUNS; run++)
104        {
105                #ifdef PAPI
106                        c->start_interval();
107                #endif
108
109                try
110                {
111                        parser->parse(mem_reader);
112                }
113                catch (Exception& e)
114                {
115                        cerr << "Exception: " << endl;
116                        cerr << e.toString().c_str() << endl;
117                        return -1;
118                }
119                catch (...)
120                {
121                        cerr << "Unknown Exception." << endl;
122                        return -1;
123                }
124
125                #ifdef PAPI
126                        int elems = src_filesize;
127                        c->end_interval(elems);
128                #endif
129        }
130
131        #ifdef PAPI
132                c->write_xml_file();
133                c->display_raw_event_data();
134                delete c;
135        #endif
136
137        std::cout << std::endl;
138
139        // Display statistics
140        print_stats("comment", comment_count, comment_length);
141        print_stats("CDATA section", CDATA_end_count, CDATA_length);
142        print_stats("processing instruction", PI_count, PI_length);
143        //print_stats("empty element", empty_elem_count, empty_elem_length);
144        print_stats("start tag + empty element", start_tag_count, start_tag_length);
145        printf("%i total attributes\n", total_attribute_count);
146        print_stats("attribute name", total_attribute_count, total_att_name_length);
147        print_stats("attribute value", total_attribute_count, total_att_value_length);
148        print_stats("namespace prefix name", namespace_count, total_namespace_name_length);
149        print_stats("namespace URI", namespace_count, total_namespace_URI_length);
150        print_stats("end tag", end_tag_count, end_tag_length);
151        printf("%i end tags.\n", end_tag_count);
152
153        print_stats("text item", text_item_count, text_item_length);
154        print_stats("reference", reference_count, reference_length);
155        print_stats("error item", error_item_count, error_item_length);
156        printf("Maximum nesting depth = %i\n", max_nesting_depth);
157
158        //Release the memory reader
159        MemoryReader::releaseMemoryReader (mem_reader);
160
161        //Release the SAXParser created by SAXFactory
162        sax_impl->releaseSAXParser(parser);
163
164        //Release the SAXParserFactory
165        SAXParserFactory::releaseInstance(sax_impl);
166
167        return 0;
168}
169
Note: See TracBrowser for help on using the repository browser.