Stats database fixes to avoid naming conflicts in the database
authorNathan Binkert <binkertn@umich.edu>
Fri, 23 Jul 2004 03:59:12 +0000 (23:59 -0400)
committerNathan Binkert <binkertn@umich.edu>
Fri, 23 Jul 2004 03:59:12 +0000 (23:59 -0400)
and to do proper dumping of non-binned stats.

base/stats/mysql.cc:
    have configure return whether or not the stat is a printable
    stat.  This avoids naming problems in the database.
    don't store non printable stats.
    dump non-binned stats into the special bin 0
base/stats/mysql.hh:
    have configure return whether or not the stat is a printable
    stat.  This avoids naming problems in the database.

--HG--
extra : convert_revision : e33b115d605226a838eee2e6489e03b8d77ffc02

base/stats/mysql.cc
base/stats/mysql.hh

index a749b573a62ec0e6d04374205e74a18578a2143b..523494743f7fd6e721430459de2d5a9d6ebe1524 100644 (file)
@@ -486,7 +486,7 @@ MySql::configure()
 }
 
 
-void
+bool
 MySql::configure(const StatData &data, string type)
 {
     stat.init();
@@ -500,19 +500,25 @@ MySql::configure(const StatData &data, string type)
     stat.total = data.flags & total;
     stat.pdf = data.flags & pdf;
     stat.cdf = data.flags & cdf;
+
+    return stat.print;
 }
 
 void
 MySql::configure(const ScalarData &data)
 {
-    configure(data, "SCALAR");
+    if (!configure(data, "SCALAR"))
+        return;
+
     insert(data.id, stat.setup());
 }
 
 void
 MySql::configure(const VectorData &data)
 {
-    configure(data, "VECTOR");
+    if (!configure(data, "VECTOR"))
+        return;
+
     uint16_t statid = stat.setup();
 
     if (!data.subnames.empty()) {
@@ -535,7 +541,9 @@ MySql::configure(const VectorData &data)
 void
 MySql::configure(const DistData &data)
 {
-    configure(data, "DIST");
+    if (!configure(data, "DIST"))
+        return;
+
     if (!data.data.fancy) {
         stat.size = data.data.size;
         stat.min = data.data.min;
@@ -548,7 +556,8 @@ MySql::configure(const DistData &data)
 void
 MySql::configure(const VectorDistData &data)
 {
-    configure(data, "VECTORDIST");
+    if (!configure(data, "VECTORDIST"))
+        return;
 
     if (!data.data[0].fancy) {
         stat.size = data.data[0].size;
@@ -578,7 +587,9 @@ MySql::configure(const VectorDistData &data)
 void
 MySql::configure(const Vector2dData &data)
 {
-    configure(data, "VECTOR2D");
+    if (!configure(data, "VECTOR2D"))
+        return;
+
     uint16_t statid = stat.setup();
 
     if (!data.subnames.empty()) {
@@ -619,14 +630,21 @@ MySql::configure(const FormulaData &data)
 }
 
 void
-MySql::output(const string &bin)
+MySql::output(MainBin *bin)
 {
-    // set up new bin in database if there is a bin name
-    newdata.bin = bin.empty() ? 0 : SetupBin(bin);
+    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)
-        (*i)->visit(*this);
+    for (i = Database::stats().begin(); i != end; ++i) {
+        StatData *stat = *i;
+        if (bin && stat->binned() || !bin && !stat->binned())
+            stat->visit(*this);
+    }
 }
 
 bool
@@ -647,15 +665,11 @@ MySql::output()
     // store sample #
     newdata.tick = curTick;
 
-    if (bins().empty()) {
-        output(string(""));
-    } else {
+    output(NULL);
+    if (!bins().empty()) {
         bin_list_t::iterator i, end = bins().end();
-        for (i = bins().begin(); i != end; ++i) {
-            MainBin *bin = *i;
-            bin->activate();
-            output(bin->name());
-        }
+        for (i = bins().begin(); i != end; ++i)
+            output(*i);
     }
 
     newdata.flush();
@@ -664,6 +678,9 @@ MySql::output()
 void
 MySql::output(const ScalarData &data)
 {
+    if (!(data.flags & print))
+        return;
+
     newdata.stat = find(data.id);
     newdata.x = 0;
     newdata.y = 0;
@@ -675,6 +692,9 @@ MySql::output(const ScalarData &data)
 void
 MySql::output(const VectorData &data)
 {
+    if (!(data.flags & print))
+        return;
+
     newdata.stat = find(data.id);
     newdata.y = 0;
 
@@ -740,6 +760,9 @@ MySql::output(const DistDataData &data)
 void
 MySql::output(const DistData &data)
 {
+    if (!(data.flags & print))
+        return;
+
     newdata.stat = find(data.id);
     newdata.y = 0;
     output(data.data);
@@ -748,6 +771,9 @@ MySql::output(const DistData &data)
 void
 MySql::output(const VectorDistData &data)
 {
+    if (!(data.flags & print))
+        return;
+
     newdata.stat = find(data.id);
 
     int size = data.data.size();
@@ -760,6 +786,9 @@ MySql::output(const VectorDistData &data)
 void
 MySql::output(const Vector2dData &data)
 {
+    if (!(data.flags & print))
+        return;
+
     newdata.stat = find(data.id);
 
     int index = 0;
index fcbe8c5e0f6ae94bbe02a00da6a0b747cf335aab..5b6d8a138e8a4001ef567bb1d5d65a4c05f461d1 100644 (file)
@@ -37,6 +37,7 @@
 namespace MySQL { class Connection; }
 namespace Stats {
 
+class MainBin;
 class DistDataData;
 class MySqlRun;
 bool MySqlConnected();
@@ -130,7 +131,7 @@ class MySql : public Output
 
   protected:
     // Output helper
-    void output(const std::string &bin);
+    void output(MainBin *bin);
     void output(const DistDataData &data);
     void output(const ScalarData &data);
     void output(const VectorData &data);
@@ -140,7 +141,7 @@ class MySql : public Output
     void output(const FormulaData &data);
 
     void configure();
-    void configure(const StatData &data, std::string type);
+    bool configure(const StatData &data, std::string type);
     void configure(const ScalarData &data);
     void configure(const VectorData &data);
     void configure(const DistData &data);