op_xml_events.c

Go to the documentation of this file.
00001 
00011 #include <stdio.h>
00012 #include <string.h>
00013 #include "op_events.h"
00014 #include "op_list.h"
00015 #include "op_cpu_type.h"
00016 #include "op_xml_out.h"
00017 
00018 static op_cpu cpu_type;
00019 #define MAX_BUFFER 16384
00020 static char buffer[MAX_BUFFER];
00021 
00022 void open_xml_events(char const * title, char const * doc, op_cpu the_cpu_type)
00023 {
00024     char const * schema_version = "1.1";
00025 
00026     buffer[0] = '\0';
00027     cpu_type = the_cpu_type;
00028     open_xml_element(HELP_EVENTS, 1, buffer, MAX_BUFFER);
00029     init_xml_str_attr(SCHEMA_VERSION, schema_version, buffer, MAX_BUFFER);
00030     close_xml_element(NONE, 1, buffer, MAX_BUFFER);
00031     open_xml_element(HELP_HEADER, 1, buffer, MAX_BUFFER);
00032     init_xml_str_attr(HELP_TITLE, title, buffer, MAX_BUFFER);
00033     init_xml_str_attr(HELP_DOC, doc, buffer, MAX_BUFFER);
00034     close_xml_element(NONE, 0, buffer, MAX_BUFFER);
00035     printf("%s", buffer);
00036 }
00037 
00038 void close_xml_events(void)
00039 {
00040     buffer[0] = '\0';
00041     close_xml_element(HELP_EVENTS, 0, buffer, MAX_BUFFER);
00042     printf("%s", buffer);
00043 }
00044 
00045 static void xml_do_arch_specific_event_help(struct op_event const *event,
00046                         char *buffer, size_t size)
00047 {
00048     switch (cpu_type) {
00049     case CPU_PPC64_CELL:
00050         init_xml_int_attr(HELP_EVENT_GROUP, event->val / 100, buffer,
00051                   size);
00052         break;
00053     default:
00054         break;
00055     }
00056 }
00057 
00058 
00059 void xml_help_for_event(struct op_event const * event)
00060 {
00061     uint i;
00062     int has_nested = strcmp(event->unit->name, "zero");
00063 
00064     buffer[0] = '\0';
00065     open_xml_element(HELP_EVENT, 1, buffer, MAX_BUFFER);
00066     init_xml_str_attr(HELP_EVENT_NAME, event->name, buffer, MAX_BUFFER);
00067     xml_do_arch_specific_event_help(event, buffer, MAX_BUFFER);
00068     init_xml_str_attr(HELP_EVENT_DESC, event->desc, buffer, MAX_BUFFER);
00069 
00070     init_xml_int_attr(HELP_COUNTER_MASK, event->counter_mask, buffer,
00071               MAX_BUFFER);
00072     if (event->ext)
00073         init_xml_str_attr(HELP_EXT, event->ext, buffer, MAX_BUFFER);
00074     init_xml_int_attr(HELP_MIN_COUNT, event->min_count,
00075               buffer, MAX_BUFFER);
00076 
00077     if (has_nested) {
00078         char um_type[10];
00079         close_xml_element(NONE, 1, buffer, MAX_BUFFER);
00080         open_xml_element(HELP_UNIT_MASKS, 1, buffer, MAX_BUFFER);
00081         init_xml_int_attr(HELP_DEFAULT_MASK, event->unit->default_mask,
00082                   buffer, MAX_BUFFER);
00083         switch (event->unit->unit_type_mask){
00084         case utm_bitmask:
00085             strncpy(um_type, "bitmask", sizeof(um_type));
00086             break;
00087         case utm_exclusive:
00088             strncpy(um_type, "exclusive", sizeof(um_type));
00089             break;
00090         case utm_mandatory:
00091             strncpy(um_type, "mandatory", sizeof(um_type));
00092             break;
00093         }
00094         init_xml_str_attr(HELP_UNIT_MASKS_CATEGORY, um_type, buffer, MAX_BUFFER);
00095         close_xml_element(NONE, 1, buffer, MAX_BUFFER);
00096         for (i = 0; i < event->unit->num; i++) {
00097             open_xml_element(HELP_UNIT_MASK, 1, buffer, MAX_BUFFER);
00098             init_xml_int_attr(HELP_UNIT_MASK_VALUE,
00099                       event->unit->um[i].value,
00100                       buffer, MAX_BUFFER);
00101             init_xml_str_attr(HELP_UNIT_MASK_DESC,
00102                       event->unit->um[i].desc,
00103                       buffer, MAX_BUFFER);
00104             if (event->unit->um[i].extra)
00105                 init_xml_int_attr(HELP_UNIT_EXTRA_VALUE,
00106                               event->unit->um[i].extra,
00107                               buffer, MAX_BUFFER);
00108             close_xml_element(NONE, 0, buffer, MAX_BUFFER);
00109         }
00110         close_xml_element(HELP_UNIT_MASKS, 0, buffer, MAX_BUFFER);
00111     }
00112     close_xml_element(has_nested ? HELP_EVENT : NONE, has_nested,
00113               buffer, MAX_BUFFER);
00114     printf("%s", buffer);
00115 }
00116 

Generated on 8 Nov 2012 for Oprofile by  doxygen 1.6.1