X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Flttv%2Fsync%2Fevent_processing_text.c;h=bcbea9b2565a24e73b044318dfc6aae352d1d144;hb=4e0b958a111ac9e006acd135a6c8a97f8a959bf6;hp=9dd5d30208b8ba9deb4214ce418b2cabe5eae371;hpb=48b641c1f6320eca569b2894f253d9d815250d45;p=lttv.git diff --git a/lttv/lttv/sync/event_processing_text.c b/lttv/lttv/sync/event_processing_text.c index 9dd5d302..bcbea9b2 100644 --- a/lttv/lttv/sync/event_processing_text.c +++ b/lttv/lttv/sync/event_processing_text.c @@ -1,21 +1,21 @@ /* This file is part of the Linux Trace Toolkit viewer - * Copyright (C) 2009 Benjamin Poirier + * Copyright (C) 2009, 2010 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 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 . */ +#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, syncState->traceNb); } 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; }