X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=lttv%2Flttv%2Fsync%2Fsync_chain_unittest.c;h=276c71ce2d4b80396016a3f402cfcd29f44e76a5;hb=1111bb0f69e3c01c9264b19cbc7d2a8a02eeb569;hp=50c9f395526cbb75fed31abf71679ed921bb2dba;hpb=9c7696b8589e76aed870b15cabd09a162d468621;p=lttv.git diff --git a/lttv/lttv/sync/sync_chain_unittest.c b/lttv/lttv/sync/sync_chain_unittest.c index 50c9f395..276c71ce 100644 --- a/lttv/lttv/sync/sync_chain_unittest.c +++ b/lttv/lttv/sync/sync_chain_unittest.c @@ -41,6 +41,7 @@ #include "event_analysis_chull.h" #include "event_analysis_linreg.h" #include "event_analysis_eval.h" +#include "factor_reduction_accuracy.h" #include "sync_chain.h" @@ -82,6 +83,12 @@ static ModuleOption optionSyncAnalysis= { .hasArg= REQUIRED_ARG, .optionHelp= "Specify which algorithm to use for event analysis", }; +static ModuleOption optionSyncReduction= { + .shortName= 'r', + .longName= "sync-reduction", + .hasArg= REQUIRED_ARG, + .optionHelp= "Specify which algorithm to use for factor reduction", +}; /* @@ -100,12 +107,14 @@ int main(const int argc, char* const argv[]) struct timeval startTime, endTime; struct rusage startUsage, endUsage; GList* result; + GArray* factors; int retval; bool stats; const char* testCaseName; GString* analysisModulesNames; + GString* reductionModulesNames; unsigned int id; - GArray* factors; + AllFactors* allFactors; /* * Initialize event modules @@ -124,6 +133,8 @@ int main(const int argc, char* const argv[]) registerAnalysisLinReg(); registerAnalysisEval(); + registerReductionAccuracy(); + // Initialize data structures syncState= malloc(sizeof(SyncState)); @@ -138,6 +149,16 @@ int main(const int argc, char* const argv[]) g_string_truncate(analysisModulesNames, analysisModulesNames->len - 2); optionSyncAnalysis.argHelp= analysisModulesNames->str; + g_assert(g_queue_get_length(&reductionModules) > 0); + optionSyncReduction.arg= ((ReductionModule*) + g_queue_peek_head(&reductionModules))->name; + reductionModulesNames= g_string_new("Available modules: "); + g_queue_foreach(&reductionModules, &gfAppendReductionName, + reductionModulesNames); + // remove the last ", " + g_string_truncate(reductionModulesNames, reductionModulesNames->len - 2); + optionSyncReduction.argHelp= reductionModulesNames->str; + retval= snprintf(graphsDir, sizeof(graphsDir), "graphs-%d", getpid()); if (retval > sizeof(graphsDir) - 1) { @@ -145,6 +166,7 @@ int main(const int argc, char* const argv[]) } optionSyncGraphs.arg= graphsDir; + g_queue_push_head(&moduleOptions, &optionSyncReduction); g_queue_push_head(&moduleOptions, &optionSyncAnalysis); g_queue_push_head(&moduleOptions, &optionSyncGraphs); g_queue_push_head(&moduleOptions, &optionSyncStats); @@ -152,6 +174,7 @@ int main(const int argc, char* const argv[]) testCaseName= processOptions(argc, argv); g_string_free(analysisModulesNames, TRUE); + g_string_free(reductionModulesNames, TRUE); if (optionSyncStats.present) { @@ -202,14 +225,29 @@ int main(const int argc, char* const argv[]) g_error("Analysis module '%s' not found", optionSyncAnalysis.arg); } + syncState->reductionData= NULL; + result= g_queue_find_custom(&reductionModules, optionSyncReduction.arg, + &gcfCompareReduction); + if (result != NULL) + { + syncState->reductionModule= (ReductionModule*) result->data; + } + else + { + g_error("Reduction module '%s' not found", optionSyncReduction.arg); + } + // Initialize modules syncState->processingModule->initProcessing(syncState, testCaseName); syncState->matchingModule->initMatching(syncState); syncState->analysisModule->initAnalysis(syncState); + syncState->reductionModule->initReduction(syncState); // Process traceset - factors= syncState->processingModule->finalizeProcessing(syncState); - g_array_free(factors, TRUE); + allFactors= syncState->processingModule->finalizeProcessing(syncState); + factors= syncState->reductionModule->finalizeReduction(syncState, + allFactors); + freeAllFactors(allFactors, syncState->traceNb); // Write graphs file if (syncState->graphsStream) @@ -218,20 +256,31 @@ int main(const int argc, char* const argv[]) if (fclose(syncState->graphsStream) != 0) { - g_error(strerror(errno)); + g_error("%s", strerror(errno)); } } // Print statistics - if (syncState->stats) + if (optionSyncStats.present) { + unsigned int i; + printStats(syncState); + + printf("Resulting synchronization factors:\n"); + for (i= 0; i < factors->len; i++) + { + Factors* traceFactors= &g_array_index(factors, Factors, i); + printf("\ttrace %u drift= %g offset= %g\n", i, + traceFactors->drift, traceFactors->offset); + } } // Destroy modules and clean up syncState->processingModule->destroyProcessing(syncState); syncState->matchingModule->destroyMatching(syncState); syncState->analysisModule->destroyAnalysis(syncState); + syncState->reductionModule->destroyReduction(syncState); stats= syncState->stats; free(syncState); @@ -263,7 +312,7 @@ int main(const int argc, char* const argv[]) /* - * Read program arguments dans update ModuleOptions structures + * Read program arguments and update ModuleOptions structures * * Args: * argc, argv: standard argument arrays