X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fpython%2Fm5%2Fevent.py;h=74863a953c61bcfcdcdc521bfeaad92d3a950cb1;hb=7ad7ea26b5b11d4fa392282c2e6159d0089d0342;hp=35095599d7f8b78f2f9768fbaa2310e018442ad7;hpb=d080581db1f9ee4e1e6d07d2b01c13c67908a391;p=gem5.git diff --git a/src/python/m5/event.py b/src/python/m5/event.py index 35095599d..74863a953 100644 --- a/src/python/m5/event.py +++ b/src/python/m5/event.py @@ -1,4 +1,18 @@ +# Copyright (c) 2017 ARM Limited +# All rights reserved. +# +# The license below extends only to copyright in the software and shall +# not be construed as granting a license to any other intellectual +# property including but not limited to intellectual property relating +# to a hardware implementation of the functionality of the software +# licensed hereunder. You may use the software subject to the license +# terms below provided that you ensure that this notice is replicated +# unmodified and in its entirety in all distributions of the software, +# modified or unmodified, in source code or in binary form. +# # Copyright (c) 2006 The Regents of The University of Michigan +# Copyright (c) 2013 Advanced Micro Devices, Inc. +# Copyright (c) 2013 Mark D. Hill and David A. Wood # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -26,26 +40,35 @@ # # Authors: Nathan Binkert +from __future__ import print_function + import m5 -import internal.event +import _m5.event + +from _m5.event import GlobalSimLoopExitEvent as SimExit +from _m5.event import PyEvent as Event +from _m5.event import getEventQueue, setEventQueue + +mainq = None -from internal.event import PythonEvent, SimLoopExitEvent as SimExit +class EventWrapper(Event): + """Helper class to wrap callable objects in an Event base class""" -mainq = internal.event.cvar.mainEventQueue + def __init__(self, func, **kwargs): + super(EventWrapper, self).__init__(**kwargs) -def create(obj, priority=None): - if priority is None: - priority = Event.Default_Pri - return PythonEvent(obj, priority) + if not callable(func): + raise RuntimeError("Can't wrap '%s', object is not callable" % \ + str(func)) + self._func = func + + def __call__(self): + self._func() + + def __str__(self): + return "EventWrapper(%s)" % (str(self._func), ) -# As a reminder, priorities found in sim/eventq.hh are stuck into the -# Event class by swig -class Event(PythonEvent): - def __init__(self, priority=None): - if priority is None: - priority = Event.Default_Pri - super(Event, self).__init__(self, priority) class ProgressEvent(Event): def __init__(self, eventq, period): @@ -55,7 +78,14 @@ class ProgressEvent(Event): self.eventq.schedule(self, m5.curTick() + self.period) def __call__(self): - print "Progress! Time now %fs" % (m5.curTick()/1e12) + print("Progress! Time now %fs" % (m5.curTick()/1e12)) self.eventq.schedule(self, m5.curTick() + self.period) -__all__ = [ 'create', 'Event', 'ProgressEvent', 'SimExit', 'mainq' ] + +def create(func, priority=Event.Default_Pri): + """Create an Event from a function""" + + return EventWrapper(func, priority=priority) + +__all__ = [ 'Event', 'EventWrapper', 'ProgressEvent', 'SimExit', + 'mainq', 'create' ]