Random cleanup to make things work a bit better
base/statistics.cc:
- give an internal name to statistics that aren't printable
- speed up reset a tad
- Make sure that the original value of the current bin is restored properly
- check for the case where there are no subnames so we don't have an error
- check to make sure that the formula's root is set before accessing it
base/statistics.hh:
- clean up includes a bit
- deal with the case where there are no subnames
- get rid of remnants of FS_MEASURE stuff
--HG--
extra : convert_revision : 1e4338fc2b225647df47641b04c13b7046b2e114
This commit is contained in:
@@ -168,9 +168,18 @@ Data::check()
|
||||
list_t::iterator end = allStats.end();
|
||||
|
||||
while (i != end) {
|
||||
StatData *stat = *i;
|
||||
assert(stat);
|
||||
stat->check();
|
||||
StatData *data = *i;
|
||||
assert(data);
|
||||
data->check();
|
||||
++i;
|
||||
}
|
||||
|
||||
i = allStats.begin();
|
||||
int j = 0;
|
||||
while (i != end) {
|
||||
StatData *data = *i;
|
||||
if (!(data->flags & print))
|
||||
data->name = "__Stat" + to_string(j++);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
@@ -178,16 +187,20 @@ Data::check()
|
||||
void
|
||||
Data::reset()
|
||||
{
|
||||
// reset non-binned stats
|
||||
list_t::iterator i = allStats.begin();
|
||||
list_t::iterator end = allStats.end();
|
||||
while (i != end) {
|
||||
StatData *stat = *i;
|
||||
stat->reset();
|
||||
StatData *data = *i;
|
||||
if (!data->binned())
|
||||
data->reset();
|
||||
++i;
|
||||
}
|
||||
|
||||
// save the bin so we can go back to where we were
|
||||
MainBin *orig = MainBin::curBin();
|
||||
|
||||
// reset binned stats
|
||||
list<MainBin *>::iterator bi = bins.begin();
|
||||
list<MainBin *>::iterator be = bins.end();
|
||||
while (bi != be) {
|
||||
@@ -196,15 +209,16 @@ Data::reset()
|
||||
|
||||
i = allStats.begin();
|
||||
while (i != end) {
|
||||
StatData *stat = *i;
|
||||
stat->reset();
|
||||
StatData *data = *i;
|
||||
if (data->binned())
|
||||
data->reset();
|
||||
++i;
|
||||
}
|
||||
++bi;
|
||||
}
|
||||
|
||||
if (orig)
|
||||
orig->activate();
|
||||
// restore bin
|
||||
MainBin::curBin() = orig;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -751,22 +765,23 @@ VectorDataBase::display(ostream &stream, DisplayMode mode) const
|
||||
print.vec = val();
|
||||
print.total = total();
|
||||
|
||||
for (int i = 0; i < size; ++i) {
|
||||
if (!subnames[i].empty()) {
|
||||
print.subnames = subnames;
|
||||
print.subnames.resize(size);
|
||||
for (int i = 0; i < size; ++i) {
|
||||
if (!subnames[i].empty() && !subdescs[i].empty()) {
|
||||
print.subdescs = subdescs;
|
||||
print.subdescs.resize(size);
|
||||
break;
|
||||
if (!subnames.empty()) {
|
||||
for (int i = 0; i < size; ++i) {
|
||||
if (!subnames[i].empty()) {
|
||||
print.subnames = subnames;
|
||||
print.subnames.resize(size);
|
||||
for (int i = 0; i < size; ++i) {
|
||||
if (!subnames[i].empty() && !subdescs[i].empty()) {
|
||||
print.subdescs = subdescs;
|
||||
print.subdescs.resize(size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
print(stream);
|
||||
}
|
||||
|
||||
@@ -911,7 +926,7 @@ FormulaBase::size() const
|
||||
bool
|
||||
FormulaBase::binned() const
|
||||
{
|
||||
return root->binned();
|
||||
return root && root->binned();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -46,23 +46,20 @@
|
||||
#define __STATISTICS_HH__
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
#include <functional>
|
||||
#include <iosfwd>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "base/cprintf.hh"
|
||||
#include "base/intmath.hh"
|
||||
#include "base/refcnt.hh"
|
||||
#include "base/str.hh"
|
||||
#include "base/intmath.hh"
|
||||
#include <math.h>
|
||||
#include "sim/host.hh"
|
||||
|
||||
#ifdef FS_MEASURE
|
||||
#include "base/trace.hh"
|
||||
#endif
|
||||
//
|
||||
// Un-comment this to enable weirdo-stat debugging
|
||||
//
|
||||
@@ -235,12 +232,14 @@ struct VectorDataBase : public StatData
|
||||
virtual result_t total() const = 0;
|
||||
virtual void update()
|
||||
{
|
||||
int s = size();
|
||||
if (subnames.size() < s)
|
||||
subnames.resize(s);
|
||||
if (!subnames.empty()) {
|
||||
int s = size();
|
||||
if (subnames.size() < s)
|
||||
subnames.resize(s);
|
||||
|
||||
if (subdescs.size() < s)
|
||||
subdescs.resize(s);
|
||||
if (subdescs.size() < s)
|
||||
subdescs.resize(s);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -273,7 +272,6 @@ class VectorData : public VectorDataBase
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct DistDataData
|
||||
{
|
||||
result_t min_val;
|
||||
@@ -2178,9 +2176,6 @@ struct MainBin
|
||||
activate()
|
||||
{
|
||||
setCurBin(this);
|
||||
#ifdef FS_MEASURE
|
||||
DPRINTF(TCPIP, "activating %s Bin\n", name());
|
||||
#endif
|
||||
}
|
||||
|
||||
class BinBase
|
||||
|
||||
Reference in New Issue
Block a user