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

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

Updated error message.

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 open '%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.