changeset 342c0eaab188 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=342c0eaab188
description:
        python: Don't use Swig to cast stats

        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 <[email protected]>
        Reviewed-by: Sascha Bischoff <[email protected]>
        Reviewed-by: Curtis Dunham <[email protected]>
        Reviewed-by: Jason Lowe-Power <[email protected]>
        Reviewed-by: Joe Gross <[email protected]>

diffstat:

 src/python/m5/stats/__init__.py |  18 +++---------------
 src/python/swig/stats.i         |  16 ----------------
 2 files changed, 3 insertions(+), 31 deletions(-)

diffs (73 lines):

diff -r af41594e9b3c -r 342c0eaab188 src/python/m5/stats/__init__.py
--- a/src/python/m5/stats/__init__.py   Tue Jan 03 12:03:06 2017 +0000
+++ b/src/python/m5/stats/__init__.py   Tue Jan 03 12:03:45 2017 +0000
@@ -49,25 +49,13 @@
 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 @@
         if output.valid():
             output.begin()
             for stat in stats_list:
-                output.visit(stat)
+                stat.visit(output)
             output.end()
 
 def reset():
diff -r af41594e9b3c -r 342c0eaab188 src/python/swig/stats.i
--- a/src/python/swig/stats.i   Tue Jan 03 12:03:06 2017 +0000
+++ b/src/python/swig/stats.i   Tue Jan 03 12:03:45 2017 +0000
@@ -46,12 +46,6 @@
 #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 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);
 
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to