From c4ce2274f93d9dac730b05716ce156dd7d49efed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Sj=C3=B6lund?= Date: Wed, 16 Mar 2011 12:10:34 +0000 Subject: [PATCH] - The performance analyzer now outputs correct XML (replaces invalid characters in XML) git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@8248 f25d12d1-65f4-0310-ae8a-bbce733d8d8e --- c_runtime/simulation_modelinfo.c | 51 ++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/c_runtime/simulation_modelinfo.c b/c_runtime/simulation_modelinfo.c index 33cf444d696..8f7defc9a58 100644 --- a/c_runtime/simulation_modelinfo.c +++ b/c_runtime/simulation_modelinfo.c @@ -98,16 +98,37 @@ static void printPlotCommand(FILE *plt, const char *title, const char *prefix, i } } +static void printStrXML(FILE *fout, const char *str) +{ + while (*str) { + switch (*str) { + case '<': fputs("<",fout);break; + case '>': fputs(">",fout);break; + case '\'': fputs("'",fout);break; + case '"': fputs("\\\"",fout);break; + case '\\': fputs("\\\\",fout);break; + default: fputc(*str,fout); + } + str++; + } +} + static void printInfoTag(FILE *fout, int level, const omc_fileInfo info) { indent(fout,level); - fprintf(fout, "\n", info.filename, info.lineStart, info.colStart, info.lineEnd, info.colEnd, info.readonly ? "readonly" : "writable"); + fprintf(fout, "\n", info.lineStart, info.colStart, info.lineEnd, info.colEnd, info.readonly ? "readonly" : "writable"); } static void printVars(FILE *fout, int level, int n, const struct omc_varInfo *vars) { int i; for (i=0; i\n", vars[i].id, vars[i].name, vars[i].comment); + fprintf(fout, "\n"); printInfoTag(fout, level+2, vars[i].info); indent(fout,level); fprintf(fout, "\n"); @@ -121,7 +142,7 @@ static void printFunctions(FILE *fout, FILE *plt, const char *modelFilePrefix, D rt_clear(i + SIM_TIMER_FIRST_FUNCTION); indent(fout,2); fprintf(fout, "\n", funcs[i].id); - indent(fout,4);fprintf(fout, "%s\n", funcs[i].name); + indent(fout,4);fprintf(fout, "");printStrXML(fout, funcs[i].name);fprintf(fout,"\n"); indent(fout,4);fprintf(fout, "%d\n", (int) rt_ncall_total(i + SIM_TIMER_FIRST_FUNCTION)); indent(fout,4);fprintf(fout, "\n",rt_total(i + SIM_TIMER_FIRST_FUNCTION)); indent(fout,4);fprintf(fout, "%.9f\n",rt_max_accumulated(i + SIM_TIMER_FIRST_FUNCTION)); @@ -149,7 +170,7 @@ static void printProfileBlocks(FILE *fout, FILE *plt, DATA *data) { static void printEquations(FILE *fout, int n, const struct omc_equationInfo *eqns) { int i,j; for (i=0; i\n", eqns[i].id, eqns[i].name); + indent(fout,2);fprintf(fout, "\n"); indent(fout,4);fprintf(fout, "\n"); for (j=0; j\n", eqns[i].vars[j].id); @@ -165,7 +186,7 @@ static void printProfilingDataHeader(FILE *fout, DATA *data) { filename = malloc(strlen(data->modelFilePrefix) + 15); sprintf(filename, "%s_prof.data", data->modelFilePrefix); - indent(fout, 2); fprintf(fout, "%s\n", filename); + indent(fout, 2); fprintf(fout, "");printStrXML(fout,filename);fprintf(fout,"\n"); indent(fout, 2); fprintf(fout, "%ld\n", (long) fileSize(filename)); free(filename); @@ -175,19 +196,19 @@ static void printProfilingDataHeader(FILE *fout, DATA *data) { indent(fout, 4); fprintf(fout, "cpu time\n"); for (i = 0; i < data->nFunctions; i++) { const char *name = data->functionNames[i].name; - indent(fout, 4); fprintf(fout, "%s (calls)\n", name); + indent(fout, 4); fprintf(fout, "");printStrXML(fout,name);fprintf(fout, " (calls)\n"); } for (i = 0; i < data->nProfileBlocks; i++) { const char *name = data->equationInfo[data->equationInfo_reverse_prof_index[i]].name; - indent(fout, 4); fprintf(fout, "%s (calls)\n", name); + indent(fout, 4); fprintf(fout, "");printStrXML(fout,name);fprintf(fout, " (calls)\n"); } for (i = 0; i < data->nFunctions; i++) { const char *name = data->functionNames[i].name; - indent(fout, 4); fprintf(fout, "%s (cpu time)\n", name); + indent(fout, 4); fprintf(fout, "");printStrXML(fout,name);fprintf(fout, " (cpu time)\n"); } for (i = 0; i < data->nProfileBlocks; i++) { const char *name = data->equationInfo[data->equationInfo_reverse_prof_index[i]].name; - indent(fout, 4); fprintf(fout, "%s (cpu time)\n", name); + indent(fout, 4); fprintf(fout, "");printStrXML(fout,name);fprintf(fout, " (cpu time)\n"); } indent(fout, 2); fprintf(fout, "\n"); } @@ -239,12 +260,12 @@ int printModelInfo(DATA *data, const char *filename, const char *plotfile, const fprintf(fout, "\n"); fprintf(fout, "\n"); - indent(fout, 2); fprintf(fout, "%s\n", data->modelName); - indent(fout, 2); fprintf(fout, "%s\n", data->modelFilePrefix); - indent(fout, 2); fprintf(fout, "%s\n", buf); - indent(fout, 2); fprintf(fout, "%s\n", method); - indent(fout, 2); fprintf(fout, "%s\n", outputFormat); - indent(fout, 2); fprintf(fout, "%s\n", outputFilename); + indent(fout, 2); fprintf(fout, "");printStrXML(fout,data->modelName);fprintf(fout,"\n"); + indent(fout, 2); fprintf(fout, "");printStrXML(fout,data->modelFilePrefix);fprintf(fout,"\n"); + indent(fout, 2); fprintf(fout, "");printStrXML(fout,buf);fprintf(fout,"\n"); + indent(fout, 2); fprintf(fout, "");printStrXML(fout,method);fprintf(fout,"\n"); + indent(fout, 2); fprintf(fout, "");printStrXML(fout,outputFormat);fprintf(fout,"\n"); + indent(fout, 2); fprintf(fout, "");printStrXML(fout,outputFilename);fprintf(fout,"\n"); indent(fout, 2); fprintf(fout, "%ld\n", (long) fileSize(outputFilename)); indent(fout, 2); fprintf(fout, "%f\n", rt_accumulated(SIM_TIMER_OVERHEAD)); indent(fout, 2); fprintf(fout, "%f\n", rt_accumulated(SIM_TIMER_PREINIT));