Perform trace factor reduction as a separate step
[lttv.git] / lttv / lttv / sync / event_processing_text.c
index 9dd5d30208b8ba9deb4214ce418b2cabe5eae371..3d65bf54d64a64231ef4907b61f138e89d621e89 100644 (file)
@@ -1,21 +1,21 @@
 /* This file is part of the Linux Trace Toolkit viewer
- * Copyright (C) 2009 Benjamin Poirier <benjamin.poirier@polymtl.ca>
+ * Copyright (C) 2009, 2010 Benjamin Poirier <benjamin.poirier@polymtl.ca>
  *
- * 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 free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 2.1 of the License, or (at
+ * your option) any later version.
  *
- * 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.
+ * 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 Lesser 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.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#define _GNU_SOURCE
 #define NANOSECONDS_PER_SECOND 1000000000
 #define CPU_FREQ 1e9
 
@@ -37,8 +37,7 @@
 // Functions common to all processing modules
 static void initProcessingText(SyncState* const syncState, ...);
 static void destroyProcessingText(SyncState* const syncState);
-static void finalizeProcessingText(SyncState* const syncState);
-static void printProcessingStatsText(SyncState* const syncState);
+static AllFactors* finalizeProcessingText(SyncState* const syncState);
 static void writeProcessingTraceTimeOptionsText(SyncState* const syncState,
        const unsigned int i, const unsigned int j);
 static void writeProcessingTraceTraceOptionsText(SyncState* const syncState,
@@ -47,8 +46,6 @@ static void writeProcessingGraphVariablesText(SyncState* const syncState,
        const unsigned int i);
 
 // Functions specific to this module
-static void registerProcessingText() __attribute__((constructor (102)));
-
 static unsigned int readTraceNb(FILE* testCase);
 static void skipCommentLines(FILE* testCase);
 
@@ -58,7 +55,6 @@ static ProcessingModule processingModuleText = {
        .initProcessing= &initProcessingText,
        .destroyProcessing= &destroyProcessingText,
        .finalizeProcessing= &finalizeProcessingText,
-       .printProcessingStats= &printProcessingStatsText,
        .graphFunctions= {
                .writeVariables= &writeProcessingGraphVariablesText,
                .writeTraceTraceOptions= &writeProcessingTraceTraceOptionsText,
@@ -70,7 +66,7 @@ static ProcessingModule processingModuleText = {
 /*
  * Processing Module registering function
  */
-static void registerProcessingText()
+void registerProcessingText()
 {
        g_queue_push_tail(&processingModules, &processingModuleText);
 }
@@ -120,9 +116,11 @@ static void destroyProcessingText(SyncState* const syncState)
                return;
        }
 
+       fclose(processingData->testCase);
+
        if (syncState->stats && processingData->factors)
        {
-               g_array_free(processingData->factors, TRUE);
+               freeAllFactors(processingData->factors);
        }
 
        free(syncState->processingData);
@@ -136,22 +134,25 @@ static void destroyProcessingText(SyncState* const syncState)
  *
  * Args:
  *   syncState:    container for synchronization data.
+ *
+ * Returns:
+ *   AllFactors    synchronization factors for each trace pair
  */
-static void finalizeProcessingText(SyncState* const syncState)
+static AllFactors* finalizeProcessingText(SyncState* const syncState)
 {
-       size_t len;
        int retval;
        unsigned int* seq;
-       GArray* factors;
+       AllFactors* factors;
        ProcessingDataText* processingData= (ProcessingDataText*)
                syncState->processingData;
        FILE* testCase= processingData->testCase;
        char* line= NULL;
+       size_t bufLen;
 
        seq= calloc(syncState->traceNb, sizeof(unsigned int));
 
        skipCommentLines(testCase);
-       retval= getline(&line, &len, testCase);
+       retval= getline(&line, &bufLen, testCase);
        while(!feof(testCase))
        {
                unsigned int sender, receiver;
@@ -164,9 +165,9 @@ static void finalizeProcessingText(SyncState* const syncState)
                        g_error(strerror(errno));
                }
 
-               if (line[len - 1] == '\n')
+               if (line[retval - 1] == '\n')
                {
-                       line[len - 1]= '\0';
+                       line[retval - 1]= '\0';
                }
 
                retval= sscanf(line, " %u %u %lf %lf %c", &sender, &receiver,
@@ -262,7 +263,7 @@ static void finalizeProcessingText(SyncState* const syncState)
                seq[sender]++;
 
                skipCommentLines(testCase);
-               retval= getline(&line, &len, testCase);
+               retval= getline(&line, &bufLen, testCase);
        }
 
        free(seq);
@@ -277,33 +278,8 @@ static void finalizeProcessingText(SyncState* const syncState)
        {
                processingData->factors= factors;
        }
-       else
-       {
-               g_array_free(factors, TRUE);
-       }
-}
-
-
-/*
- * Print statistics related to processing. Must be called after
- * finalizeProcessing.
- *
- * Args:
- *   syncState     container for synchronization data.
- */
-static void printProcessingStatsText(SyncState* const syncState)
-{
-       unsigned int i;
-
-       printf("Resulting synchronization factors:\n");
-       for (i= 0; i < syncState->traceNb; i++)
-       {
-               Factors* factors= &g_array_index(((ProcessingDataText*)
-                               syncState->processingData)->factors, Factors, i);
 
-               printf("\ttrace %u drift= %g offset= %g (%f)\n", i, factors->drift,
-                       factors->offset, factors->offset / CPU_FREQ);
-       }
+       return factors;
 }
 
 
@@ -352,6 +328,11 @@ static unsigned int readTraceNb(FILE* testCase)
                abort();
        }
 
+       if (line)
+       {
+               free(line);
+       }
+
        return result;
 }
 
This page took 0.040839 seconds and 4 git commands to generate.