X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fpython%2Fm5%2Fevent.py;h=74863a953c61bcfcdcdc521bfeaad92d3a950cb1;hb=7ad7ea26b5b11d4fa392282c2e6159d0089d0342;hp=2d649746465616b934636f3d382ea295ed995a34;hpb=329db76e47c825d4ecbe0f5251dbcfaf2ec09516;p=gem5.git diff --git a/src/python/m5/event.py b/src/python/m5/event.py index 2d6497464..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,17 +40,52 @@ # # Authors: Nathan Binkert -from internal.event import create -from internal.event import SimLoopExitEvent as SimExit +from __future__ import print_function -class ProgressEvent(object): - def __init__(self, period): - self.period = int(period) - self.schedule() +import m5 +import _m5.event + +from _m5.event import GlobalSimLoopExitEvent as SimExit +from _m5.event import PyEvent as Event +from _m5.event import getEventQueue, setEventQueue - def schedule(self): - create(self, m5.curTick() + self.period) +mainq = None + +class EventWrapper(Event): + """Helper class to wrap callable objects in an Event base class""" + + def __init__(self, func, **kwargs): + super(EventWrapper, self).__init__(**kwargs) + + if not callable(func): + raise RuntimeError("Can't wrap '%s', object is not callable" % \ + str(func)) + + self._func = func def __call__(self): - print "Progress! Time now %fs" % (m5.curTick()/1e12) - self.schedule() + self._func() + + def __str__(self): + return "EventWrapper(%s)" % (str(self._func), ) + + +class ProgressEvent(Event): + def __init__(self, eventq, period): + super(ProgressEvent, self).__init__() + self.period = int(period) + self.eventq = eventq + self.eventq.schedule(self, m5.curTick() + self.period) + + def __call__(self): + print("Progress! Time now %fs" % (m5.curTick()/1e12)) + self.eventq.schedule(self, m5.curTick() + self.period) + + +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' ]