summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Binkert <nate@binkert.org>2011-05-12 11:19:32 -0700
committerNathan Binkert <nate@binkert.org>2011-05-12 11:19:32 -0700
commit35b0c1d3910595875de67a34f6b993047470fd55 (patch)
treef38c0a5a48492f6294ade11776963dfb84a763c5
parent9c4c1419a7d83e9bc39c94aa0a37dd1bbbecc38d (diff)
downloadgem5-35b0c1d3910595875de67a34f6b993047470fd55.tar.xz
stats: better expose statistics to python.
Build a python list and dict of all stats and expose flags properly. --HG-- rename : src/python/m5/stats.py => src/python/m5/stats/__init__.py
-rw-r--r--src/python/SConscript2
-rw-r--r--src/python/m5/stats/__init__.py (renamed from src/python/m5/stats.py)52
-rw-r--r--src/python/swig/stats.i48
3 files changed, 97 insertions, 5 deletions
diff --git a/src/python/SConscript b/src/python/SConscript
index 3c410b531..cbb37d0c5 100644
--- a/src/python/SConscript
+++ b/src/python/SConscript
@@ -46,10 +46,10 @@ PySource('m5', 'm5/options.py')
PySource('m5', 'm5/params.py')
PySource('m5', 'm5/proxy.py')
PySource('m5', 'm5/simulate.py')
-PySource('m5', 'm5/stats.py')
PySource('m5', 'm5/ticks.py')
PySource('m5', 'm5/trace.py')
PySource('m5.objects', 'm5/objects/__init__.py')
+PySource('m5.stats', 'm5/stats/__init__.py')
PySource('m5.util', 'm5/util/__init__.py')
PySource('m5.util', 'm5/util/attrdict.py')
PySource('m5.util', 'm5/util/code_formatter.py')
diff --git a/src/python/m5/stats.py b/src/python/m5/stats/__init__.py
index 24072aeb0..612dbdfb5 100644
--- a/src/python/m5/stats.py
+++ b/src/python/m5/stats/__init__.py
@@ -1,4 +1,5 @@
# Copyright (c) 2007 The Regents of The University of Michigan
+# Copyright (c) 2010 The Hewlett-Packard Development Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -26,10 +27,10 @@
#
# Authors: Nathan Binkert
-import internal
-
-from internal.stats import schedStatEvent as schedEvent
-from objects import Root
+from m5 import internal
+from m5.internal.stats import schedStatEvent as schedEvent
+from m5.objects import Root
+from m5.util import attrdict
def initText(filename, desc=True):
internal.stats.initText(filename, desc)
@@ -46,7 +47,38 @@ def initMySQL(host, database, user='', passwd='', project='test', name='test',
def initSimStats():
internal.stats.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)
+
+ def less(stat1, stat2):
+ v1 = stat1.name.split('.')
+ v2 = stat2.name.split('.')
+ return v1 < v2
+
+ stats_list.sort(less)
+ for stat in stats_list:
+ stats_dict[stat.name] = stat
+
internal.stats.enable()
def dump():
@@ -64,3 +96,15 @@ def reset():
# call any other registered stats reset callbacks
internal.stats.reset()
+
+flags = attrdict({
+ 'none' : 0x0000,
+ 'init' : 0x0001,
+ 'display' : 0x0002,
+ 'total' : 0x0010,
+ 'pdf' : 0x0020,
+ 'cdf' : 0x0040,
+ 'dist' : 0x0080,
+ 'nozero' : 0x0100,
+ 'nonan' : 0x0200,
+})
diff --git a/src/python/swig/stats.i b/src/python/swig/stats.i
index 72172ae94..63539ca83 100644
--- a/src/python/swig/stats.i
+++ b/src/python/swig/stats.i
@@ -32,20 +32,68 @@
%include <std_list.i>
%include <std_string.i>
+%include <std_vector.i>
+%include <stdint.i>
%{
#include "base/stats/mysql.hh"
#include "base/stats/text.hh"
+#include "base/stats/types.hh"
#include "base/statistics.hh"
#include "sim/core.hh"
#include "sim/stat_control.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)
+{
+ return info->flags;
+}
+
+inline void
+Stats_Info_flags_set(Info *info, FlagsType flags)
+{
+ info->flags = flags;
+}
+
+} // namespace Stats
%}
+%extend Stats::Info {
+ short flags;
+}
+
+%ignore Stats::Info::flags;
+
%import "base/stats/types.hh"
%include "base/stats/info.hh"
+namespace std {
+%template(list_info) list<Stats::Info *>;
+%template(vector_double) vector<double>;
+%template(vector_string) vector<string>;
+%template(vector_DistData) vector<Stats::DistData>;
+}
+
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 *>;
+
void initSimStats();
void initText(const std::string &filename, bool desc);
void initMySQL(std::string host, std::string database, std::string user,