X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Flttv%2Fsync%2Fsync_chain_lttv.c;h=9b2b8fe26f378ebe0ac4adcb8354b971bbcd9d1a;hb=d6ee500355b870e83d5cdbc431629999ec97794e;hp=cd8532a990c5eed3ff640dc19ec807fedb3dd17a;hpb=d4721e1a5216f34570d7e10257f85601cb3991bc;p=lttv.git diff --git a/lttv/lttv/sync/sync_chain_lttv.c b/lttv/lttv/sync/sync_chain_lttv.c index cd8532a9..9b2b8fe2 100644 --- a/lttv/lttv/sync/sync_chain_lttv.c +++ b/lttv/lttv/sync/sync_chain_lttv.c @@ -170,6 +170,7 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) struct rusage startUsage, endUsage; GList* result; FILE* graphsStream; + unsigned int i, j; int retval; if (!optionSync.present) @@ -285,8 +286,6 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) // Write graphs file if (graphsStream != NULL) { - unsigned int i, j; - fprintf(graphsStream, "#!/usr/bin/gnuplot\n\n" "set terminal postscript eps color size 8in,6in\n"); @@ -296,19 +295,43 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) { for (j= i + 1; j < syncState->traceNb; j++) { - long pos; + long pos1, pos2, trunc; fprintf(graphsStream, "\nset output \"%03d-%03d.eps\"\n" "plot \\\n", i, j); - syncState->processingModule->writeProcessingGraphsPlots(graphsStream, - syncState, i, j); + if (syncState->processingModule->writeProcessingGraphsPlots) + { + syncState->processingModule->writeProcessingGraphsPlots(graphsStream, + syncState, i, j); + } + if (syncState->matchingModule->writeMatchingGraphsPlots) + { + syncState->matchingModule->writeMatchingGraphsPlots(graphsStream, + syncState, i, j); + } + if (syncState->analysisModule->writeAnalysisGraphsPlots) + { + syncState->analysisModule->writeAnalysisGraphsPlots(graphsStream, + syncState, i, j); + } - // Remove the ", \\\n" from the last graph plot line fflush(graphsStream); - pos= ftell(graphsStream); - if (ftruncate(fileno(graphsStream), pos - 4) == -1) + pos2= ftell(graphsStream); + if (pos1 != pos2) + { + // Remove the ", \\\n" from the last graph plot line + trunc= pos2 - 4; + } + else + { + // Remove the "plot \\\n" line to avoid creating an invalid + // gnuplot script + trunc= pos2 - 7; + } + + if (ftruncate(fileno(graphsStream), trunc) == -1) { g_error(strerror(errno)); } @@ -318,19 +341,29 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) } fprintf(graphsStream, - "\nset output \"%1$03d-%2$03d.eps\"\n" - "set key inside right bottom\n" - "set title \"\"\n" - "set xlabel \"Clock %1$u\"\n" - "set xtics nomirror\n" - "set ylabel \"Clock %2$u\"\n" - "set ytics nomirror\n", i, j); + "\nset output \"%03d-%03d.eps\"\n" + "set title \"\"\n", i, j); - syncState->processingModule->writeProcessingGraphsOptions(graphsStream, - syncState, i, j); + if (syncState->processingModule->writeProcessingGraphsOptions) + { + syncState->processingModule->writeProcessingGraphsOptions(graphsStream, + syncState, i, j); + } + if (syncState->matchingModule->writeMatchingGraphsOptions) + { + syncState->matchingModule->writeMatchingGraphsOptions(graphsStream, + syncState, i, j); + } + if (syncState->analysisModule->writeAnalysisGraphsOptions) + { + syncState->analysisModule->writeAnalysisGraphsOptions(graphsStream, + syncState, i, j); + } - fprintf(graphsStream, - "replot\n"); + if (pos1 != pos2) + { + fprintf(graphsStream, "replot\n"); + } } } @@ -344,6 +377,31 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) { syncState->processingModule->printProcessingStats(syncState); } + if (syncState->matchingModule->printMatchingStats != NULL) + { + syncState->matchingModule->printMatchingStats(syncState); + } + if (syncState->analysisModule->printAnalysisStats != NULL) + { + syncState->analysisModule->printAnalysisStats(syncState); + } + + if (optionSyncStats.present) + { + printf("Resulting synchronization factors:\n"); + for (i= 0; i < syncState->traceNb; i++) + { + LttTrace* t; + + t= traceSetContext->traces[i]->t; + + printf("\ttrace %u drift= %g offset= %g (%f) start time= %ld.%09ld\n", + i, t->drift, t->offset, (double) tsc_to_uint64(t->freq_scale, + t->start_freq, t->offset) / NANOSECONDS_PER_SECOND, + t->start_time_from_tsc.tv_sec, + t->start_time_from_tsc.tv_nsec); + } + } syncState->processingModule->destroyProcessing(syncState); if (syncState->matchingModule != NULL)