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
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')
+++ /dev/null
-# Copyright (c) 2007 The Regents of The University of Michigan
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Authors: Nathan Binkert
-
-import internal
-
-from internal.stats import schedStatEvent as schedEvent
-from objects import Root
-
-def initText(filename, desc=True):
- internal.stats.initText(filename, desc)
-
-def initMySQL(host, database, user='', passwd='', project='test', name='test',
- sample='0'):
- if not user:
- import getpass
- user = getpass.getuser()
-
- internal.stats.initMySQL(host, database, user, passwd, project, name,
- sample)
-
-def initSimStats():
- internal.stats.initSimStats()
-
-def enable():
- internal.stats.enable()
-
-def dump():
- # Currently prepare happens in the dump, but we should maybe move
- # that out.
-
- #internal.stats.prepare()
- internal.stats.dump()
-
-def reset():
- # call reset stats on all SimObjects
- root = Root.getInstance()
- if root:
- for obj in root.descendants(): obj.resetStats()
-
- # call any other registered stats reset callbacks
- internal.stats.reset()
--- /dev/null
+# 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
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+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)
+
+def initMySQL(host, database, user='', passwd='', project='test', name='test',
+ sample='0'):
+ if not user:
+ import getpass
+ user = getpass.getuser()
+
+ internal.stats.initMySQL(host, database, user, passwd, project, name,
+ sample)
+
+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():
+ # Currently prepare happens in the dump, but we should maybe move
+ # that out.
+
+ #internal.stats.prepare()
+ internal.stats.dump()
+
+def reset():
+ # call reset stats on all SimObjects
+ root = Root.getInstance()
+ if root:
+ for obj in root.descendants(): obj.resetStats()
+
+ # 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,
+})
%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,