NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

blueTaskletImplementation.py (1241B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\ccpProfile\blueTaskletImplementation.py
      2 import blue
      3 from . import decorator
      4 EnterTasklet = blue.pyos.taskletTimer.EnterTasklet
      5 ReturnFromTasklet = blue.pyos.taskletTimer.ReturnFromTasklet
      6 GetCurrent = blue.pyos.taskletTimer.GetCurrent
      7 
      8 class Timer(object):
      9     __slots__ = ['ctxt']
     10 
     11     def __init__(self, context):
     12         self.ctxt = context
     13 
     14     def __enter__(self):
     15         self.ctxt = EnterTasklet(self.ctxt)
     16 
     17     def __exit__(self, *_):
     18         ReturnFromTasklet(self.ctxt)
     19 
     20 
     21 class TimerPush(Timer):
     22     GetCurrent = blue.pyos.taskletTimer.GetCurrent
     23 
     24     def __init__(self, context):
     25         fullctx = '::'.join((self.GetCurrent(), context))
     26         Timer.__init__(self, fullctx)
     27 
     28 
     29 def TimedFunction(context = None):
     30 
     31     def Wrapper(function, *args, **kwargs):
     32         newContext = EnterTasklet(context or repr(function))
     33         try:
     34             return function(*args, **kwargs)
     35         finally:
     36             ReturnFromTasklet(newContext)
     37 
     38     return decorator.decorator(Wrapper)
     39 
     40 
     41 def PushTimer(context):
     42     return EnterTasklet(context)
     43 
     44 
     45 def PopTimer(context):
     46     return ReturnFromTasklet(context)
     47 
     48 
     49 def CurrentTimer():
     50     return GetCurrent()