Replace curTick global variable with accessor functions.
[gem5.git] / src / base / stats / mysql.cc
index 2f096765fea5f4b5d5a1cfa3c2d2b33e95e03379..d257de7434aba62a13584824a67016ac2d1d274b 100644 (file)
@@ -29,6 +29,7 @@
  */
 
 #include <cassert>
+#include <cstdio>
 #include <map>
 #include <sstream>
 #include <string>
 #include "base/misc.hh"
 #include "base/mysql.hh"
 #include "base/statistics.hh"
-#include "base/stats/flags.hh"
+#include "base/stats/info.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 "base/types.hh"
 #include "base/userinfo.hh"
-#include "sim/host.hh"
 
 using namespace std;
 
@@ -150,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
@@ -347,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;
@@ -465,7 +362,7 @@ InsertSubData::setup(MySqlRun *run)
 }
 
 MySql::MySql()
-    : run(new MySqlRun), newdata(run), newevent(run)
+    : run(new MySqlRun), newdata(run)
 {}
 
 MySql::~MySql()
@@ -493,16 +390,14 @@ MySql::configure()
     /*
      * set up all stats!
      */
-    using namespace Database;
-
     MySQL::Connection &mysql = run->conn();
 
-    stat_list_t::const_iterator i, end = stats().end();
-    for (i = stats().begin(); i != end; ++i) {
+    list<Info *>::const_iterator i, end = statsList().end();
+    for (i = statsList().begin(); i != end; ++i) {
         (*i)->visit(*this);
     }
 
-    for (i = stats().begin(); i != end; ++i) {
+    for (i = statsList().begin(); i != end; ++i) {
         Info *info = *i;
         if (info->prereq) {
             // update the prerequisite
@@ -535,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;
@@ -547,7 +442,7 @@ MySql::configure(const Info &info, string type)
 }
 
 void
-MySql::configure(const ScalarInfoBase &info)
+MySql::configure(const ScalarInfo &info)
 {
     if (!configure(info, "SCALAR"))
         return;
@@ -556,7 +451,7 @@ MySql::configure(const ScalarInfoBase &info)
 }
 
 void
-MySql::configure(const VectorInfoBase &info)
+MySql::configure(const VectorInfo &info)
 {
     if (!configure(info, "VECTOR"))
         return;
@@ -581,31 +476,37 @@ MySql::configure(const VectorInfoBase &info)
 }
 
 void
-MySql::configure(const DistInfoBase &info)
+MySql::configure(const DistInfo &info)
 {
     if (!configure(info, "DIST"))
         return;
 
-    if (!info.data.fancy) {
-        stat.size = info.data.size;
-        stat.min = info.data.min;
-        stat.max = info.data.max;
-        stat.bktsize = info.data.bucket_size;
+    const DistStor::Params *params =
+        dynamic_cast<const DistStor::Params *>(info.storageParams);
+    if (params) {
+        assert(params->type == Dist);
+        stat.size = params->buckets;
+        stat.min = params->min;
+        stat.max = params->max;
+        stat.bktsize = params->bucket_size;
     }
     insert(info.id, stat.setup(run));
 }
 
 void
-MySql::configure(const VectorDistInfoBase &info)
+MySql::configure(const VectorDistInfo &info)
 {
     if (!configure(info, "VECTORDIST"))
         return;
 
-    if (!info.data[0].fancy) {
-        stat.size = info.data[0].size;
-        stat.min = info.data[0].min;
-        stat.max = info.data[0].max;
-        stat.bktsize = info.data[0].bucket_size;
+    const DistStor::Params *params =
+        dynamic_cast<const DistStor::Params *>(info.storageParams);
+    if (params) {
+        assert(params->type == Dist);
+        stat.size = params->buckets;
+        stat.min = params->min;
+        stat.max = params->max;
+        stat.bktsize = params->bucket_size;
     }
 
     uint16_t statid = stat.setup(run);
@@ -627,7 +528,7 @@ MySql::configure(const VectorDistInfoBase &info)
 }
 
 void
-MySql::configure(const Vector2dInfoBase &info)
+MySql::configure(const Vector2dInfo &info)
 {
     if (!configure(info, "VECTOR2D"))
         return;
@@ -664,7 +565,7 @@ MySql::configure(const Vector2dInfoBase &info)
 }
 
 void
-MySql::configure(const FormulaInfoBase &info)
+MySql::configure(const FormulaInfo &info)
 {
     MySQL::Connection &mysql = run->conn();
     assert(mysql.connected());
@@ -706,19 +607,18 @@ MySql::valid() const
 void
 MySql::output()
 {
-    using namespace Database;
     assert(valid());
 
     if (!configured)
         configure();
 
     // store sample #
-    newdata.tick = curTick;
+    newdata.tick = curTick();
 
     MySQL::Connection &mysql = run->conn();
 
-    Database::stat_list_t::const_iterator i, end = Database::stats().end();
-    for (i = Database::stats().begin(); i != end; ++i) {
+    list<Info *>::const_iterator i, end = statsList().end();
+    for (i = statsList().begin(); i != end; ++i) {
         Info *stat = *i;
         stat->visit(*this);
         if (mysql.commit())
@@ -729,15 +629,9 @@ MySql::output()
 }
 
 void
-MySql::event(const std::string &event)
-{
-    newevent.insert(event);
-}
-
-void
-MySql::output(const ScalarInfoBase &info)
+MySql::output(const ScalarInfo &info)
 {
-    if (!(info.flags & print))
+    if (!(info.flags & display))
         return;
 
     newdata.stat = find(info.id);
@@ -749,9 +643,9 @@ MySql::output(const ScalarInfoBase &info)
 }
 
 void
-MySql::output(const VectorInfoBase &info)
+MySql::output(const VectorInfo &info)
 {
-    if (!(info.flags & print))
+    if (!(info.flags & display))
         return;
 
     newdata.stat = find(info.id);
@@ -767,7 +661,7 @@ MySql::output(const VectorInfoBase &info)
 }
 
 void
-MySql::output(const DistData &data)
+MySql::output(const DistData &data, const DistParams *params)
 {
     const int db_sum = -1;
     const int db_squares = -2;
@@ -789,7 +683,7 @@ MySql::output(const DistData &data)
     newdata.data = data.samples;
     newdata.insert();
 
-    if (data.samples && !data.fancy) {
+    if (data.samples && params->type == Dist) {
         newdata.x = db_min_val;
         newdata.data = data.min_val;
         newdata.insert();
@@ -816,20 +710,20 @@ MySql::output(const DistData &data)
 }
 
 void
-MySql::output(const DistInfoBase &info)
+MySql::output(const DistInfo &info)
 {
-    if (!(info.flags & print))
+    if (!(info.flags & display))
         return;
 
     newdata.stat = find(info.id);
     newdata.y = 0;
-    output(info.data);
+    output(info.data, safe_cast<const DistParams *>(info.storageParams));
 }
 
 void
-MySql::output(const VectorDistInfoBase &info)
+MySql::output(const VectorDistInfo &info)
 {
-    if (!(info.flags & print))
+    if (!(info.flags & display))
         return;
 
     newdata.stat = find(info.id);
@@ -837,14 +731,15 @@ MySql::output(const VectorDistInfoBase &info)
     size_type size = info.data.size();
     for (off_type y = 0; y < size; ++y) {
         newdata.y = y;
-        output(info.data[y]);
+        output(info.data[y],
+               safe_cast<const DistParams *>(info.storageParams));
     }
 }
 
 void
-MySql::output(const Vector2dInfoBase &info)
+MySql::output(const Vector2dInfo &info)
 {
-    if (!(info.flags & print))
+    if (!(info.flags & display))
         return;
 
     newdata.stat = find(info.id);
@@ -861,7 +756,7 @@ MySql::output(const Vector2dInfoBase &info)
 }
 
 void
-MySql::output(const FormulaInfoBase &info)
+MySql::output(const FormulaInfo &info)
 {
 }
 
@@ -869,7 +764,7 @@ MySql::output(const FormulaInfoBase &info)
  * Implement the visitor
  */
 void
-MySql::visit(const ScalarInfoBase &info)
+MySql::visit(const ScalarInfo &info)
 {
     if (!configured)
         configure(info);
@@ -878,7 +773,7 @@ MySql::visit(const ScalarInfoBase &info)
 }
 
 void
-MySql::visit(const VectorInfoBase &info)
+MySql::visit(const VectorInfo &info)
 {
     if (!configured)
         configure(info);
@@ -887,7 +782,7 @@ MySql::visit(const VectorInfoBase &info)
 }
 
 void
-MySql::visit(const DistInfoBase &info)
+MySql::visit(const DistInfo &info)
 {
     return;
     if (!configured)
@@ -897,7 +792,7 @@ MySql::visit(const DistInfoBase &info)
 }
 
 void
-MySql::visit(const VectorDistInfoBase &info)
+MySql::visit(const VectorDistInfo &info)
 {
     return;
     if (!configured)
@@ -907,7 +802,7 @@ MySql::visit(const VectorDistInfoBase &info)
 }
 
 void
-MySql::visit(const Vector2dInfoBase &info)
+MySql::visit(const Vector2dInfo &info)
 {
     return;
     if (!configured)
@@ -917,7 +812,7 @@ MySql::visit(const Vector2dInfoBase &info)
 }
 
 void
-MySql::visit(const FormulaInfoBase &info)
+MySql::visit(const FormulaInfo &info)
 {
     if (!configured)
         configure(info);
@@ -941,4 +836,4 @@ initMySQL(string host, string user, string password, string database,
     return true;
 }
 
-/* end namespace Stats */ }
+} // namespace Stats