summaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorDavid Guillen Fandos <david.guillen@arm.com>2016-07-21 17:19:15 +0100
committerDavid Guillen Fandos <david.guillen@arm.com>2016-07-21 17:19:15 +0100
commitd25b58036a040d8ac733b824e2865e1f5fe43e00 (patch)
treeb8b2cd01c429e9c89555f738c14f975dbcc52313 /src/base
parent0020662459fdd9efcfe9864ef12160515434ccdb (diff)
downloadgem5-d25b58036a040d8ac733b824e2865e1f5fe43e00.tar.xz
base: Add total() to Vector2D stat
This patch adds a total() function to the Vector2D stat type. Similar to other stats such as Scalar or Vector it is useful to be able to read the total for a given stat.
Diffstat (limited to 'src/base')
-rw-r--r--src/base/statistics.hh15
-rw-r--r--src/base/stats/info.hh2
-rw-r--r--src/base/stats/text.cc4
3 files changed, 18 insertions, 3 deletions
diff --git a/src/base/statistics.hh b/src/base/statistics.hh
index a21bf81d1..f8e651b97 100644
--- a/src/base/statistics.hh
+++ b/src/base/statistics.hh
@@ -159,6 +159,8 @@ class Vector2dInfoProxy : public InfoProxy<Stat, Vector2dInfo>
{
public:
Vector2dInfoProxy(Stat &stat) : InfoProxy<Stat, Vector2dInfo>(stat) {}
+
+ Result total() const { return this->s.total(); }
};
struct StorageParams
@@ -1298,6 +1300,19 @@ class Vector2dBase : public DataWrapVec2d<Derived, Vector2dInfoProxy>
#endif
}
+ /**
+ * Return a total of all entries in this vector.
+ * @return The total of all vector entries.
+ */
+ Result
+ total() const
+ {
+ Result total = 0.0;
+ for (off_type i = 0; i < size(); ++i)
+ total += data(i)->result();
+ return total;
+ }
+
void
prepare()
{
diff --git a/src/base/stats/info.hh b/src/base/stats/info.hh
index b2ba41485..6ce7376a4 100644
--- a/src/base/stats/info.hh
+++ b/src/base/stats/info.hh
@@ -229,6 +229,8 @@ class Vector2dInfo : public Info
mutable VCounter cvec;
void enable();
+
+ virtual Result total() const = 0;
};
class FormulaInfo : public VectorInfo
diff --git a/src/base/stats/text.cc b/src/base/stats/text.cc
index 05ce33cdf..ae09b9b8d 100644
--- a/src/base/stats/text.cc
+++ b/src/base/stats/text.cc
@@ -588,7 +588,6 @@ Text::visit(const Vector2dInfo &info)
}
VResult tot_vec(info.y);
- VResult super_total(1, 0.0);
for (off_type i = 0; i < info.x; ++i) {
if (havesub && (i >= info.subnames.size() || info.subnames[i].empty()))
continue;
@@ -601,7 +600,6 @@ Text::visit(const Vector2dInfo &info)
yvec[j] = info.cvec[iy + j];
tot_vec[j] += yvec[j];
total += yvec[j];
- super_total[0] += yvec[j];
}
print.name = info.name + "_" +
@@ -620,7 +618,7 @@ Text::visit(const Vector2dInfo &info)
print.name = info.name;
print.subnames = total_subname;
print.desc = info.desc;
- print.vec = super_total;
+ print.vec = VResult(1, info.total());
print.flags = print.flags & ~total;
print(*stream);
}