From: Benjamin Poirier Date: Fri, 30 Oct 2009 23:09:26 +0000 (-0400) Subject: Add support for module options X-Git-Tag: v0.12.26~44 X-Git-Url: http://git.liburcu.org/?p=lttv.git;a=commitdiff_plain;h=2bd4b3e43e525da7b4c9738915ec847f7fe4906a Add support for module options This is independant (down to sync_chain) of lttv's option mechanism. Signed-off-by: Benjamin Poirier --- diff --git a/lttv/lttv/sync/data_structures.h b/lttv/lttv/sync/data_structures.h index 62a776a8..719f664d 100644 --- a/lttv/lttv/sync/data_structures.h +++ b/lttv/lttv/sync/data_structures.h @@ -36,7 +36,7 @@ enum EventType { TCP, UDP, - TYPE_COUNT, // This must be the last field + TYPE_COUNT // This must be the last field }; // Stage 1 to 2: These structures are passed from processing to matching modules diff --git a/lttv/lttv/sync/event_analysis_chull.c b/lttv/lttv/sync/event_analysis_chull.c index 34630941..6f6e3090 100644 --- a/lttv/lttv/sync/event_analysis_chull.c +++ b/lttv/lttv/sync/event_analysis_chull.c @@ -28,7 +28,7 @@ #include #include -#include "sync_chain_lttv.h" +#include "sync_chain.h" #include "event_analysis_chull.h" diff --git a/lttv/lttv/sync/event_analysis_eval.c b/lttv/lttv/sync/event_analysis_eval.c index 9ee0f47f..05a49acc 100644 --- a/lttv/lttv/sync/event_analysis_eval.c +++ b/lttv/lttv/sync/event_analysis_eval.c @@ -16,13 +16,23 @@ * MA 02111-1307, USA. */ +#define _GNU_SOURCE + #ifdef HAVE_CONFIG_H #include #endif +#include +#include +#include +#include #include +#include +#include +#include -#include "sync_chain_lttv.h" +#include "lookup3.h" +#include "sync_chain.h" #include "event_analysis_eval.h" @@ -42,6 +52,12 @@ static void printAnalysisStatsEval(SyncState* const syncState); // Functions specific to this module static void registerAnalysisEval() __attribute__((constructor (102))); +static guint ghfRttKeyHash(gconstpointer key); +static gboolean gefRttKeyEqual(gconstpointer a, gconstpointer b); +static void gdnDestroyRttKey(gpointer data); +static void gdnDestroyDouble(gpointer data); +static void readRttInfo(GHashTable* rttInfo, FILE* rttFile); +static void positionStream(FILE* stream); static AnalysisModule analysisModuleEval= { @@ -57,6 +73,14 @@ static AnalysisModule analysisModuleEval= { .writeAnalysisGraphsOptions= NULL, }; +static ModuleOption optionEvalRttFile= { + .longName= "eval-rtt-file", + .hasArg= REQUIRED_ARG, + {.arg= NULL}, + .optionHelp= "specify the file containing rtt information", + .argHelp= "FILE", +}; + /* * Analysis module registering function @@ -64,6 +88,7 @@ static AnalysisModule analysisModuleEval= { static void registerAnalysisEval() { g_queue_push_tail(&analysisModules, &analysisModuleEval); + g_queue_push_tail(&moduleOptions, &optionEvalRttFile); } @@ -84,7 +109,27 @@ static void initAnalysisEval(SyncState* const syncState) analysisData= malloc(sizeof(AnalysisDataEval)); syncState->analysisData= analysisData; - //readRttInfo(&analysisData->rttInfo, optionEvalRttFile); + analysisData->rttInfo= g_hash_table_new_full(&ghfRttKeyHash, + &gefRttKeyEqual, &gdnDestroyRttKey, &gdnDestroyDouble); + if (optionEvalRttFile.arg) + { + FILE* rttStream; + int retval; + + rttStream= fopen(optionEvalRttFile.arg, "r"); + if (rttStream == NULL) + { + g_error(strerror(errno)); + } + + readRttInfo(analysisData->rttInfo, rttStream); + + retval= fclose(rttStream); + if (retval == EOF) + { + g_error(strerror(errno)); + } + } if (syncState->stats) { @@ -122,7 +167,7 @@ static void destroyAnalysisEval(SyncState* const syncState) return; } - //g_hash_table_destroy(analysisData->rttInfo); + g_hash_table_destroy(analysisData->rttInfo); analysisData->rttInfo= NULL; if (syncState->stats) @@ -263,3 +308,215 @@ static void printAnalysisStatsEval(SyncState* const syncState) } } } + + +/* + * A GHashFunc for g_hash_table_new() + * + * Args: + * key struct RttKey* + */ +static guint ghfRttKeyHash(gconstpointer key) +{ + struct RttKey* rttKey; + uint32_t a, b, c; + + rttKey= (struct RttKey*) key; + + a= rttKey->saddr; + b= rttKey->daddr; + c= 0; + final(a, b, c); + + return c; +} + + +/* + * A GDestroyNotify function for g_hash_table_new_full() + * + * Args: + * data: struct RttKey* + */ +static void gdnDestroyRttKey(gpointer data) +{ + free(data); +} + + +/* + * A GDestroyNotify function for g_hash_table_new_full() + * + * Args: + * data: double* + */ +static void gdnDestroyDouble(gpointer data) +{ + free(data); +} + + +/* + * A GEqualFunc for g_hash_table_new() + * + * Args: + * a, b RttKey* + * + * Returns: + * TRUE if both values are equal + */ +static gboolean gefRttKeyEqual(gconstpointer a, gconstpointer b) +{ + const struct RttKey* rkA, * rkB; + + rkA= (struct RttKey*) a; + rkB= (struct RttKey*) b; + + if (rkA->saddr == rkB->saddr && rkA->daddr == rkB->daddr) + { + return TRUE; + } + else + { + return FALSE; + } +} + + +/* + * Read a file contain minimum round trip time values and fill an array with + * them. The file is formatted as such: + * + * ip's should be in dotted quad format + * + * Args: + * rttInfo: double* rttInfo[RttKey], empty table, will be filled + * rttStream: stream from which to read + */ +static void readRttInfo(GHashTable* rttInfo, FILE* rttStream) +{ + char* line= NULL; + size_t len; + int retval; + + positionStream(rttStream); + retval= getline(&line, &len, rttStream); + while(!feof(rttStream)) + { + struct RttKey* rttKey; + char saddrDQ[20], daddrDQ[20]; + double* rtt; + char tmp; + struct in_addr addr; + unsigned int i; + struct { + char* dq; + size_t offset; + } loopValues[] = { + {saddrDQ, offsetof(struct RttKey, saddr)}, + {daddrDQ, offsetof(struct RttKey, daddr)} + }; + + if (retval == -1 && !feof(rttStream)) + { + g_error(strerror(errno)); + } + + if (line[retval - 1] == '\n') + { + line[retval - 1]= '\0'; + } + + rtt= malloc(sizeof(double)); + retval= sscanf(line, " %19s %19s %lf %c", saddrDQ, daddrDQ, rtt, + &tmp); + if (retval == EOF) + { + g_error(strerror(errno)); + } + else if (retval != 3) + { + g_error("Error parsing RTT file, line was '%s'", line); + } + + rttKey= malloc(sizeof(struct RttKey)); + for (i= 0; i < sizeof(loopValues) / sizeof(*loopValues); i++) + { + retval= inet_aton(loopValues[i].dq, &addr); + if (retval == 0) + { + g_error("Error converting address '%s'", loopValues[i].dq); + } + *(uint32_t*) ((void*) rttKey + loopValues[i].offset)= + addr.s_addr; + } + + g_hash_table_insert(rttInfo, rttKey, rtt); + + positionStream(rttStream); + retval= getline(&line, &len, rttStream); + } + + if (line) + { + free(line); + } +} + + +/* + * Advance stream over empty space, empty lines and lines that begin with '#' + * + * Args: + * stream: stream, at exit, will be over the first non-empty character + * of a line of be at EOF + */ +static void positionStream(FILE* stream) +{ + int firstChar; + ssize_t retval; + char* line= NULL; + size_t len; + + do + { + firstChar= fgetc(stream); + if (firstChar == (int) '#') + { + retval= getline(&line, &len, stream); + if (retval == -1) + { + if (feof(stream)) + { + goto outEof; + } + else + { + g_error(strerror(errno)); + } + } + } + else if (firstChar == (int) '\n' || firstChar == (int) ' ' || + firstChar == (int) '\t') + {} + else if (firstChar == EOF) + { + goto outEof; + } + else + { + break; + } + } while (true); + retval= ungetc(firstChar, stream); + if (retval == EOF) + { + g_error("Error: ungetc()"); + } + +outEof: + if (line) + { + free(line); + } +} diff --git a/lttv/lttv/sync/event_analysis_eval.h b/lttv/lttv/sync/event_analysis_eval.h index 7ecdb336..06e6cab3 100644 --- a/lttv/lttv/sync/event_analysis_eval.h +++ b/lttv/lttv/sync/event_analysis_eval.h @@ -37,9 +37,14 @@ typedef struct TracePairStats** allStats; } AnalysisStatsEval; +struct RttKey +{ + uint32_t saddr, daddr; +}; + typedef struct { - // double* rttInfo[saddr][daddr] + // double* rttInfo[RttKey] GHashTable* rttInfo; AnalysisStatsEval* stats; diff --git a/lttv/lttv/sync/event_analysis_linreg.c b/lttv/lttv/sync/event_analysis_linreg.c index 10dc8d78..cae90936 100644 --- a/lttv/lttv/sync/event_analysis_linreg.c +++ b/lttv/lttv/sync/event_analysis_linreg.c @@ -27,7 +27,7 @@ #include #include -#include "sync_chain_lttv.h" +#include "sync_chain.h" #include "event_analysis_linreg.h" diff --git a/lttv/lttv/sync/event_matching_broadcast.c b/lttv/lttv/sync/event_matching_broadcast.c index 9eb6e108..3db88e58 100644 --- a/lttv/lttv/sync/event_matching_broadcast.c +++ b/lttv/lttv/sync/event_matching_broadcast.c @@ -26,7 +26,7 @@ #include #include "event_analysis.h" -#include "sync_chain_lttv.h" +#include "sync_chain.h" #include "event_matching_broadcast.h" @@ -215,6 +215,11 @@ static void matchEventBroadcast(SyncState* const syncState, Event* const event) g_queue_push_tail(broadcast->events, event); if (broadcast->events->length == syncState->traceNb) { + if (matchingData->stats) + { + matchingData->stats->totComplete++; + } + g_hash_table_steal(matchingData->pendingBroadcasts, datagramKey); free(datagramKey); syncState->analysisModule->analyzeBroadcast(syncState, broadcast); @@ -226,6 +231,12 @@ static void matchEventBroadcast(SyncState* const syncState, Event* const event) broadcast= malloc(sizeof(Broadcast)); broadcast->events= g_queue_new(); g_queue_push_tail(broadcast->events, event); + + datagramKey= malloc(sizeof(DatagramKey)); + *datagramKey= *event->event.udpEvent->datagramKey; + + g_hash_table_insert(matchingData->pendingBroadcasts, + datagramKey, broadcast); } } else @@ -288,7 +299,6 @@ static void printMatchingStatsBroadcast(SyncState* const syncState) { return; } - matchingData= (MatchingDataBroadcast*) syncState->matchingData; printf("Broadcast matching stats:\n"); diff --git a/lttv/lttv/sync/event_matching_tcp.c b/lttv/lttv/sync/event_matching_tcp.c index 6b8f538e..98a15827 100644 --- a/lttv/lttv/sync/event_matching_tcp.c +++ b/lttv/lttv/sync/event_matching_tcp.c @@ -26,7 +26,7 @@ #include #include "event_analysis.h" -#include "sync_chain_lttv.h" +#include "sync_chain.h" #include "event_matching_tcp.h" diff --git a/lttv/lttv/sync/event_processing_lttng_null.c b/lttv/lttv/sync/event_processing_lttng_null.c index f251b055..26971b26 100644 --- a/lttv/lttv/sync/event_processing_lttng_null.c +++ b/lttv/lttv/sync/event_processing_lttng_null.c @@ -22,7 +22,7 @@ #include -#include "sync_chain_lttv.h" +#include "sync_chain.h" #include "event_processing_lttng_common.h" #include "event_processing_lttng_null.h" diff --git a/lttv/lttv/sync/event_processing_lttng_standard.c b/lttv/lttv/sync/event_processing_lttng_standard.c index 489dec5f..1ee27c76 100644 --- a/lttv/lttv/sync/event_processing_lttng_standard.c +++ b/lttv/lttv/sync/event_processing_lttng_standard.c @@ -29,7 +29,7 @@ #include #include -#include "sync_chain_lttv.h" +#include "sync_chain.h" #include "event_processing_lttng_common.h" #include "event_processing_lttng_standard.h" diff --git a/lttv/lttv/sync/sync_chain.h b/lttv/lttv/sync/sync_chain.h new file mode 100644 index 00000000..fa39b966 --- /dev/null +++ b/lttv/lttv/sync/sync_chain.h @@ -0,0 +1,77 @@ +/* This file is part of the Linux Trace Toolkit viewer + * Copyright (C) 2009 Benjamin Poirier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License Version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +#ifndef SYNC_CHAIN_H +#define SYNC_CHAIN_H + +#include +#include + +#include "event_processing.h" +#include "event_matching.h" +#include "event_analysis.h" + +typedef struct _SyncState +{ + unsigned int traceNb; + bool stats; + const char* graphs; + + const ProcessingModule* processingModule; + void* processingData; + const MatchingModule* matchingModule; + void* matchingData; + const AnalysisModule* analysisModule; + void* analysisData; +} SyncState; + +typedef struct +{ + const char* longName; + enum { + NO_ARG, + REQUIRED_ARG, + //OPTIONAL_ARG, + HAS_ARG_COUNT // This must be the last field + } hasArg; + union + { + bool present; + const char* arg; + }; + const char* optionHelp; + const char* argHelp; +} ModuleOption; + + +extern GQueue processingModules; +extern GQueue matchingModules; +extern GQueue analysisModules; +extern GQueue moduleOptions; + + +void syncTraceset(LttvTracesetContext* const traceSetContext); + +char* changeToGraphDir(const char* const graphs); +void timeDiff(struct timeval* const end, const struct timeval* const start); + +gint gcfCompareProcessing(gconstpointer a, gconstpointer b); +gint gcfCompareMatching(gconstpointer a, gconstpointer b); +gint gcfCompareAnalysis(gconstpointer a, gconstpointer b); + +#endif diff --git a/lttv/lttv/sync/sync_chain_lttv.c b/lttv/lttv/sync/sync_chain_lttv.c index 399b7962..9652f346 100644 --- a/lttv/lttv/sync/sync_chain_lttv.c +++ b/lttv/lttv/sync/sync_chain_lttv.c @@ -33,7 +33,7 @@ #include #include -#include "sync_chain_lttv.h" +#include "sync_chain.h" #ifndef g_info @@ -45,19 +45,51 @@ static void init(); static void destroy(); static void gfAppendAnalysisName(gpointer data, gpointer user_data); - -static gboolean optionSync; -static gboolean optionSyncStats; -static gboolean optionSyncNull; -static char* optionSyncAnalysis; -static gboolean optionSyncGraphs; -static char* optionSyncGraphsDir; -static char graphsDir[20]; +static void gfAddModuleOption(gpointer data, gpointer user_data); +static void gfRemoveModuleOption(gpointer data, gpointer user_data); GQueue processingModules= G_QUEUE_INIT; GQueue matchingModules= G_QUEUE_INIT; GQueue analysisModules= G_QUEUE_INIT; - +GQueue moduleOptions= G_QUEUE_INIT; + +static char* argHelpNone= "none"; +static ModuleOption optionSync= { + .longName= "sync", + .hasArg= NO_ARG, + {.present= false}, + .optionHelp= "synchronize the time between the traces", +}; +static char graphsDir[20]; +static ModuleOption optionSyncStats= { + .longName= "sync-stats", + .hasArg= NO_ARG, + {.present= false}, + .optionHelp= "print statistics about the time synchronization", +}; +static ModuleOption optionSyncNull= { + .longName= "sync-null", + .hasArg= NO_ARG, + {.present= false}, + .optionHelp= "read the events but do not perform any processing", +}; +static GString* analysisModulesNames; +static ModuleOption optionSyncAnalysis= { + .longName= "sync-analysis", + .hasArg= REQUIRED_ARG, + .optionHelp= "specify the algorithm to use for event analysis", +}; +static ModuleOption optionSyncGraphs= { + .longName= "sync-graphs", + .hasArg= NO_ARG, + {.present= false}, + .optionHelp= "output gnuplot graph showing synchronization points", +}; +static ModuleOption optionSyncGraphsDir= { + .longName= "sync-graphs-dir", + .hasArg= REQUIRED_ARG, + .optionHelp= "specify the directory where to store the graphs", +}; /* * Module init function @@ -72,51 +104,37 @@ GQueue analysisModules= G_QUEUE_INIT; */ static void init() { - GString* analysisModulesNames; int retval; g_debug("\t\t\tXXXX sync init\n"); - optionSync= FALSE; - lttv_option_add("sync", '\0', "synchronize the time between the traces" , - "none", LTTV_OPT_NONE, &optionSync, NULL, NULL); - - optionSyncStats= FALSE; - lttv_option_add("sync-stats", '\0', "print statistics about the time " - "synchronization", "none", LTTV_OPT_NONE, &optionSyncStats, NULL, - NULL); - - optionSyncNull= FALSE; - lttv_option_add("sync-null", '\0', "read the events but do not perform " - "any processing", "none", LTTV_OPT_NONE, &optionSyncNull, NULL, NULL); - g_assert(g_queue_get_length(&analysisModules) > 0); - optionSyncAnalysis= ((AnalysisModule*) + optionSyncAnalysis.arg = ((AnalysisModule*) g_queue_peek_head(&analysisModules))->name; analysisModulesNames= g_string_new(""); g_queue_foreach(&analysisModules, &gfAppendAnalysisName, analysisModulesNames); // remove the last ", " g_string_truncate(analysisModulesNames, analysisModulesNames->len - 2); - lttv_option_add("sync-analysis", '\0', "specify the algorithm to use for " - "event analysis" , analysisModulesNames->str, LTTV_OPT_STRING, - &optionSyncAnalysis, NULL, NULL); - g_string_free(analysisModulesNames, TRUE); - - optionSyncGraphs= FALSE; - lttv_option_add("sync-graphs", '\0', "output gnuplot graph showing " - "synchronization points", "none", LTTV_OPT_NONE, &optionSyncGraphs, - NULL, NULL); + optionSyncAnalysis.argHelp= analysisModulesNames->str; retval= snprintf(graphsDir, sizeof(graphsDir), "graphs-%d", getpid()); if (retval > sizeof(graphsDir) - 1) { graphsDir[sizeof(graphsDir) - 1]= '\0'; } - optionSyncGraphsDir= graphsDir; - lttv_option_add("sync-graphs-dir", '\0', "specify the directory where to" - " store the graphs", graphsDir, LTTV_OPT_STRING, &optionSyncGraphsDir, - NULL, NULL); + optionSyncGraphsDir.arg= graphsDir; + optionSyncGraphsDir.argHelp= graphsDir; + + g_queue_push_head(&moduleOptions, &optionSyncGraphsDir); + g_queue_push_head(&moduleOptions, &optionSyncGraphs); + g_queue_push_head(&moduleOptions, &optionSyncAnalysis); + g_queue_push_head(&moduleOptions, &optionSyncNull); + g_queue_push_head(&moduleOptions, &optionSyncStats); + g_queue_push_head(&moduleOptions, &optionSync); + + g_queue_foreach(&moduleOptions, &gfAddModuleOption, NULL); + } @@ -127,12 +145,13 @@ static void destroy() { g_debug("\t\t\tXXXX sync destroy\n"); - lttv_option_remove("sync"); - lttv_option_remove("sync-stats"); - lttv_option_remove("sync-null"); - lttv_option_remove("sync-analysis"); - lttv_option_remove("sync-graphs"); - lttv_option_remove("sync-graphs-dir"); + g_queue_foreach(&moduleOptions, &gfRemoveModuleOption, NULL); + g_string_free(analysisModulesNames, TRUE); + + g_queue_clear(&processingModules); + g_queue_clear(&matchingModules); + g_queue_clear(&analysisModules); + g_queue_clear(&moduleOptions); } @@ -153,13 +172,13 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) FILE* graphsStream; int retval; - if (optionSync == FALSE) + if (!optionSync.present) { g_debug("Not synchronizing traceset because option is disabled"); return; } - if (optionSyncStats) + if (optionSyncStats.present) { gettimeofday(&startTime, 0); getrusage(RUSAGE_SELF, &startUsage); @@ -169,7 +188,7 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) syncState= malloc(sizeof(SyncState)); syncState->traceNb= lttv_traceset_number(traceSetContext->ts); - if (optionSyncStats) + if (optionSyncStats.present) { syncState->stats= true; } @@ -178,9 +197,9 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) syncState->stats= false; } - if (optionSyncGraphs) + if (optionSyncGraphs.present) { - syncState->graphs= optionSyncGraphsDir; + syncState->graphs= optionSyncGraphsDir.arg; } else { @@ -189,7 +208,7 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) // Identify and initialize processing module syncState->processingData= NULL; - if (optionSyncNull) + if (optionSyncNull.present) { result= g_queue_find_custom(&processingModules, "LTTV-null", &gcfCompareProcessing); @@ -237,7 +256,7 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) g_assert(result != NULL); syncState->matchingModule= (MatchingModule*) result->data; - result= g_queue_find_custom(&analysisModules, optionSyncAnalysis, + result= g_queue_find_custom(&analysisModules, optionSyncAnalysis.arg, &gcfCompareAnalysis); if (result != NULL) { @@ -245,7 +264,7 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) } else { - g_error("Analysis module '%s' not found", optionSyncAnalysis); + g_error("Analysis module '%s' not found", optionSyncAnalysis.arg); } syncState->processingModule->initProcessing(syncState, traceSetContext); @@ -253,7 +272,7 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) syncState->matchingData= NULL; syncState->analysisData= NULL; - if (!optionSyncNull) + if (!optionSyncNull.present) { syncState->matchingModule->initMatching(syncState); syncState->analysisModule->initAnalysis(syncState); @@ -342,7 +361,7 @@ void syncTraceset(LttvTracesetContext* const traceSetContext) free(syncState); - if (optionSyncStats) + if (optionSyncStats.present) { gettimeofday(&endTime, 0); retval= getrusage(RUSAGE_SELF, &endUsage); @@ -478,7 +497,7 @@ static void gfAppendAnalysisName(gpointer data, gpointer user_data) * The current working directory before the execution of the function. The * string must be free'd by the caller. */ -char* changeToGraphDir(char* const graphs) +char* changeToGraphDir(const char* const graphs) { int retval; char* cwd; @@ -509,6 +528,43 @@ char* changeToGraphDir(char* const graphs) } +/* + * A GFunc for g_queue_foreach() + * + * Args: + * data: ModuleOption* + * user_data: NULL + */ +static void gfAddModuleOption(gpointer data, gpointer user_data) +{ + ModuleOption* option; + LttvOptionType conversion[]= { + [NO_ARG]= LTTV_OPT_NONE, + [REQUIRED_ARG]= LTTV_OPT_STRING, + }; + + g_assert_cmpuint(sizeof(conversion) / sizeof(*conversion), ==, + HAS_ARG_COUNT); + option= (ModuleOption*) data; + lttv_option_add(option->longName, '\0', option->optionHelp, + option->argHelp ? option->argHelp : argHelpNone, + conversion[option->hasArg], &option->arg, NULL, NULL); +} + + +/* + * A GFunc for g_queue_foreach() + * + * Args: + * data: ModuleOption* + * user_data: NULL + */ +static void gfRemoveModuleOption(gpointer data, gpointer user_data) +{ + lttv_option_remove(((ModuleOption*) data)->longName); +} + + LTTV_MODULE("sync", "Synchronize traces", \ "Synchronizes a traceset based on the correspondance of network events", \ init, destroy, "option") diff --git a/lttv/lttv/sync/sync_chain_lttv.h b/lttv/lttv/sync/sync_chain_lttv.h deleted file mode 100644 index 1f7a273b..00000000 --- a/lttv/lttv/sync/sync_chain_lttv.h +++ /dev/null @@ -1,57 +0,0 @@ -/* This file is part of the Linux Trace Toolkit viewer - * Copyright (C) 2009 Benjamin Poirier - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License Version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - */ - -#ifndef SYNC_CHAIN_LTTV_H -#define SYNC_CHAIN_LTTV_H - -#include -#include - -#include "event_processing.h" -#include "event_matching.h" -#include "event_analysis.h" - -typedef struct _SyncState -{ - unsigned int traceNb; - bool stats; - char* graphs; - - const ProcessingModule* processingModule; - void* processingData; - const MatchingModule* matchingModule; - void* matchingData; - const AnalysisModule* analysisModule; - void* analysisData; -} SyncState; - -extern GQueue processingModules; -extern GQueue matchingModules; -extern GQueue analysisModules; - - -void syncTraceset(LttvTracesetContext* const traceSetContext); - -char* changeToGraphDir(char* const graphs); -void timeDiff(struct timeval* const end, const struct timeval* const start); - -gint gcfCompareProcessing(gconstpointer a, gconstpointer b); -gint gcfCompareMatching(gconstpointer a, gconstpointer b); -gint gcfCompareAnalysis(gconstpointer a, gconstpointer b); - -#endif diff --git a/lttv/lttv/sync/unittest.c b/lttv/lttv/sync/unittest.c index a452d08d..d35a59a2 100644 --- a/lttv/lttv/sync/unittest.c +++ b/lttv/lttv/sync/unittest.c @@ -34,7 +34,7 @@ #include #include -#include "sync_chain_lttv.h" +#include "sync_chain.h" #ifndef g_info diff --git a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index 6514ef0a..53681f48 100644 --- a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -39,7 +39,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/lttv/modules/text/batchAnalysis.c b/lttv/modules/text/batchAnalysis.c index 4b02f332..3ee4d021 100644 --- a/lttv/modules/text/batchAnalysis.c +++ b/lttv/modules/text/batchAnalysis.c @@ -34,7 +34,7 @@ #include #include #include -#include +#include static LttvTraceset *traceset; diff --git a/lttv/modules/text/sync_chain_batch.c b/lttv/modules/text/sync_chain_batch.c index 86f3c657..731720c8 100644 --- a/lttv/modules/text/sync_chain_batch.c +++ b/lttv/modules/text/sync_chain_batch.c @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include #include #include