Fix warnings int the lttv/sync directory
[lttv.git] / lttv / lttv / sync / event_analysis_eval.c
index d5c3be290c2fc1016e689ce12e004bdec6a569b2..8dbf5bb60ec3439fa26b53e37c7502a609a1f23a 100644 (file)
@@ -57,6 +57,10 @@ static void analyzeBroadcastEval(SyncState* const syncState, Broadcast* const
        broadcast);
 static AllFactors* finalizeAnalysisEval(SyncState* const syncState);
 static void printAnalysisStatsEval(SyncState* const syncState);
+static void writeAnalysisTraceTimeBackPlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j);
+static void writeAnalysisTraceTimeForePlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j);
 
 // Functions specific to this module
 static guint ghfRttKeyHash(gconstpointer key);
@@ -104,7 +108,10 @@ static AnalysisModule analysisModuleEval= {
        .analyzeBroadcast= &analyzeBroadcastEval,
        .finalizeAnalysis= &finalizeAnalysisEval,
        .printAnalysisStats= &printAnalysisStatsEval,
-       .graphFunctions= {}
+       .graphFunctions= {
+               .writeTraceTimeBackPlots= &writeAnalysisTraceTimeBackPlotsEval,
+               .writeTraceTimeForePlots= &writeAnalysisTraceTimeForePlotsEval,
+       }
 };
 
 static ModuleOption optionEvalRttFile= {
@@ -154,7 +161,7 @@ static void initAnalysisEval(SyncState* const syncState)
                rttStream= fopen(optionEvalRttFile.arg, "r");
                if (rttStream == NULL)
                {
-                       g_error(strerror(errno));
+                       g_error("%s", strerror(errno));
                }
 
                readRttInfo(analysisData->rttInfo, rttStream);
@@ -162,7 +169,7 @@ static void initAnalysisEval(SyncState* const syncState)
                retval= fclose(rttStream);
                if (retval == EOF)
                {
-                       g_error(strerror(errno));
+                       g_error("%s", strerror(errno));
                }
        }
 
@@ -188,6 +195,7 @@ static void initAnalysisEval(SyncState* const syncState)
        if (syncState->graphsStream)
        {
                AnalysisGraphsEval* graphs= malloc(sizeof(AnalysisGraphsEval));
+               GList* result;
 
                analysisData->graphs= graphs;
 
@@ -205,6 +213,14 @@ static void initAnalysisEval(SyncState* const syncState)
                                graphs->bounds[i][j].max= 0;
                        }
                }
+
+               graphs->chullSS= (SyncState*) malloc(sizeof(SyncState));
+               memcpy(graphs->chullSS, syncState, sizeof(SyncState));
+               graphs->chullSS->analysisData= NULL;
+               result= g_queue_find_custom(&analysisModules, "chull", &gcfCompareAnalysis);
+               g_assert(result != NULL);
+               graphs->chullSS->analysisModule= (AnalysisModule*) result->data;
+               graphs->chullSS->analysisModule->initAnalysis(graphs->chullSS);
        }
 }
 
@@ -258,14 +274,14 @@ static AnalysisHistogramEval* constructAnalysisHistogramEval(const char* const
                if ((*(FILE**)((void*) histogram + loopValues[i].pointsOffset)=
                                fopen(name, "w")) == NULL)
                {
-                       g_error(strerror(errno));
+                       g_error("%s", strerror(errno));
                }
        }
 
        retval= chdir(cwd);
        if (retval == -1)
        {
-               g_error(strerror(errno));
+               g_error("%s", strerror(errno));
        }
        free(cwd);
 
@@ -298,7 +314,7 @@ static void destroyAnalysisHistogramEval(AnalysisHistogramEval* const
                retval= fclose(*(FILE**)((void*) histogram + loopValues[i].pointsOffset));
                if (retval != 0)
                {
-                       g_error(strerror(errno));
+                       g_error("%s", strerror(errno));
                }
        }
 
@@ -447,11 +463,11 @@ static void writeHistogram(FILE* graphsStream, const struct RttKey* rttKey,
                // Remove the ",\\\n" from the last graph plot line
                if (ftruncate(fileno(graphsStream), ftell(graphsStream) - 3) == -1)
                {
-                       g_error(strerror(errno));
+                       g_error("%s", strerror(errno));
                }
                if (fseek(graphsStream, 0, SEEK_END) == -1)
                {
-                       g_error(strerror(errno));
+                       g_error("%s", strerror(errno));
                }
                fprintf(graphsStream, "\n");
        }
@@ -510,6 +526,9 @@ static void destroyAnalysisEval(SyncState* const syncState)
                }
                free(graphs->bounds);
 
+               graphs->chullSS->analysisModule->destroyAnalysis(graphs->chullSS);
+               free(graphs->chullSS);
+
                free(graphs);
        }
 
@@ -531,7 +550,7 @@ static void analyzeMessageEval(SyncState* const syncState, Message* const
        message)
 {
        AnalysisDataEval* analysisData= syncState->analysisData;
-       MessageStats* messageStats;
+       MessageStats* messageStats = NULL;      /* for gcc */
        double* rtt;
        double tt;
        struct RttKey rttKey;
@@ -612,6 +631,9 @@ static void analyzeMessageEval(SyncState* const syncState, Message* const
        {
                updateBounds(analysisData->graphs->bounds, message->inE,
                        message->outE);
+
+               analysisData->graphs->chullSS->analysisModule->analyzeMessage(analysisData->graphs->chullSS,
+                       message);
        }
 }
 
@@ -806,6 +828,9 @@ static AllFactors* finalizeAnalysisEval(SyncState* const syncState)
 {
        AnalysisDataEval* analysisData= syncState->analysisData;
 
+       /* This function may be run twice because of matching_distributor. This
+        * check is there to make sure the next block is run only once.
+        */
        if (syncState->graphsStream && analysisData->graphs->histograms)
        {
                g_hash_table_foreach(analysisData->graphs->histograms,
@@ -813,6 +838,14 @@ static AllFactors* finalizeAnalysisEval(SyncState* const syncState)
                        analysisData->rttInfo, .graphsStream= syncState->graphsStream});
                g_hash_table_destroy(analysisData->graphs->histograms);
                analysisData->graphs->histograms= NULL;
+
+               if (syncState->graphsStream)
+               {
+                       SyncState* chullSS= analysisData->graphs->chullSS;
+
+                       freeAllFactors(chullSS->analysisModule->finalizeAnalysis(chullSS),
+                               chullSS->traceNb);
+               }
        }
 
        return createAllFactors(syncState->traceNb);
@@ -1078,7 +1111,7 @@ static void readRttInfo(GHashTable* rttInfo, FILE* rttStream)
 
                if (retval == -1 && !feof(rttStream))
                {
-                       g_error(strerror(errno));
+                       g_error("%s", strerror(errno));
                }
 
                if (line[retval - 1] == '\n')
@@ -1091,7 +1124,7 @@ static void readRttInfo(GHashTable* rttInfo, FILE* rttStream)
                        &tmp);
                if (retval == EOF)
                {
-                       g_error(strerror(errno));
+                       g_error("%s", strerror(errno));
                }
                else if (retval != 3)
                {
@@ -1154,7 +1187,7 @@ static void positionStream(FILE* stream)
                                }
                                else
                                {
-                                       g_error(strerror(errno));
+                                       g_error("%s", strerror(errno));
                                }
                        }
                }
@@ -1392,3 +1425,49 @@ static void updateBounds(Bounds** const bounds, Event* const e1, Event* const
                tpBounds->max= messageTime;
        }
 }
+
+
+/*
+ * Write the analysis-specific graph lines in the gnuplot script.
+ *
+ * Args:
+ *   syncState:    container for synchronization data
+ *   i:            first trace number
+ *   j:            second trace number, garanteed to be larger than i
+ */
+static void writeAnalysisTraceTimeBackPlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j)
+{
+       SyncState* chullSS= ((AnalysisDataEval*)
+                               syncState->analysisData)->graphs->chullSS;
+       const GraphFunctions* graphFunctions=
+               &chullSS->analysisModule->graphFunctions;
+
+       if (graphFunctions->writeTraceTimeBackPlots != NULL)
+       {
+                       graphFunctions->writeTraceTimeBackPlots(chullSS, i, j);
+               }
+}
+
+
+/*
+ * Write the analysis-specific graph lines in the gnuplot script.
+ *
+ * Args:
+ *   syncState:    container for synchronization data
+ *   i:            first trace number
+ *   j:            second trace number, garanteed to be larger than i
+ */
+static void writeAnalysisTraceTimeForePlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j)
+{
+       SyncState* chullSS= ((AnalysisDataEval*)
+               syncState->analysisData)->graphs->chullSS;
+       const GraphFunctions* graphFunctions=
+               &chullSS->analysisModule->graphFunctions;
+
+       if (graphFunctions->writeTraceTimeForePlots != NULL)
+       {
+               graphFunctions->writeTraceTimeForePlots(chullSS, i, j);
+       }
+}
This page took 0.02587 seconds and 4 git commands to generate.