Improved process event structure.
[pdm.git] / pdm / perf.py
index 30f60ba..34db2ea 100644 (file)
@@ -1,4 +1,4 @@
-import os, sys, resource, time, socket
+import os, sys, resource, time, socket, threading
 
 class attrinfo(object):
     def __init__(self, desc = None):
@@ -94,6 +94,40 @@ class staticdir(perfobj):
     def pdm_protocols(self):
         return super(staticdir, self).pdm_protocols() + ["dir"]
 
+class event(object):
+    def __init__(self):
+        self.time = time.time()
+
+idlock = threading.Lock()
+procevid = 0
+
+def getprocid():
+    global procevid
+    idlock.acquire()
+    try:
+        ret = procevid
+        procevid += 1
+        return ret
+    finally:
+        idlock.release()
+
+class procevent(event):
+    def __init__(self, id):
+        super(procevent, self).__init__()
+        if isinstance(id, procevent):
+            self.id = id.id
+        else:
+            self.id = id
+
+class startevent(procevent):
+    def __init__(self):
+        super(startevent, self).__init__(getprocid())
+
+class finishevent(procevent):
+    def __init__(self, start, aborted):
+        super(finishevent, self).__init__(start)
+        self.aborted = aborted
+
 sysres = staticdir()
 itime = time.time()
 ires = resource.getrusage(resource.RUSAGE_SELF)