X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Flttv%2Fsync%2Fsync_chain.c;h=a34a93b12dbcfe96745db6c10a680dbcc73590de;hb=b2da0724a95cdb911c07640268b65bd9c5b92010;hp=30593508471324b148567380acc457d67c7f5765;hpb=1d597550379cb00832f73bd5402918fd6ed2e9df;p=lttv.git diff --git a/lttv/lttv/sync/sync_chain.c b/lttv/lttv/sync/sync_chain.c index 30593508..a34a93b1 100644 --- a/lttv/lttv/sync/sync_chain.c +++ b/lttv/lttv/sync/sync_chain.c @@ -1,19 +1,18 @@ /* 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 . */ #ifdef HAVE_CONFIG_H @@ -21,6 +20,8 @@ #endif #include +#include +#include #include #include "sync_chain.h" @@ -29,9 +30,40 @@ GQueue processingModules= G_QUEUE_INIT; GQueue matchingModules= G_QUEUE_INIT; GQueue analysisModules= G_QUEUE_INIT; +GQueue reductionModules= G_QUEUE_INIT; GQueue moduleOptions= G_QUEUE_INIT; +/* + * Call the statistics function of each module of a sync chain + * + * Args: + * syncState: Container for synchronization data + */ +void printStats(SyncState* const syncState) +{ + if (syncState->processingModule->printProcessingStats != NULL) + { + syncState->processingModule->printProcessingStats(syncState); + } + if (syncState->matchingModule != NULL && + syncState->matchingModule->printMatchingStats != NULL) + { + syncState->matchingModule->printMatchingStats(syncState); + } + if (syncState->analysisModule != NULL && + syncState->analysisModule->printAnalysisStats != NULL) + { + syncState->analysisModule->printAnalysisStats(syncState); + } + if (syncState->reductionModule != NULL && + syncState->reductionModule->printReductionStats != NULL) + { + syncState->reductionModule->printReductionStats(syncState); + } +} + + /* * Calculate the elapsed time between two timeval values * @@ -121,3 +153,58 @@ gint gcfCompareAnalysis(gconstpointer a, gconstpointer b) return strncmp(analysisModule->name, name, strlen(analysisModule->name) + 1); } + + +/* + * A GCompareFunc for g_slist_find_custom() + * + * Args: + * a: ReductionModule*, element's data + * b: char*, user data to compare against + * + * Returns: + * 0 if the reduction module a's name is b + */ +gint gcfCompareReduction(gconstpointer a, gconstpointer b) +{ + const ReductionModule* reductionModule; + const char* name; + + reductionModule= (const ReductionModule*) a; + name= (const char*) b; + + return strncmp(reductionModule->name, name, strlen(reductionModule->name) + + 1); +} + + +/* + * A GFunc for g_queue_foreach() + * + * Concatenate analysis module names. + * + * Args: + * data: AnalysisModule* + * user_data: GString*, concatenated names + */ +void gfAppendAnalysisName(gpointer data, gpointer user_data) +{ + g_string_append((GString*) user_data, ((AnalysisModule*) data)->name); + g_string_append((GString*) user_data, ", "); +} + + +/* + * A GFunc for g_queue_foreach() + * + * Concatenate reduction module names. + * + * Args: + * data: ReductionModule* + * user_data: GString*, concatenated names + */ +void gfAppendReductionName(gpointer data, gpointer user_data) +{ + g_string_append((GString*) user_data, ((ReductionModule*) data)->name); + g_string_append((GString*) user_data, ", "); +}