X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=lttv%2Flttv%2Fsync%2Fgraph_functions.c;h=48b66a3cd4bbb54b1945e870dbec53711dd1600d;hb=c6356aa749f534f9bc0aa6315d41bff0e69a6ef9;hp=9b61e1208c2718092587e83f36e413e0340b816c;hpb=467066eeab8b0a4e5ea07d24f1840310730fd470;p=lttv.git diff --git a/lttv/lttv/sync/graph_functions.c b/lttv/lttv/sync/graph_functions.c index 9b61e120..48b66a3c 100644 --- a/lttv/lttv/sync/graph_functions.c +++ b/lttv/lttv/sync/graph_functions.c @@ -30,48 +30,93 @@ void writeGraphsScript(SyncState* const syncState) { - unsigned int i, j, k, l; + unsigned int i, j, k, l, m; + long pos1, pos2; + const GraphFunctions* moduleGraphFunctions[]= { + &syncState->processingModule->graphFunctions, + &syncState->matchingModule->graphFunctions, + &syncState->analysisModule->graphFunctions, + }; const struct { - size_t plotsOffset, - optionsOffset; char* name; - } funcTypes[]= { - {offsetof(GraphFunctions, writeTraceTracePlots), - offsetof(GraphFunctions, writeTraceTraceOptions), "TraceTrace"}, - {offsetof(GraphFunctions, writeTraceTimePlots), - offsetof(GraphFunctions, writeTraceTimeOptions), "TraceTime"}, + size_t plotsOffsets[2]; + size_t optionsOffset; + } graphTypes[]= { + { + "TraceTrace", + { + offsetof(GraphFunctions, writeTraceTraceBackPlots), + offsetof(GraphFunctions, writeTraceTraceForePlots), + }, + offsetof(GraphFunctions, writeTraceTraceOptions), + }, + { + "TraceTime", + { + offsetof(GraphFunctions, writeTraceTimeBackPlots), + offsetof(GraphFunctions, writeTraceTimeForePlots), + }, + offsetof(GraphFunctions, writeTraceTimeOptions), + }, }; - for (l= 0; l < sizeof(funcTypes) / sizeof(*funcTypes); l++) + fprintf(syncState->graphsStream, "\n"); + + // Write variables + pos1= ftell(syncState->graphsStream); + for (i= 0; i < syncState->traceNb; i++) + { + for (k= 0; k < sizeof(moduleGraphFunctions) / + sizeof(*moduleGraphFunctions); k++) + { + GraphVariableFunction** writeVariables= (void*) + moduleGraphFunctions[k] + offsetof(GraphFunctions, + writeVariables); + + if (*writeVariables) + { + (*writeVariables)(syncState, i); + } + } + } + fflush(syncState->graphsStream); + pos2= ftell(syncState->graphsStream); + if (pos1 != pos2) + { + fprintf(syncState->graphsStream, "\n"); + } + + // Write plots and options + for (l= 0; l < sizeof(graphTypes) / sizeof(*graphTypes); l++) { // Cover the upper triangular matrix, i is the reference node. for (i= 0; i < syncState->traceNb; i++) { for (j= i + 1; j < syncState->traceNb; j++) { - long pos1, pos2, trunc; - const GraphFunctions* moduleGraphFunctions[]= { - &syncState->processingModule->graphFunctions, - &syncState->matchingModule->graphFunctions, - &syncState->analysisModule->graphFunctions, - }; + long trunc; fprintf(syncState->graphsStream, "reset\n" "set output \"%03d-%03d-%s.eps\"\n" - "plot \\\n", i, j, funcTypes[l].name); + "plot \\\n", i, j, graphTypes[l].name); pos1= ftell(syncState->graphsStream); - for (k= 0; k < sizeof(moduleGraphFunctions) / - sizeof(*moduleGraphFunctions); k++) + for (m= 0; m < sizeof(graphTypes[l].plotsOffsets) / + sizeof(*graphTypes[l].plotsOffsets); m++) { - GraphFunction** writePlots= (void*) - moduleGraphFunctions[k] + funcTypes[l].plotsOffset; - - if (*writePlots) + for (k= 0; k < sizeof(moduleGraphFunctions) / + sizeof(*moduleGraphFunctions); k++) { - (*writePlots)(syncState, i, j); + GraphFunction** writePlots= (void*) + moduleGraphFunctions[k] + + graphTypes[l].plotsOffsets[m]; + + if (*writePlots) + { + (*writePlots)(syncState, i, j); + } } } @@ -100,13 +145,13 @@ void writeGraphsScript(SyncState* const syncState) fprintf(syncState->graphsStream, "\nset output \"%03d-%03d-%s.eps\"\n" - "set title \"\"\n", i, j, funcTypes[l].name); + "set title \"\"\n", i, j, graphTypes[l].name); for (k= 0; k < sizeof(moduleGraphFunctions) / sizeof(*moduleGraphFunctions); k++) { GraphFunction** writeOptions= (void*) - moduleGraphFunctions[k] + funcTypes[l].optionsOffset; + moduleGraphFunctions[k] + graphTypes[l].optionsOffset; if (*writeOptions) {