/* 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/>.
*/
#ifdef HAVE_CONFIG_H
#endif
#include <errno.h>
+#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "event_analysis.h"
-#include "sync_chain_lttv.h"
+#include "sync_chain.h"
#include "event_matching_tcp.h"
-#ifndef g_info
-#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format)
-#endif
-
-
// Functions common to all matching modules
static void initMatchingTCP(SyncState* const syncState);
static void destroyMatchingTCP(SyncState* const syncState);
static void matchEventTCP(SyncState* const syncState, Event* const event);
-static GArray* finalizeMatchingTCP(SyncState* const syncState);
+static AllFactors* finalizeMatchingTCP(SyncState* const syncState);
static void printMatchingStatsTCP(SyncState* const syncState);
-static void writeMatchingGraphsPlotsTCP(FILE* stream, SyncState* const
- syncState, const unsigned int i, const unsigned int j);
-static void writeMatchingGraphsOptionsTCP(FILE* stream, SyncState* const
- syncState, const unsigned int i, const unsigned int j);
+static void writeMatchingGraphsPlotsTCPMessages(SyncState* const syncState,
+ const unsigned int i, const unsigned int j);
// Functions specific to this module
-static void registerMatchingTCP() __attribute__((constructor (101)));
-
static void matchEvents(SyncState* const syncState, Event* const event,
GHashTable* const unMatchedList, GHashTable* const
unMatchedOppositeList, const size_t fieldOffset, const size_t
.matchEvent= &matchEventTCP,
.finalizeMatching= &finalizeMatchingTCP,
.printMatchingStats= &printMatchingStatsTCP,
- .writeMatchingGraphsPlots= &writeMatchingGraphsPlotsTCP,
- .writeMatchingGraphsOptions= &writeMatchingGraphsOptionsTCP,
+ .graphFunctions= {
+ .writeTraceTraceForePlots= &writeMatchingGraphsPlotsTCPMessages,
+ }
};
/*
* Matching module registering function
*/
-static void registerMatchingTCP()
+void registerMatchingTCP()
{
g_queue_push_tail(&matchingModules, &matchingModuleTCP);
}
matchingData->stats= NULL;
}
- if (syncState->graphs)
+ if (syncState->graphsStream)
{
openGraphDataFiles(syncState);
}
g_hash_table_destroy(matchingData->unMatchedOutE);
g_hash_table_destroy(matchingData->unAcked);
- if (syncState->graphs && matchingData->messagePoints)
+ if (syncState->graphsStream && matchingData->messagePoints)
{
closeGraphDataFiles(syncState);
}
/*
- * Call the partial matching destroyer and Obtain the factors from downstream
+ * Call the partial matching destroyer and obtain the factors from downstream
*
* Args:
* syncState container for synchronization data.
*
* Returns:
- * Factors[traceNb] synchronization factors for each trace
+ * AllFactors* synchronization factors for each trace pair
*/
-static GArray* finalizeMatchingTCP(SyncState* const syncState)
+static AllFactors* finalizeMatchingTCP(SyncState* const syncState)
{
partialDestroyMatchingTCP(syncState);
/*
- * Print statistics related to matching and downstream modules. Must be
- * called after finalizeMatching.
+ * Print statistics related to matching. Must be called after
+ * finalizeMatching.
*
* Args:
* syncState container for synchronization data.
printf("\ttotal synchronization exchanges: %u\n",
matchingData->stats->totExchangeSync);
}
-
- if (syncState->analysisModule->printAnalysisStats != NULL)
- {
- syncState->analysisModule->printAnalysisStats(syncState);
- }
}
return;
}
- if (syncState->graphs)
+ if (syncState->graphsStream)
{
writeMessagePoint(matchingData->messagePoints[packet->inE->traceNum][packet->outE->traceNum],
packet);
matchingData= (MatchingDataTCP*) syncState->matchingData;
- cwd= changeToGraphDir(syncState->graphs);
+ cwd= changeToGraphsDir(syncState->graphsDir);
matchingData->messagePoints= malloc(syncState->traceNb * sizeof(FILE**));
for (i= 0; i < syncState->traceNb; i++)
if ((matchingData->messagePoints[i][j]= 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);
}
*
* Args:
* stream: FILE*, file pointer where to write the point
- * message: message for which to write the point
+ * message: message for which to write the point
*/
static void writeMessagePoint(FILE* stream, const Message* const message)
{
- LttCycleCount x, y;
+ uint64_t x, y;
if (message->inE->traceNum < message->outE->traceNum)
{
// CA is inE->traceNum
- x= message->inE->time;
- y= message->outE->time;
+ x= message->inE->cpuTime;
+ y= message->outE->cpuTime;
}
else
{
// CA is outE->traceNum
- x= message->outE->time;
- y= message->inE->time;
+ x= message->outE->cpuTime;
+ y= message->inE->cpuTime;
}
- fprintf(stream, "%20llu %20llu\n", x, y);
+ fprintf(stream, "%20" PRIu64 " %20" PRIu64 "\n", x, y);
}
retval= fclose(matchingData->messagePoints[i][j]);
if (retval != 0)
{
- g_error(strerror(errno));
+ g_error("%s", strerror(errno));
}
}
}
/*
- * Write the matching-specific graph lines in the gnuplot script. Call the
- * downstream module's graph function.
+ * Write the matching-specific graph lines in the gnuplot script.
*
* Args:
- * stream: stream where to write the data
* syncState: container for synchronization data
* i: first trace number
* j: second trace number, garanteed to be larger than i
*/
-static void writeMatchingGraphsPlotsTCP(FILE* stream, SyncState* const
- syncState, const unsigned int i, const unsigned int j)
+static void writeMatchingGraphsPlotsTCPMessages(SyncState* const syncState,
+ const unsigned int i, const unsigned int j)
{
- fprintf(stream,
+ fprintf(syncState->graphsStream,
"\t\"matching_tcp-%1$03d_to_%2$03d.data\" "
"title \"Sent messages\" with points linetype 4 "
"linecolor rgb \"#98fc66\" pointtype 9 pointsize 2, \\\n"
"\t\"matching_tcp-%2$03d_to_%1$03d.data\" "
"title \"Received messages\" with points linetype 4 "
"linecolor rgb \"#6699cc\" pointtype 11 pointsize 2, \\\n", i, j);
-
- if (syncState->analysisModule->writeAnalysisGraphsPlots != NULL)
- {
- syncState->analysisModule->writeAnalysisGraphsPlots(stream, syncState,
- i, j);
- }
-}
-
-
-/*
- * Write the matching-specific options in the gnuplot script (none). Call the
- * downstream module's options function.
- *
- * Args:
- * stream: stream where to write the data
- * syncState: container for synchronization data
- * i: first trace number
- * j: second trace number, garanteed to be larger than i
- */
-static void writeMatchingGraphsOptionsTCP(FILE* stream, SyncState* const
- syncState, const unsigned int i, const unsigned int j)
-{
- if (syncState->analysisModule->writeAnalysisGraphsOptions != NULL)
- {
- syncState->analysisModule->writeAnalysisGraphsOptions(stream,
- syncState, i, j);
- }
}