Make the accuracy area easier to see on the broadcast graphs
[lttv.git] / lttv / lttv / sync / event_analysis_eval.c
index ab4cffbef0469e807588e9fecd3d48299e705d19..3c1b110aeeee1e7f766cd7805952b60694c90566 100644 (file)
@@ -68,10 +68,14 @@ static void analyzeBroadcastEval(SyncState* const syncState, Broadcast* const
        broadcast);
 static GArray* finalizeAnalysisEval(SyncState* const syncState);
 static void printAnalysisStatsEval(SyncState* const syncState);
-static void writeAnalysisTraceTimePlotsEval(SyncState* const syncState, const
-       unsigned int i, const unsigned int j);
-static void writeAnalysisTraceTracePlotsEval(SyncState* const syncState, const
-       unsigned int i, const unsigned int j);
+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);
+static void writeAnalysisTraceTraceBackPlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j);
+static void writeAnalysisTraceTraceForePlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j);
 
 // Functions specific to this module
 static void registerAnalysisEval() __attribute__((constructor (102)));
@@ -104,15 +108,18 @@ static void dumpBinToFile(const struct Bins* const bins, FILE* const file);
 static void writeHistogram(FILE* graphsStream, const struct RttKey* rttKey,
        double* minRtt, AnalysisHistogramEval* const histogram);
 
-static void updateBounds(Bounds** const bounds, Event* const e1, Event* const e2);
+static void updateBounds(Bounds** const bounds, Event* const e1, Event* const
+       e2);
 
 // The next group of functions is only needed when computing synchronization
 // accuracy.
 #ifdef HAVE_LIBGLPK
-static glp_prob* lpCreateProblem(GQueue* const lowerHull, GQueue* const upperHull);
+static glp_prob* lpCreateProblem(GQueue* const lowerHull, GQueue* const
+       upperHull);
 static void gfLPAddRow(gpointer data, gpointer user_data);
 static Factors* calculateFactors(glp_prob* const lp, const int direction);
-static void calculateCompleteFactors(glp_prob* const lp, FactorsCHull* factors);
+static void calculateCompleteFactors(glp_prob* const lp, FactorsCHull*
+       factors);
 static FactorsCHull** createAllFactors(const unsigned int traceNb);
 static inline void finalizeAnalysisEvalLP(SyncState* const syncState);
 #else
@@ -133,8 +140,10 @@ static AnalysisModule analysisModuleEval= {
        .finalizeAnalysis= &finalizeAnalysisEval,
        .printAnalysisStats= &printAnalysisStatsEval,
        .graphFunctions= {
-               .writeTraceTimePlots= &writeAnalysisTraceTimePlotsEval,
-               .writeTraceTracePlots= &writeAnalysisTraceTracePlotsEval,
+               .writeTraceTimeBackPlots= &writeAnalysisTraceTimeBackPlotsEval,
+               .writeTraceTimeForePlots= &writeAnalysisTraceTimeForePlotsEval,
+               .writeTraceTraceBackPlots= &writeAnalysisTraceTraceBackPlotsEval,
+               .writeTraceTraceForePlots= &writeAnalysisTraceTraceForePlotsEval,
        }
 };
 
@@ -1456,7 +1465,8 @@ static uint32_t normalTotal(struct Bins* const bins)
  *   bounds:       the array containing all the trace-pair bounds
  *   e1, e2:       the two related events
  */
-static void updateBounds(Bounds** const bounds, Event* const e1, Event* const e2)
+static void updateBounds(Bounds** const bounds, Event* const e1, Event* const
+       e2)
 {
        unsigned int traceI, traceJ;
        uint64_t messageTime;
@@ -1501,7 +1511,8 @@ static void updateBounds(Bounds** const bounds, Event* const e1, Event* const e2
  *   A new glp_prob*, this problem must be freed by the caller with
  *   glp_delete_prob()
  */
-static glp_prob* lpCreateProblem(GQueue* const lowerHull, GQueue* const upperHull)
+static glp_prob* lpCreateProblem(GQueue* const lowerHull, GQueue* const
+       upperHull)
 {
        unsigned int it;
        const int zero= 0;
@@ -1799,24 +1810,18 @@ static void finalizeAnalysisEvalLP(SyncState* const syncState)
  * approach. Write the neccessary data files and plot lines in the gnuplot
  * script.
  *
- * There are two definitions of this function. The empty one is used when the
- * solver library, glpk, is not available at build time. In that case, nothing
- * is actually produced.
+ * When the solver library, glpk, is not available at build time nothing is
+ * actually produced.
  *
  * Args:
  *   syncState:    container for synchronization data
  *   i:            first trace number
  *   j:            second trace number, garanteed to be larger than i
  */
-#ifndef HAVE_LIBGLPK
-static inline void writeAccuracyGraphs(SyncState* const syncState, const unsigned int
-       i, const unsigned int j)
-{
-}
-#else
-static void writeAccuracyGraphs(SyncState* const syncState, const unsigned int
-       i, const unsigned int j)
+static void writeAnalysisTraceTimeBackPlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j)
 {
+#ifdef HAVE_LIBGLPK
        unsigned int it;
        AnalysisDataEval* analysisData= syncState->analysisData;
        AnalysisGraphsEval* graphs= analysisData->graphs;
@@ -1926,42 +1931,54 @@ static void writeAccuracyGraphs(SyncState* const syncState, const unsigned int
                                "linecolor rgb \"black\" fill solid 0.25 noborder, \\\n", i,
                                j);
        }
-}
 #endif
+}
 
 
 /*
  * Write the analysis-specific graph lines in the gnuplot script.
  *
+ * When the solver library, glpk, is not available at build time nothing is
+ * actually produced.
+ *
  * Args:
  *   syncState:    container for synchronization data
  *   i:            first trace number
  *   j:            second trace number, garanteed to be larger than i
  */
-static void writeAnalysisTraceTimePlotsEval(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)
 {
-       AnalysisDataEval* analysisData= syncState->analysisData;
-       AnalysisGraphsEval* graphs= analysisData->graphs;
-       GQueue*** hullArray= ((AnalysisDataCHull*)
-               analysisData->chullSS->analysisData)->hullArray;
-
-       printf("Between %u and %u:\n", i, j);
-       printf("\tbounds min %llu max %llu\n", graphs->bounds[j][i].min,
-               graphs->bounds[j][i].max);
-       printf("\tnumber of points in lower half-hull %u upper half-hull %u\n",
-               g_queue_get_length(hullArray[j][i]),
-               g_queue_get_length(hullArray[i][j]));
-
-       writeAccuracyGraphs(syncState, i, j);
+#ifdef HAVE_LIBGLPK
+       if (((AnalysisDataEval*)
+                       syncState->analysisData)->graphs->lpFactorsArray[j][i].type ==
+               MIDDLE)
+       {
+               fprintf(syncState->graphsStream,
+                       "\t\"analysis_eval_accuracy-%1$03u_and_%2$03u.data\" "
+                               "using 1:(($3 - $2) / clock_freq_%2$u) notitle "
+                               "with lines linewidth 2 linetype 1 "
+                               "linecolor rgb \"gray60\", \\\n"
+                       "\t\"analysis_eval_accuracy-%1$03u_and_%2$03u.data\" "
+                               "using 1:(($4 - $2) / clock_freq_%2$u) notitle "
+                               "with lines linewidth 2 linetype 1 "
+                               "linecolor rgb \"gray60\", \\\n", i, j);
+       }
+#endif
 }
 
 
-static void writeAnalysisTraceTracePlotsEval(SyncState* const syncState, const
-       unsigned int i, const unsigned int 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 writeAnalysisTraceTraceBackPlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j)
 {
-       AnalysisDataEval* analysisData= syncState->analysisData;
-
 #ifdef HAVE_LIBGLPK
        fprintf(syncState->graphsStream,
                "\t\"analysis_eval_accuracy-%1$03u_and_%2$03u.data\" "
@@ -1970,7 +1987,22 @@ static void writeAnalysisTraceTracePlotsEval(SyncState* const syncState, const
                "with filledcurves linewidth 2 linetype 1 "
                "linecolor rgb \"black\" fill solid 0.25 noborder, \\\n", i, j);
 #endif
+}
+
+
+/*
+ * 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 writeAnalysisTraceTraceForePlotsEval(SyncState* const syncState,
+       const unsigned int i, const unsigned int j)
+{
+       AnalysisDataEval* analysisData= syncState->analysisData;
 
-       analysisData->chullSS->analysisModule->graphFunctions.writeTraceTracePlots(analysisData->chullSS,
+       analysisData->chullSS->analysisModule->graphFunctions.writeTraceTraceForePlots(analysisData->chullSS,
                i, j);
 }
This page took 0.024076 seconds and 4 git commands to generate.