diff options
Diffstat (limited to 'base/stats')
-rw-r--r-- | base/stats/events.cc | 169 | ||||
-rw-r--r-- | base/stats/events.hh | 66 | ||||
-rw-r--r-- | base/stats/flags.hh | 73 | ||||
-rw-r--r-- | base/stats/mysql.cc | 900 | ||||
-rw-r--r-- | base/stats/mysql.hh | 155 | ||||
-rw-r--r-- | base/stats/mysql_run.hh | 65 | ||||
-rw-r--r-- | base/stats/output.hh | 47 | ||||
-rw-r--r-- | base/stats/statdb.cc | 93 | ||||
-rw-r--r-- | base/stats/statdb.hh | 74 | ||||
-rw-r--r-- | base/stats/text.cc | 736 | ||||
-rw-r--r-- | base/stats/text.hh | 77 | ||||
-rw-r--r-- | base/stats/types.hh | 49 | ||||
-rw-r--r-- | base/stats/visit.cc | 41 | ||||
-rw-r--r-- | base/stats/visit.hh | 63 |
14 files changed, 0 insertions, 2608 deletions
diff --git a/base/stats/events.cc b/base/stats/events.cc deleted file mode 100644 index 3191aec13..000000000 --- a/base/stats/events.cc +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <vector> - -#include "base/stats/events.hh" - -#if USE_MYSQL -#include "base/cprintf.hh" -#include "base/misc.hh" -#include "base/mysql.hh" -#include "base/stats/mysql.hh" -#include "base/stats/mysql_run.hh" -#include "base/str.hh" -#endif - -#include "base/match.hh" -#include "sim/host.hh" -#include "sim/sim_object.hh" -#include "sim/root.hh" - -using namespace std; - -namespace Stats { - -Tick EventStart = ULL(0x7fffffffffffffff); - -ObjectMatch event_ignore; - -#if USE_MYSQL -class InsertEvent -{ - private: - char *query; - int size; - bool first; - static const int maxsize = 1024*1024; - - typedef map<string, uint32_t> event_map_t; - event_map_t events; - - MySQL::Connection &mysql; - uint16_t run; - - public: - InsertEvent() - : mysql(MySqlDB.conn()), run(MySqlDB.run()) - { - query = new char[maxsize + 1]; - size = 0; - first = true; - flush(); - } - ~InsertEvent() - { - flush(); - } - - void flush(); - void insert(const string &stat); -}; - -void -InsertEvent::insert(const string &stat) -{ - assert(mysql.connected()); - - event_map_t::iterator i = events.find(stat); - uint32_t event; - if (i == events.end()) { - mysql.query( - csprintf("SELECT en_id " - "from event_names " - "where en_name=\"%s\"", - stat)); - - MySQL::Result result = mysql.store_result(); - if (!result) - panic("could not get a run\n%s\n", mysql.error); - - assert(result.num_fields() == 1); - MySQL::Row row = result.fetch_row(); - if (row) { - if (!to_number(row[0], event)) - panic("invalid event id: %s\n", row[0]); - } else { - mysql.query( - csprintf("INSERT INTO " - "event_names(en_name)" - "values(\"%s\")", - stat)); - - if (mysql.error) - panic("could not get a run\n%s\n", mysql.error); - - event = mysql.insert_id(); - } - } else { - event = (*i).second; - } - - if (size + 1024 > maxsize) - flush(); - - if (!first) { - query[size++] = ','; - query[size] = '\0'; - } - - first = false; - - size += sprintf(query + size, "(%u,%u,%llu)", - event, run, (unsigned long long)curTick); -} - -void -InsertEvent::flush() -{ - static const char query_header[] = "INSERT INTO " - "events(ev_event, ev_run, ev_tick)" - "values"; - - if (size) { - MySQL::Connection &mysql = MySqlDB.conn(); - assert(mysql.connected()); - mysql.query(query); - } - - query[0] = '\0'; - size = sizeof(query_header); - first = true; - memcpy(query, query_header, size); -} - -void -__event(const string &stat) -{ - static InsertEvent event; - event.insert(stat); -} - -#endif - -/* namespace Stats */ } diff --git a/base/stats/events.hh b/base/stats/events.hh deleted file mode 100644 index 2a23240b4..000000000 --- a/base/stats/events.hh +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_EVENTS_HH__ -#define __BASE_STATS_EVENTS_HH__ - -#include <string> - -#include "base/trace.hh" -#include "config/use_mysql.hh" - -namespace Stats { - -extern Tick EventStart; - -#if USE_MYSQL -void __event(const std::string &stat); -bool MySqlConnected(); -#endif - -bool ignoreEvent(const std::string &name); - -inline void -recordEvent(const std::string &stat) -{ - if (EventStart > curTick) - return; - - DPRINTF(StatEvents, "Statistics Event: %s\n", stat); - -#if USE_MYSQL - if (!MySqlConnected()) - return; - - __event(stat); -#endif -} - -/* namespace Stats */ } - -#endif // __BASE_STATS_EVENTS_HH__ diff --git a/base/stats/flags.hh b/base/stats/flags.hh deleted file mode 100644 index 00db95bc1..000000000 --- a/base/stats/flags.hh +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_FLAGS_HH__ -#define __BASE_STATS_FLAGS_HH__ -namespace Stats { - -/** - * Define the storage for format flags. - * @todo Can probably shrink this. - */ -typedef u_int32_t StatFlags; - -/** Nothing extra to print. */ -const StatFlags none = 0x00000000; -/** This Stat is Initialized */ -const StatFlags init = 0x00000001; -/** Print this stat. */ -const StatFlags print = 0x00000002; -/** Print the total. */ -const StatFlags total = 0x00000010; -/** Print the percent of the total that this entry represents. */ -const StatFlags pdf = 0x00000020; -/** Print the cumulative percentage of total upto this entry. */ -const StatFlags cdf = 0x00000040; -/** Print the distribution. */ -const StatFlags dist = 0x00000080; -/** Don't print if this is zero. */ -const StatFlags nozero = 0x00000100; -/** Don't print if this is NAN */ -const StatFlags nonan = 0x00000200; -/** Used for SS compatability. */ -const StatFlags __substat = 0x80000000; - -/** Mask of flags that can't be set directly */ -const StatFlags __reserved = init | print | __substat; - -enum DisplayMode -{ - mode_m5, - mode_simplescalar -}; - -extern DisplayMode DefaultMode; - -/* namespace Stats */ } - -#endif // __BASE_STATS_FLAGS_HH__ diff --git a/base/stats/mysql.cc b/base/stats/mysql.cc deleted file mode 100644 index 6d12b4fc1..000000000 --- a/base/stats/mysql.cc +++ /dev/null @@ -1,900 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <cassert> -#include <map> -#include <sstream> -#include <string> -#include <vector> - -#include "base/misc.hh" -#include "base/mysql.hh" -#include "base/statistics.hh" -#include "base/stats/flags.hh" -#include "base/stats/mysql.hh" -#include "base/stats/mysql_run.hh" -#include "base/stats/statdb.hh" -#include "base/stats/types.hh" -#include "base/str.hh" -#include "sim/host.hh" - -using namespace std; - -namespace Stats { - -MySqlRun MySqlDB; - -bool -MySqlConnected() -{ - return MySqlDB.connected(); -} - -void -MySqlRun::connect(const string &host, const string &user, const string &passwd, - const string &db, const string &name, const string &sample, - const string &project) -{ - if (connected()) - panic("can only get one database connection at this time!"); - - mysql.connect(host, user, passwd, db); - if (mysql.error) - panic("could not connect to database server\n%s\n", mysql.error); - - if (mysql.autocommit(false)) - panic("could not set autocommit\n%s\n", mysql.error); - - remove(name); - //cleanup(); - setup(name, sample, user, project); -} - -void -MySqlRun::setup(const string &name, const string &sample, const string &user, - const string &project) -{ - assert(mysql.connected()); - - stringstream insert; - ccprintf(insert, - "INSERT INTO " - "runs(rn_name,rn_sample,rn_user,rn_project,rn_date,rn_expire)" - "values(\"%s\", \"%s\", \"%s\", \"%s\", NOW()," - "DATE_ADD(CURDATE(), INTERVAL 31 DAY))", - name, sample, user, project); - - mysql.query(insert); - if (mysql.error) - panic("could not get a run\n%s\n", mysql.error); - - run_id = mysql.insert_id(); - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); -} - -void -MySqlRun::remove(const string &name) -{ - assert(mysql.connected()); - stringstream sql; - ccprintf(sql, "DELETE FROM runs WHERE rn_name=\"%s\"", name); - mysql.query(sql); - if (mysql.error) - panic("could not delete run\n%s\n", mysql.error); - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); -} - -void -MySqlRun::cleanup() -{ - assert(mysql.connected()); - - mysql.query("DELETE data " - "FROM data " - "LEFT JOIN runs ON dt_run=rn_id " - "WHERE rn_id IS NULL"); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - mysql.query("DELETE formula_ref " - "FROM formula_ref " - "LEFT JOIN runs ON fr_run=rn_id " - "WHERE rn_id IS NULL"); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - mysql.query("DELETE formulas " - "FROM formulas " - "LEFT JOIN formula_ref ON fm_stat=fr_stat " - "WHERE fr_stat IS NULL"); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - mysql.query("DELETE stats " - "FROM stats " - "LEFT JOIN data ON st_id=dt_stat " - "WHERE dt_stat IS NULL"); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - mysql.query("DELETE subdata " - "FROM subdata " - "LEFT JOIN data ON sd_stat=dt_stat " - "WHERE dt_stat IS NULL"); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - mysql.query("DELETE bins " - "FROM bins " - "LEFT JOIN data ON bn_id=dt_bin " - "WHERE dt_bin IS NULL"); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - mysql.query("DELETE events" - "FROM events" - "LEFT JOIN runs ON ev_run=rn_id" - "WHERE rn_id IS NULL"); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - mysql.query("DELETE event_names" - "FROM event_names" - "LEFT JOIN events ON en_id=ev_event" - "WHERE ev_event IS NULL"); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); -} - -void -SetupStat::init() -{ - name = ""; - descr = ""; - type = ""; - print = false; - prereq = 0; - prec = -1; - nozero = false; - nonan = false; - total = false; - pdf = false; - cdf = false; - min = 0; - max = 0; - bktsize = 0; - size = 0; -} - -unsigned -SetupStat::setup() -{ - MySQL::Connection &mysql = MySqlDB.conn(); - - stringstream insert; - ccprintf(insert, - "INSERT INTO " - "stats(st_name, st_descr, st_type, st_print, st_prereq, " - "st_prec, st_nozero, st_nonan, st_total, st_pdf, st_cdf, " - "st_min, st_max, st_bktsize, st_size)" - "values(\"%s\",\"%s\",\"%s\"," - " %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)", - name, descr, type, print, prereq, (int)prec, nozero, nonan, - total, pdf, cdf, - min, max, bktsize, size); - - mysql.query(insert); - if (!mysql.error) { - int id = mysql.insert_id(); - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - return id; - } - - stringstream select; - ccprintf(select, "SELECT * FROM stats WHERE st_name=\"%s\"", name); - - mysql.query(select); - MySQL::Result result = mysql.store_result(); - if (!result) - panic("could not find stat\n%s\n", mysql.error); - - assert(result.num_fields() == 16); - MySQL::Row row = result.fetch_row(); - if (!row) - panic("could not get stat row\n%s\n", mysql.error); - - bool tb; - int8_t ti8; - uint16_t tu16; - int64_t ti64; - uint64_t tu64; - - if (name != (char *)row[1]) - panic("failed stat check on %s:name. %s != %s\n", - name, name, row[1]); - - if (descr != (char *)row[2]) - panic("failed stat check on %s:descr. %s != %s\n", - name, descr, row[2]); - - if (type != (char *)row[3]) - panic("failed stat check on %s:type. %s != %s\n", - name, type, row[3]); - - if (!to_number(row[4], tb) || print != tb) - panic("failed stat check on %s:print. %d != %d\n", - name, print, tb); - - if (!to_number(row[6], ti8) || prec != ti8) - panic("failed stat check on %s:prec. %d != %d\n", - name, prec, ti8); - - if (!to_number(row[7], tb) || nozero != tb) - panic("failed stat check on %s:nozero. %d != %d\n", - name, nozero, tb); - - if (!to_number(row[8], tb) || nonan != tb) - panic("failed stat check on %s:nonan. %d != %d\n", - name, nonan, tb); - - if (!to_number(row[9], tb) || total != tb) - panic("failed stat check on %s:total. %d != %d\n", - name, total, tb); - - if (!to_number(row[10], tb) || pdf != tb) - panic("failed stat check on %s:pdf. %d != %d\n", - name, pdf, tb); - - if (!to_number(row[11], tb) || cdf != tb) - panic("failed stat check on %s:cdf. %d != %d\n", - name, cdf, tb); - - if (!to_number(row[12], ti64) || min != ti64) - panic("failed stat check on %s:min. %d != %d\n", - name, min, ti64); - - if (!to_number(row[13], ti64) || max != ti64) - panic("failed stat check on %s:max. %d != %d\n", - name, max, ti64); - - if (!to_number(row[14], tu64) || bktsize != tu64) - panic("failed stat check on %s:bktsize. %d != %d\n", - name, bktsize, tu64); - - if (!to_number(row[15], tu16) || size != tu16) - panic("failed stat check on %s:size. %d != %d\n", - name, size, tu16); - - to_number(row[5], prereq); - uint16_t statid; - to_number(row[0], statid); - return statid; -} - -unsigned -SetupBin(const string &bin) -{ - static map<string, int> binmap; - - using namespace MySQL; - map<string,int>::const_iterator i = binmap.find(bin); - if (i != binmap.end()) - return (*i).second; - - Connection &mysql = MySqlDB.conn(); - assert(mysql.connected()); - - uint16_t bin_id; - - stringstream select; - stringstream insert; - ccprintf(select, "SELECT bn_id FROM bins WHERE bn_name=\"%s\"", bin); - - mysql.query(select); - MySQL::Result result = mysql.store_result(); - if (result) { - assert(result.num_fields() == 1); - MySQL::Row row = result.fetch_row(); - if (row) { - to_number(row[0], bin_id); - goto exit; - } - } - - ccprintf(insert, "INSERT INTO bins(bn_name) values(\"%s\")", bin); - - mysql.query(insert); - if (mysql.error) - panic("could not get a bin\n%s\n", mysql.error); - - bin_id = mysql.insert_id(); - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - binmap.insert(make_pair(bin, bin_id)); - - exit: - return bin_id; -} - -InsertData::InsertData() -{ - query = new char[maxsize + 1]; - size = 0; - flush(); -} - -InsertData::~InsertData() -{ - delete [] query; -} - -void -InsertData::flush() -{ - if (size) { - MySQL::Connection &mysql = MySqlDB.conn(); - assert(mysql.connected()); - mysql.query(query); - if (mysql.error) - panic("could not insert data\n%s\n", mysql.error); - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - } - - query[0] = '\0'; - size = 0; - first = true; - strcpy(query, "INSERT INTO " - "data(dt_stat,dt_x,dt_y,dt_run,dt_tick,dt_bin,dt_data) " - "values"); - size = strlen(query); -} - -void -InsertData::insert() -{ - if (size + 1024 > maxsize) - flush(); - - if (!first) { - query[size++] = ','; - query[size] = '\0'; - } - - first = false; - - size += sprintf(query + size, "(%u,%d,%d,%u,%llu,%u,\"%f\")", - stat, x, y, MySqlDB.run(), (unsigned long long)tick, - bin, data); -} - -struct InsertSubData -{ - uint16_t stat; - int16_t x; - int16_t y; - string name; - string descr; - - void setup(); -}; - -void -InsertSubData::setup() -{ - MySQL::Connection &mysql = MySqlDB.conn(); - assert(mysql.connected()); - stringstream insert; - ccprintf(insert, - "INSERT INTO subdata(sd_stat,sd_x,sd_y,sd_name,sd_descr) " - "values(%d,%d,%d,\"%s\",\"%s\")", - stat, x, y, name, descr); - - mysql.query(insert); -// if (mysql.error) -// panic("could not insert subdata\n%s\n", mysql.error); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); -} - -void -InsertFormula(uint16_t stat, const string &formula) -{ - MySQL::Connection &mysql = MySqlDB.conn(); - assert(mysql.connected()); - stringstream insert_formula; - ccprintf(insert_formula, - "INSERT INTO formulas(fm_stat,fm_formula) values(%d, \"%s\")", - stat, formula); - - mysql.query(insert_formula); -// if (mysql.error) -// panic("could not insert formula\n%s\n", mysql.error); - - stringstream insert_ref; - ccprintf(insert_ref, - "INSERT INTO formula_ref(fr_stat,fr_run) values(%d, %d)", - stat, MySqlDB.run()); - - mysql.query(insert_ref); -// if (mysql.error) -// panic("could not insert formula reference\n%s\n", mysql.error); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); -} - -void -UpdatePrereq(uint16_t stat, uint16_t prereq) -{ - MySQL::Connection &mysql = MySqlDB.conn(); - assert(mysql.connected()); - stringstream update; - ccprintf(update, "UPDATE stats SET st_prereq=%d WHERE st_id=%d", - prereq, stat); - mysql.query(update); - if (mysql.error) - panic("could not update prereq\n%s\n", mysql.error); - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); -} - -void -MySql::configure() -{ - /* - * set up all stats! - */ - using namespace Database; - - MySQL::Connection &mysql = MySqlDB.conn(); - - stat_list_t::const_iterator i, end = stats().end(); - for (i = stats().begin(); i != end; ++i) { - (*i)->visit(*this); - } - - for (i = stats().begin(); i != end; ++i) { - StatData *data = *i; - if (data->prereq) { - uint16_t stat_id = find(data->id); - uint16_t prereq_id = find(data->prereq->id); - assert(stat_id && prereq_id); - - UpdatePrereq(stat_id, prereq_id); - } - } - - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - - configured = true; -} - - -bool -MySql::configure(const StatData &data, string type) -{ - stat.init(); - stat.name = data.name; - stat.descr = data.desc; - stat.type = type; - stat.print = data.flags & print; - stat.prec = data.precision; - stat.nozero = data.flags & nozero; - stat.nonan = data.flags & nonan; - stat.total = data.flags & total; - stat.pdf = data.flags & pdf; - stat.cdf = data.flags & cdf; - - return stat.print; -} - -void -MySql::configure(const ScalarData &data) -{ - if (!configure(data, "SCALAR")) - return; - - insert(data.id, stat.setup()); -} - -void -MySql::configure(const VectorData &data) -{ - if (!configure(data, "VECTOR")) - return; - - uint16_t statid = stat.setup(); - - if (!data.subnames.empty()) { - InsertSubData subdata; - subdata.stat = statid; - subdata.y = 0; - for (int i = 0; i < data.subnames.size(); ++i) { - subdata.x = i; - subdata.name = data.subnames[i]; - subdata.descr = data.subdescs.empty() ? "" : data.subdescs[i]; - - if (!subdata.name.empty() || !subdata.descr.empty()) - subdata.setup(); - } - } - - insert(data.id, statid); -} - -void -MySql::configure(const DistData &data) -{ - if (!configure(data, "DIST")) - return; - - if (!data.data.fancy) { - stat.size = data.data.size; - stat.min = data.data.min; - stat.max = data.data.max; - stat.bktsize = data.data.bucket_size; - } - insert(data.id, stat.setup()); -} - -void -MySql::configure(const VectorDistData &data) -{ - if (!configure(data, "VECTORDIST")) - return; - - if (!data.data[0].fancy) { - stat.size = data.data[0].size; - stat.min = data.data[0].min; - stat.max = data.data[0].max; - stat.bktsize = data.data[0].bucket_size; - } - - uint16_t statid = stat.setup(); - - if (!data.subnames.empty()) { - InsertSubData subdata; - subdata.stat = statid; - subdata.y = 0; - for (int i = 0; i < data.subnames.size(); ++i) { - subdata.x = i; - subdata.name = data.subnames[i]; - subdata.descr = data.subdescs.empty() ? "" : data.subdescs[i]; - if (!subdata.name.empty() || !subdata.descr.empty()) - subdata.setup(); - } - } - - insert(data.id, statid); -} - -void -MySql::configure(const Vector2dData &data) -{ - if (!configure(data, "VECTOR2D")) - return; - - uint16_t statid = stat.setup(); - - if (!data.subnames.empty()) { - InsertSubData subdata; - subdata.stat = statid; - subdata.y = -1; - for (int i = 0; i < data.subnames.size(); ++i) { - subdata.x = i; - subdata.name = data.subnames[i]; - subdata.descr = data.subdescs.empty() ? "" : data.subdescs[i]; - if (!subdata.name.empty() || !subdata.descr.empty()) - subdata.setup(); - } - } - - if (!data.y_subnames.empty()) { - InsertSubData subdata; - subdata.stat = statid; - subdata.x = -1; - subdata.descr = ""; - for (int i = 0; i < data.y_subnames.size(); ++i) { - subdata.y = i; - subdata.name = data.y_subnames[i]; - if (!subdata.name.empty()) - subdata.setup(); - } - } - - insert(data.id, statid); -} - -void -MySql::configure(const FormulaData &data) -{ - configure(data, "FORMULA"); - insert(data.id, stat.setup()); - InsertFormula(find(data.id), data.str()); -} - -void -MySql::output(MainBin *bin) -{ - MySQL::Connection &mysql = MySqlDB.conn(); - - if (bin) { - bin->activate(); - newdata.bin = SetupBin(bin->name()); - } else { - newdata.bin = 0; - } - - Database::stat_list_t::const_iterator i, end = Database::stats().end(); - for (i = Database::stats().begin(); i != end; ++i) { - StatData *stat = *i; - if (bin && stat->binned() || !bin && !stat->binned()) { - stat->visit(*this); - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - } - } -} - -bool -MySql::valid() const -{ - return MySqlDB.connected(); -} - -void -MySql::output() -{ - using namespace Database; - assert(valid()); - - if (!configured) - configure(); - - // store sample # - newdata.tick = curTick; - - output(NULL); - if (!bins().empty()) { - bin_list_t::iterator i, end = bins().end(); - for (i = bins().begin(); i != end; ++i) - output(*i); - } - - newdata.flush(); -} - -void -MySql::output(const ScalarData &data) -{ - if (!(data.flags & print)) - return; - - newdata.stat = find(data.id); - newdata.x = 0; - newdata.y = 0; - newdata.data = data.value(); - - newdata.insert(); -} - -void -MySql::output(const VectorData &data) -{ - if (!(data.flags & print)) - return; - - newdata.stat = find(data.id); - newdata.y = 0; - - const VCounter &cvec = data.value(); - int size = data.size(); - for (int x = 0; x < size; x++) { - newdata.x = x; - newdata.data = cvec[x]; - newdata.insert(); - } -} - -void -MySql::output(const DistDataData &data) -{ - const int db_sum = -1; - const int db_squares = -2; - const int db_samples = -3; - const int db_min_val = -4; - const int db_max_val = -5; - const int db_underflow = -6; - const int db_overflow = -7; - - newdata.x = db_sum; - newdata.data = data.sum; - newdata.insert(); - - newdata.x = db_squares; - newdata.data = data.squares; - newdata.insert(); - - newdata.x = db_samples; - newdata.data = data.samples; - newdata.insert(); - - if (data.samples && !data.fancy) { - newdata.x = db_min_val; - newdata.data = data.min_val; - newdata.insert(); - - newdata.x = db_max_val; - newdata.data = data.max_val; - newdata.insert(); - - newdata.x = db_underflow; - newdata.data = data.underflow; - newdata.insert(); - - newdata.x = db_overflow; - newdata.data = data.overflow; - newdata.insert(); - - int size = data.cvec.size(); - for (int x = 0; x < size; x++) { - newdata.x = x; - newdata.data = data.cvec[x]; - newdata.insert(); - } - } -} - - -void -MySql::output(const DistData &data) -{ - if (!(data.flags & print)) - return; - - newdata.stat = find(data.id); - newdata.y = 0; - output(data.data); -} - -void -MySql::output(const VectorDistData &data) -{ - if (!(data.flags & print)) - return; - - newdata.stat = find(data.id); - - int size = data.data.size(); - for (int y = 0; y < size; ++y) { - newdata.y = y; - output(data.data[y]); - } -} - -void -MySql::output(const Vector2dData &data) -{ - if (!(data.flags & print)) - return; - - newdata.stat = find(data.id); - - int index = 0; - for (int x = 0; x < data.x; x++) { - newdata.x = x; - for (int y = 0; y < data.y; y++) { - newdata.y = y; - newdata.data = data.cvec[index++]; - newdata.insert(); - } - } -} - -void -MySql::output(const FormulaData &data) -{ -} - -/* - * Implement the visitor - */ -void -MySql::visit(const ScalarData &data) -{ - if (!configured) - configure(data); - else - output(data); -} - -void -MySql::visit(const VectorData &data) -{ - if (!configured) - configure(data); - else - output(data); -} - -void -MySql::visit(const DistData &data) -{ - return; - if (!configured) - configure(data); - else - output(data); -} - -void -MySql::visit(const VectorDistData &data) -{ - return; - if (!configured) - configure(data); - else - output(data); -} - -void -MySql::visit(const Vector2dData &data) -{ - return; - if (!configured) - configure(data); - else - output(data); -} - -void -MySql::visit(const FormulaData &data) -{ - if (!configured) - configure(data); - else - output(data); -} - -/* namespace Stats */ } diff --git a/base/stats/mysql.hh b/base/stats/mysql.hh deleted file mode 100644 index 25ea22b97..000000000 --- a/base/stats/mysql.hh +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_MYSQL_HH__ -#define __BASE_STATS_MYSQL_HH__ - -#include <map> -#include <string> - -#include "base/stats/output.hh" - -namespace MySQL { class Connection; } -namespace Stats { - -class MainBin; -class DistDataData; -class MySqlRun; -bool MySqlConnected(); -extern MySqlRun MySqlDB; - -struct SetupStat -{ - std::string name; - std::string descr; - std::string type; - bool print; - uint16_t prereq; - int8_t prec; - bool nozero; - bool nonan; - bool total; - bool pdf; - bool cdf; - double min; - double max; - double bktsize; - uint16_t size; - - void init(); - unsigned setup(); -}; - -class InsertData -{ - private: - char *query; - int size; - bool first; - static const int maxsize = 1024*1024; - - public: - MySqlRun *run; - - public: - uint64_t tick; - double data; - uint16_t stat; - uint16_t bin; - int16_t x; - int16_t y; - - public: - InsertData(); - ~InsertData(); - - void flush(); - void insert(); -}; - -class MySql : public Output -{ - protected: - SetupStat stat; - InsertData newdata; - std::list<FormulaData *> formulas; - bool configured; - - protected: - std::map<int, int> idmap; - - void insert(int sim_id, int db_id) - { - using namespace std; - idmap.insert(make_pair(sim_id, db_id)); - } - - int find(int sim_id) - { - using namespace std; - map<int,int>::const_iterator i = idmap.find(sim_id); - assert(i != idmap.end()); - return (*i).second; - } - public: - // Implement Visit - virtual void visit(const ScalarData &data); - virtual void visit(const VectorData &data); - virtual void visit(const DistData &data); - virtual void visit(const VectorDistData &data); - virtual void visit(const Vector2dData &data); - virtual void visit(const FormulaData &data); - - // Implement Output - virtual bool valid() const; - virtual void output(); - - protected: - // Output helper - void output(MainBin *bin); - void output(const DistDataData &data); - void output(const ScalarData &data); - void output(const VectorData &data); - void output(const DistData &data); - void output(const VectorDistData &data); - void output(const Vector2dData &data); - void output(const FormulaData &data); - - void configure(); - bool configure(const StatData &data, std::string type); - void configure(const ScalarData &data); - void configure(const VectorData &data); - void configure(const DistData &data); - void configure(const VectorDistData &data); - void configure(const Vector2dData &data); - void configure(const FormulaData &data); -}; - -/* namespace Stats */ } - -#endif // __BASE_STATS_MYSQL_HH__ diff --git a/base/stats/mysql_run.hh b/base/stats/mysql_run.hh deleted file mode 100644 index d8dcb7594..000000000 --- a/base/stats/mysql_run.hh +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_MYSQL_RUN_HH__ -#define __BASE_STATS_MYSQL_RUN_HH__ - -#include <string> - -#include "base/mysql.hh" -#include "sim/host.hh" - -namespace Stats { - -struct MySqlRun -{ - private: - MySQL::Connection mysql; - uint16_t run_id; - - protected: - void setup(const std::string &name, const std::string &sample, - const std::string &user, const std::string &project); - - void remove(const std::string &name); - void cleanup(); - - public: - bool connected() const { return mysql.connected(); } - void connect(const std::string &host, const std::string &user, - const std::string &passwd, const std::string &db, - const std::string &name, const std::string &sample, - const std::string &project); - - MySQL::Connection &conn() { return mysql; } - uint16_t run() const { return run_id; } -}; - -/* namespace Stats */ } - -#endif // __BASE_STATS_MYSQL_RUN_HH__ diff --git a/base/stats/output.hh b/base/stats/output.hh deleted file mode 100644 index ee6b38d63..000000000 --- a/base/stats/output.hh +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_OUTPUT_HH__ -#define __BASE_STATS_OUTPUT_HH__ - -#include <string> - -#include "base/stats/visit.hh" - -namespace Stats { - -struct Output : public Visit -{ - inline void operator()() { output(); } - virtual void output() = 0; - virtual bool valid() const = 0; -}; - -/* namespace Stats */ } - -#endif // __BASE_STATS_OUTPUT_HH__ diff --git a/base/stats/statdb.cc b/base/stats/statdb.cc deleted file mode 100644 index a6b00ab8a..000000000 --- a/base/stats/statdb.cc +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "base/misc.hh" -#include "base/trace.hh" -#include "base/statistics.hh" -#include "base/stats/bin.hh" -#include "base/stats/statdb.hh" - -using namespace std; - -namespace Stats { -namespace Database { - -StatData * -find(void *stat) -{ - stat_map_t::const_iterator i = map().find(stat); - - if (i == map().end()) - return NULL; - - return (*i).second; -} - -void -regBin(MainBin *bin, const std::string &_name) -{ - bin_list_t::iterator i, end = bins().end(); - for (i = bins().begin(); i != end; ++i) - if ((*i)->name() == _name) - panic("re-registering bin %s", _name); - bins().push_back(bin); - DPRINTF(Stats, "registering %s\n", _name); -} - -void -regStat(void *stat, StatData *data) -{ - if (map().find(stat) != map().end()) - panic("shouldn't register stat twice!"); - - stats().push_back(data); - -#ifndef NDEBUG - pair<stat_map_t::iterator, bool> result = -#endif - map().insert(make_pair(stat, data)); - assert(result.second && "this should never fail"); - assert(map().find(stat) != map().end()); -} - -void -regPrint(void *stat) -{ - StatData *data = find(stat); - assert(data); - data->flags |= print; -} - -TheDatabase &db() -{ - static TheDatabase db; - return db; -} - -/* namespace Database */ } -/* namespace Stats */ } diff --git a/base/stats/statdb.hh b/base/stats/statdb.hh deleted file mode 100644 index eb56d8fac..000000000 --- a/base/stats/statdb.hh +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_STATDB_HH__ -#define __BASE_STATS_STATDB_HH__ - -#include <iosfwd> -#include <list> -#include <map> -#include <string> - -class Python; - -namespace Stats { - -class MainBin; -class StatData; - -namespace Database { - -typedef std::map<void *, StatData *> stat_map_t; -typedef std::list<StatData *> stat_list_t; -typedef std::list<MainBin *> bin_list_t; - -// We wrap the database in a struct to make sure it is built in time. -struct TheDatabase -{ - stat_map_t map; - stat_list_t stats; - bin_list_t bins; - -}; - -TheDatabase &db(); -inline stat_map_t &map() { return db().map; } -inline stat_list_t &stats() { return db().stats; } -inline bin_list_t &bins() { return db().bins; } - -StatData *find(void *stat); -void regBin(MainBin *bin, const std::string &name); -void regStat(void *stat, StatData *data); -void regPrint(void *stat); - -inline std::string name() { return "Statistics Database"; } - -/* namespace Database */ } -/* namespace Stats */ } - -#endif // __BASE_STATS_STATDB_HH__ diff --git a/base/stats/text.cc b/base/stats/text.cc deleted file mode 100644 index 300737c60..000000000 --- a/base/stats/text.cc +++ /dev/null @@ -1,736 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#if defined(__APPLE__) -#define _GLIBCPP_USE_C99 1 -#endif - -#include <iostream> -#include <sstream> -#include <fstream> -#include <string> - -#include "base/misc.hh" -#include "base/statistics.hh" -#include "base/stats/statdb.hh" -#include "base/stats/text.hh" -#include "base/stats/visit.hh" - -using namespace std; - -#ifndef NAN -float __nan(); -/** Define Not a number. */ -#define NAN (__nan()) -/** Need to define __nan() */ -#define __M5_NAN -#endif - -#ifdef __M5_NAN -float -__nan() -{ - union { - uint32_t ui; - float f; - } nan; - - nan.ui = 0x7fc00000; - return nan.f; -} -#endif - -namespace Stats { - -Text::Text() - : mystream(false), stream(NULL), compat(false), descriptions(false) -{ -} - -Text::Text(std::ostream &stream) - : mystream(false), stream(NULL), compat(false), descriptions(false) -{ - open(stream); -} - -Text::Text(const std::string &file) - : mystream(false), stream(NULL), compat(false), descriptions(false) -{ - open(file); -} - - -Text::~Text() -{ - if (mystream) { - assert(stream); - delete stream; - } -} - -void -Text::open(std::ostream &_stream) -{ - if (stream) - panic("stream already set!"); - - mystream = false; - stream = &_stream; - assert(valid()); -} - -void -Text::open(const std::string &file) -{ - if (stream) - panic("stream already set!"); - - mystream = true; - stream = new ofstream(file.c_str(), ios::trunc); - assert(valid()); -} - -bool -Text::valid() const -{ - return stream != NULL; -} - -void -Text::output() -{ - using namespace Database; - - ccprintf(*stream, "\n---------- Begin Simulation Statistics ----------\n"); - if (bins().empty() || bins().size() == 1) { - stat_list_t::const_iterator i, end = stats().end(); - for (i = stats().begin(); i != end; ++i) - (*i)->visit(*this); - } else { - ccprintf(*stream, "PRINTING BINNED STATS\n"); - bin_list_t::iterator i, end = bins().end(); - for (i = bins().begin(); i != end; ++i) { - MainBin *bin = *i; - bin->activate(); - ccprintf(*stream,"---%s Bin------------\n", bin->name()); - stat_list_t::const_iterator i, end = stats().end(); - for (i = stats().begin(); i != end; ++i) - (*i)->visit(*this); - ccprintf(*stream, "---------------------------------\n"); - } - } - ccprintf(*stream, "\n---------- End Simulation Statistics ----------\n"); - stream->flush(); -} - -bool -Text::noOutput(const StatData &data) -{ - if (!(data.flags & print)) - return true; - - if (data.prereq && data.prereq->zero()) - return true; - - return false; -} - -string -ValueToString(Result value, int precision, bool compat) -{ - stringstream val; - - if (!isnan(value)) { - if (precision != -1) - val.precision(precision); - else if (value == rint(value)) - val.precision(0); - - val.unsetf(ios::showpoint); - val.setf(ios::fixed); - val << value; - } else { - val << (compat ? "<err: div-0>" : "no value"); - } - - return val.str(); -} - -struct ScalarPrint -{ - Result value; - string name; - string desc; - StatFlags flags; - bool compat; - bool descriptions; - int precision; - Result pdf; - Result cdf; - - void operator()(ostream &stream) const; -}; - -void -ScalarPrint::operator()(ostream &stream) const -{ - if (flags & nozero && value == 0.0 || - flags & nonan && isnan(value)) - return; - - stringstream pdfstr, cdfstr; - - if (!isnan(pdf)) - ccprintf(pdfstr, "%.2f%%", pdf * 100.0); - - if (!isnan(cdf)) - ccprintf(cdfstr, "%.2f%%", cdf * 100.0); - - if (compat && flags & __substat) { - ccprintf(stream, "%32s %12s %10s %10s", name, - ValueToString(value, precision, compat), pdfstr, cdfstr); - } else { - ccprintf(stream, "%-40s %12s %10s %10s", name, - ValueToString(value, precision, compat), pdfstr, cdfstr); - } - - if (descriptions) { - if (!desc.empty()) - ccprintf(stream, " # %s", desc); - } - stream << endl; -} - -struct VectorPrint -{ - string name; - string desc; - vector<string> subnames; - vector<string> subdescs; - StatFlags flags; - bool compat; - bool descriptions; - int precision; - VResult vec; - Result total; - - void operator()(ostream &stream) const; -}; - -void -VectorPrint::operator()(std::ostream &stream) const -{ - int _size = vec.size(); - Result _total = 0.0; - - if (flags & (pdf | cdf)) { - for (int i = 0; i < _size; ++i) { - _total += vec[i]; - } - } - - string base = name + (compat ? "_" : "::"); - - ScalarPrint print; - print.name = name; - print.desc = desc; - print.precision = precision; - print.descriptions = descriptions; - print.flags = flags; - print.pdf = NAN; - print.cdf = NAN; - - bool havesub = !subnames.empty(); - - if (_size == 1) { - print.value = vec[0]; - print(stream); - } else if (!compat) { - for (int i = 0; i < _size; ++i) { - if (havesub && (i >= subnames.size() || subnames[i].empty())) - continue; - - print.name = base + (havesub ? subnames[i] : to_string(i)); - print.desc = subdescs.empty() ? desc : subdescs[i]; - print.value = vec[i]; - - if (_total && (flags & pdf)) { - print.pdf = vec[i] / _total; - print.cdf += print.pdf; - } - - print(stream); - } - - if (flags & ::Stats::total) { - print.name = base + "total"; - print.desc = desc; - print.value = total; - print(stream); - } - } else { - if (flags & ::Stats::total) { - print.value = total; - print(stream); - } - - Result _pdf = 0.0; - Result _cdf = 0.0; - if (flags & dist) { - ccprintf(stream, "%s.start_dist\n", name); - for (int i = 0; i < _size; ++i) { - print.name = havesub ? subnames[i] : to_string(i); - print.desc = subdescs.empty() ? desc : subdescs[i]; - print.flags |= __substat; - print.value = vec[i]; - - if (_total) { - _pdf = vec[i] / _total; - _cdf += _pdf; - } - - if (flags & pdf) - print.pdf = _pdf; - if (flags & cdf) - print.cdf = _cdf; - - print(stream); - } - ccprintf(stream, "%s.end_dist\n", name); - } else { - for (int i = 0; i < _size; ++i) { - if (havesub && subnames[i].empty()) - continue; - - print.name = base; - print.name += havesub ? subnames[i] : to_string(i); - print.desc = subdescs.empty() ? desc : subdescs[i]; - print.value = vec[i]; - - if (_total) { - _pdf = vec[i] / _total; - _cdf += _pdf; - } else { - _pdf = _cdf = NAN; - } - - if (flags & pdf) { - print.pdf = _pdf; - print.cdf = _cdf; - } - - print(stream); - } - } - } -} - -struct DistPrint -{ - string name; - string desc; - StatFlags flags; - bool compat; - bool descriptions; - int precision; - - Result min_val; - Result max_val; - Result underflow; - Result overflow; - VResult vec; - Result sum; - Result squares; - Result samples; - - Counter min; - Counter max; - Counter bucket_size; - int size; - bool fancy; - - void operator()(ostream &stream) const; -}; - -void -DistPrint::operator()(ostream &stream) const -{ - if (fancy) { - ScalarPrint print; - string base = name + (compat ? "_" : "::"); - - print.precision = precision; - print.flags = flags; - print.compat = compat; - print.descriptions = descriptions; - print.desc = desc; - print.pdf = NAN; - print.cdf = NAN; - - print.name = base + "mean"; - print.value = samples ? sum / samples : NAN; - print(stream); - - print.name = base + "stdev"; - print.value = samples ? sqrt((samples * squares - sum * sum) / - (samples * (samples - 1.0))) : NAN; - print(stream); - - print.name = "**Ignore: " + base + "TOT"; - print.value = samples; - print(stream); - return; - } - - assert(size == vec.size()); - - Result total = 0.0; - - total += underflow; - for (int i = 0; i < size; ++i) - total += vec[i]; - total += overflow; - - string base = name + (compat ? "." : "::"); - - ScalarPrint print; - print.desc = compat ? "" : desc; - print.flags = flags; - print.compat = compat; - print.descriptions = descriptions; - print.precision = precision; - print.pdf = NAN; - print.cdf = NAN; - - if (compat) { - ccprintf(stream, "%-42s", base + "start_dist"); - if (descriptions && !desc.empty()) - ccprintf(stream, " # %s", desc); - stream << endl; - } - - print.name = base + "samples"; - print.value = samples; - print(stream); - - print.name = base + "min_value"; - print.value = min_val; - print(stream); - - if (!compat || underflow > 0.0) { - print.name = base + "underflows"; - print.value = underflow; - if (!compat && total) { - print.pdf = underflow / total; - print.cdf += print.pdf; - } - print(stream); - } - - - if (!compat) { - for (int i = 0; i < size; ++i) { - stringstream namestr; - namestr << name; - - Counter low = i * bucket_size + min; - Counter high = ::min(low + bucket_size, max); - namestr << low; - if (low < high) - namestr << "-" << high; - - print.name = namestr.str(); - print.value = vec[i]; - if (total) { - print.pdf = vec[i] / total; - print.cdf += print.pdf; - } - print(stream); - } - - } else { - Counter _min; - Result _pdf; - Result _cdf = 0.0; - - print.flags = flags | __substat; - - for (int i = 0; i < size; ++i) { - if (flags & nozero && vec[i] == 0.0 || - flags & nonan && isnan(vec[i])) - continue; - - _min = i * bucket_size + min; - _pdf = vec[i] / total * 100.0; - _cdf += _pdf; - - - print.name = ValueToString(_min, 0, compat); - print.value = vec[i]; - print.pdf = (flags & pdf) ? _pdf : NAN; - print.cdf = (flags & cdf) ? _cdf : NAN; - print(stream); - } - - print.flags = flags; - } - - if (!compat || overflow > 0.0) { - print.name = base + "overflows"; - print.value = overflow; - if (!compat && total) { - print.pdf = overflow / total; - print.cdf += print.pdf; - } else { - print.pdf = NAN; - print.cdf = NAN; - } - print(stream); - } - - print.pdf = NAN; - print.cdf = NAN; - - if (!compat) { - print.name = base + "total"; - print.value = total; - print(stream); - } - - print.name = base + "max_value"; - print.value = max_val; - print(stream); - - if (!compat && samples != 0) { - print.name = base + "mean"; - print.value = sum / samples; - print(stream); - - print.name = base + "stdev"; - print.value = sqrt((samples * squares - sum * sum) / - (samples * (samples - 1.0))); - print(stream); - } - - if (compat) - ccprintf(stream, "%send_dist\n\n", base); -} - -void -Text::visit(const ScalarData &data) -{ - if (noOutput(data)) - return; - - ScalarPrint print; - print.value = data.result(); - print.name = data.name; - print.desc = data.desc; - print.flags = data.flags; - print.compat = compat; - print.descriptions = descriptions; - print.precision = data.precision; - print.pdf = NAN; - print.cdf = NAN; - - print(*stream); -} - -void -Text::visit(const VectorData &data) -{ - if (noOutput(data)) - return; - - int size = data.size(); - VectorPrint print; - - print.name = data.name; - print.desc = data.desc; - print.flags = data.flags; - print.compat = compat; - print.descriptions = descriptions; - print.precision = data.precision; - print.vec = data.result(); - print.total = data.total(); - - if (!data.subnames.empty()) { - for (int i = 0; i < size; ++i) { - if (!data.subnames[i].empty()) { - print.subnames = data.subnames; - print.subnames.resize(size); - for (int i = 0; i < size; ++i) { - if (!data.subnames[i].empty() && - !data.subdescs[i].empty()) { - print.subdescs = data.subdescs; - print.subdescs.resize(size); - break; - } - } - break; - } - } - } - - print(*stream); -} - -void -Text::visit(const Vector2dData &data) -{ - if (noOutput(data)) - return; - - bool havesub = false; - VectorPrint print; - - print.subnames = data.y_subnames; - print.flags = data.flags; - print.compat = compat; - print.descriptions = descriptions; - print.precision = data.precision; - - if (!data.subnames.empty()) { - for (int i = 0; i < data.x; ++i) - if (!data.subnames[i].empty()) - havesub = true; - } - - VResult tot_vec(data.y); - Result super_total = 0.0; - for (int i = 0; i < data.x; ++i) { - if (havesub && (i >= data.subnames.size() || data.subnames[i].empty())) - continue; - - int iy = i * data.y; - VResult yvec(data.y); - - Result total = 0.0; - for (int j = 0; j < data.y; ++j) { - yvec[j] = data.cvec[iy + j]; - tot_vec[j] += yvec[j]; - total += yvec[j]; - super_total += yvec[j]; - } - - print.name = data.name + "_" + (havesub ? data.subnames[i] : to_string(i)); - print.desc = data.desc; - print.vec = yvec; - print.total = total; - print(*stream); - } - - if ((data.flags & ::Stats::total) && (data.x > 1)) { - print.name = data.name; - print.desc = data.desc; - print.vec = tot_vec; - print.total = super_total; - print(*stream); - } -} - -void -Text::visit(const DistData &data) -{ - if (noOutput(data)) - return; - - DistPrint print; - - print.name = data.name; - print.desc = data.desc; - print.flags = data.flags; - print.compat = compat; - print.descriptions = descriptions; - print.precision = data.precision; - - print.min_val = data.data.min_val; - print.max_val = data.data.max_val; - print.underflow = data.data.underflow; - print.overflow = data.data.overflow; - print.vec.resize(data.data.cvec.size()); - for (int i = 0; i < print.vec.size(); ++i) - print.vec[i] = (Result)data.data.cvec[i]; - print.sum = data.data.sum; - print.squares = data.data.squares; - print.samples = data.data.samples; - - print.min = data.data.min; - print.max = data.data.max; - print.bucket_size = data.data.bucket_size; - print.size = data.data.size; - print.fancy = data.data.fancy; - - print(*stream); -} - -void -Text::visit(const VectorDistData &data) -{ - if (noOutput(data)) - return; - - for (int i = 0; i < data.size(); ++i) { - DistPrint print; - - print.name = data.name + - (data.subnames[i].empty() ? ("_" + to_string(i)) : data.subnames[i]); - print.desc = data.subdescs[i].empty() ? data.desc : data.subdescs[i]; - print.flags = data.flags; - print.compat = compat; - print.descriptions = descriptions; - print.precision = data.precision; - - print.min_val = data.data[i].min_val; - print.max_val = data.data[i].max_val; - print.underflow = data.data[i].underflow; - print.overflow = data.data[i].overflow; - print.vec.resize(data.data[i].cvec.size()); - for (int j = 0; j < print.vec.size(); ++j) - print.vec[j] = (Result)data.data[i].cvec[j]; - print.sum = data.data[i].sum; - print.squares = data.data[i].squares; - print.samples = data.data[i].samples; - - print.min = data.data[i].min; - print.max = data.data[i].max; - print.bucket_size = data.data[i].bucket_size; - print.size = data.data[i].size; - print.fancy = data.data[i].fancy; - - print(*stream); - } -} - -void -Text::visit(const FormulaData &data) -{ - visit((const VectorData &)data); -} - -/* namespace Stats */ } diff --git a/base/stats/text.hh b/base/stats/text.hh deleted file mode 100644 index 125cb79fa..000000000 --- a/base/stats/text.hh +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_TEXT_HH__ -#define __BASE_STATS_TEXT_HH__ - -#include <iosfwd> -#include <string> - -#include "base/stats/output.hh" - -namespace Stats { - -class Text : public Output -{ - protected: - bool mystream; - std::ostream *stream; - - protected: - bool noOutput(const StatData &data); - void binout(); - - public: - bool compat; - bool descriptions; - - public: - Text(); - Text(std::ostream &stream); - Text(const std::string &file); - ~Text(); - - void open(std::ostream &stream); - void open(const std::string &file); - - // Implement Visit - virtual void visit(const ScalarData &data); - virtual void visit(const VectorData &data); - virtual void visit(const DistData &data); - virtual void visit(const VectorDistData &data); - virtual void visit(const Vector2dData &data); - virtual void visit(const FormulaData &data); - - // Implement Output - virtual bool valid() const; - virtual void output(); -}; - -/* namespace Stats */ } - -#endif // __BASE_STATS_TEXT_HH__ diff --git a/base/stats/types.hh b/base/stats/types.hh deleted file mode 100644 index 57f1564a5..000000000 --- a/base/stats/types.hh +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_TYPES_HH__ -#define __BASE_STATS_TYPES_HH__ - -#include <vector> -#include "sim/host.hh" - -namespace Stats { - -/** All counters are of 64-bit values. */ -typedef double Counter; -/** vector of counters. */ -typedef std::vector<Counter> VCounter; - -/** All results are doubles. */ -typedef double Result; -/** vector of results. */ -typedef std::vector<Result> VResult; - -/* namespace Stats */ } - -#endif // __BASE_STATS_TYPES_HH__ diff --git a/base/stats/visit.cc b/base/stats/visit.cc deleted file mode 100644 index dd4d49502..000000000 --- a/base/stats/visit.cc +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "base/stats/visit.hh" - -namespace Stats { -namespace Detail { - -Visit::Visit() -{} - -Visit::~Visit() -{} - -/* namespace Detail */ } -/* namespace Stats */ } diff --git a/base/stats/visit.hh b/base/stats/visit.hh deleted file mode 100644 index c0593c670..000000000 --- a/base/stats/visit.hh +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BASE_STATS_VISIT_HH__ -#define __BASE_STATS_VISIT_HH__ - -#include <string> - -#include "base/time.hh" -#include "sim/host.hh" - -namespace Stats { - -class StatData; -class ScalarData; -class VectorData; -class DistDataData; -class DistData; -class VectorDistData; -class Vector2dData; -class FormulaData; - -struct Visit -{ - Visit(); - virtual ~Visit(); - - virtual void visit(const ScalarData &data) = 0; - virtual void visit(const VectorData &data) = 0; - virtual void visit(const DistData &data) = 0; - virtual void visit(const VectorDistData &data) = 0; - virtual void visit(const Vector2dData &data) = 0; - virtual void visit(const FormulaData &data) = 0; -}; - -/* namespace Stats */ } - -#endif // __BASE_STATS_VISIT_HH__ |