python: Don't use Swig to cast stats
authorAndreas Sandberg <andreas.sandberg@arm.com>
Tue, 3 Jan 2017 12:03:45 +0000 (12:03 +0000)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Tue, 3 Jan 2017 12:03:45 +0000 (12:03 +0000)
Call the stat visitor from the stat itself rather than casting stats
in Python. This reduces the number of ways visitors are called.

Change-Id: Ic4d0b7b32e3ab9897b9a34cd22d353f4da62d738
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Sascha Bischoff <sascha.bischoff@arm.com>
Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Joe Gross <joseph.gross@amd.com>
src/python/m5/stats/__init__.py
src/python/swig/stats.i

index 4defaf5c161fc9147c0e42a39978f73c2c5a80c6..f3d3943111211ae2f9a385d84bda596b480680e7 100644 (file)
@@ -49,25 +49,13 @@ def initSimStats():
 names = []
 stats_dict = {}
 stats_list = []
-raw_stats_list = []
 def enable():
     '''Enable the statistics package.  Before the statistics package is
     enabled, all statistics must be created and initialized and once
     the package is enabled, no more statistics can be created.'''
-    __dynamic_cast = []
-    for k, v in internal.stats.__dict__.iteritems():
-        if k.startswith('dynamic_'):
-            __dynamic_cast.append(v)
-
-    for stat in internal.stats.statsList():
-        for cast in __dynamic_cast:
-            val = cast(stat)
-            if val is not None:
-                stats_list.append(val)
-                raw_stats_list.append(val)
-                break
-        else:
-            fatal("unknown stat type %s", stat)
+
+    global stats_list
+    stats_list = list(internal.stats.statsList())
 
     for stat in stats_list:
         if not stat.check() or not stat.baseCheck():
@@ -116,7 +104,7 @@ def dump():
         if output.valid():
             output.begin()
             for stat in stats_list:
-                output.visit(stat)
+                stat.visit(output)
             output.end()
 
 def reset():
index 41115445cd4d1eaca870bde530bd220bf51c4cae..b9da5a5ad3b43eac324322d7eb2a3e89faf222be 100644 (file)
 #include "sim/stat_register.hh"
 
 namespace Stats {
-template <class T>
-inline T
-cast_info(Info *info)
-{
-    return dynamic_cast<T>(info);
-}
 
 inline FlagsType
 Stats_Info_flags_get(Info *info)
@@ -124,16 +118,6 @@ namespace std {
 
 namespace Stats {
 
-template <class T> T cast_info(Info *info);
-
-%template(dynamic_ScalarInfo) cast_info<ScalarInfo *>;
-%template(dynamic_VectorInfo) cast_info<VectorInfo *>;
-%template(dynamic_DistInfo) cast_info<DistInfo *>;
-%template(dynamic_VectorDistInfo) cast_info<VectorDistInfo *>;
-%template(dynamic_Vector2dInfo) cast_info<Vector2dInfo *>;
-%template(dynamic_FormulaInfo) cast_info<FormulaInfo *>;
-%template(dynamic_SparseHistInfo) cast_info<SparseHistInfo *>;
-
 void initSimStats();
 Output *initText(const std::string &filename, bool desc);