X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fbase%2Fstats%2Fmysql.cc;h=d257de7434aba62a13584824a67016ac2d1d274b;hb=6f1187943cf78c2fd0334bd7e4372ae79a587fa4;hp=9adc071473da7b357a2c7f04e2cc13977a3f6ea9;hpb=aa9b4e6a6809bb1f7551cf9231376e1a7fbb54ad;p=gem5.git diff --git a/src/base/stats/mysql.cc b/src/base/stats/mysql.cc index 9adc07147..d257de743 100644 --- a/src/base/stats/mysql.cc +++ b/src/base/stats/mysql.cc @@ -29,6 +29,7 @@ */ #include +#include #include #include #include @@ -36,13 +37,14 @@ #include "base/misc.hh" #include "base/mysql.hh" +#include "base/statistics.hh" #include "base/stats/info.hh" #include "base/stats/mysql.hh" #include "base/stats/mysql_run.hh" #include "base/stats/types.hh" #include "base/str.hh" +#include "base/types.hh" #include "base/userinfo.hh" -#include "sim/host.hh" using namespace std; @@ -148,22 +150,6 @@ MySqlRun::cleanup() 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 @@ -345,93 +331,6 @@ InsertData::insert() data); } -InsertEvent::InsertEvent(MySqlRun *_run) - : run(_run) -{ - query = new char[maxsize + 1]; - size = 0; - first = true; - flush(); -} - -InsertEvent::~InsertEvent() -{ - flush(); -} - -void -InsertEvent::insert(const string &stat) -{ - MySQL::Connection &mysql = run->conn(); - 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->run(), (unsigned long long)curTick); -} - -void -InsertEvent::flush() -{ - static const char query_header[] = "INSERT INTO " - "events(ev_event, ev_run, ev_tick)" - "values"; - - MySQL::Connection &mysql = run->conn(); - assert(mysql.connected()); - - if (size) - mysql.query(query); - - query[0] = '\0'; - size = sizeof(query_header); - first = true; - memcpy(query, query_header, size); -} - struct InsertSubData { uint16_t stat; @@ -463,7 +362,7 @@ InsertSubData::setup(MySqlRun *run) } MySql::MySql() - : run(new MySqlRun), newdata(run), newevent(run) + : run(new MySqlRun), newdata(run) {} MySql::~MySql() @@ -531,7 +430,7 @@ MySql::configure(const Info &info, string type) stat.name = info.name; stat.descr = info.desc; stat.type = type; - stat.print = info.flags & print; + stat.print = info.flags & display; stat.prec = info.precision; stat.nozero = info.flags & nozero; stat.nonan = info.flags & nonan; @@ -582,9 +481,10 @@ MySql::configure(const DistInfo &info) if (!configure(info, "DIST")) return; - const DistParams *params = - safe_cast(info.storageParams); - if (!params->fancy) { + const DistStor::Params *params = + dynamic_cast(info.storageParams); + if (params) { + assert(params->type == Dist); stat.size = params->buckets; stat.min = params->min; stat.max = params->max; @@ -599,9 +499,10 @@ MySql::configure(const VectorDistInfo &info) if (!configure(info, "VECTORDIST")) return; - const DistParams *params = - safe_cast(info.storageParams); - if (!params->fancy) { + const DistStor::Params *params = + dynamic_cast(info.storageParams); + if (params) { + assert(params->type == Dist); stat.size = params->buckets; stat.min = params->min; stat.max = params->max; @@ -712,7 +613,7 @@ MySql::output() configure(); // store sample # - newdata.tick = curTick; + newdata.tick = curTick(); MySQL::Connection &mysql = run->conn(); @@ -727,16 +628,10 @@ MySql::output() newdata.flush(); } -void -MySql::event(const std::string &event) -{ - newevent.insert(event); -} - void MySql::output(const ScalarInfo &info) { - if (!(info.flags & print)) + if (!(info.flags & display)) return; newdata.stat = find(info.id); @@ -750,7 +645,7 @@ MySql::output(const ScalarInfo &info) void MySql::output(const VectorInfo &info) { - if (!(info.flags & print)) + if (!(info.flags & display)) return; newdata.stat = find(info.id); @@ -788,7 +683,7 @@ MySql::output(const DistData &data, const DistParams *params) newdata.data = data.samples; newdata.insert(); - if (data.samples && !params->fancy) { + if (data.samples && params->type == Dist) { newdata.x = db_min_val; newdata.data = data.min_val; newdata.insert(); @@ -817,7 +712,7 @@ MySql::output(const DistData &data, const DistParams *params) void MySql::output(const DistInfo &info) { - if (!(info.flags & print)) + if (!(info.flags & display)) return; newdata.stat = find(info.id); @@ -828,7 +723,7 @@ MySql::output(const DistInfo &info) void MySql::output(const VectorDistInfo &info) { - if (!(info.flags & print)) + if (!(info.flags & display)) return; newdata.stat = find(info.id); @@ -844,7 +739,7 @@ MySql::output(const VectorDistInfo &info) void MySql::output(const Vector2dInfo &info) { - if (!(info.flags & print)) + if (!(info.flags & display)) return; newdata.stat = find(info.id); @@ -941,4 +836,4 @@ initMySQL(string host, string user, string password, string database, return true; } -/* end namespace Stats */ } +} // namespace Stats