profiling.py (3916B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\script\util\profiling.py 2 from __future__ import print_function 3 import gc 4 import sys 5 import weakref 6 import zlib 7 import blue 8 from carbon.common.script.sys.serviceConst import ROLE_PROGRAMMER, ROLE_SERVICE 9 10 def CalcMemoryUsage(what, iterations = 1): 11 if session and session.role & (ROLE_PROGRAMMER | ROLE_SERVICE) == 0: 12 raise RuntimeError('Requires role programmer') 13 iterations = max(1, iterations) 14 iterations = min(iterations, 10) 15 enabled = gc.isenabled() 16 if enabled: 17 gc.disable() 18 oldWhitelist = blue.marshal.globalsWhitelist.copy() 19 blue.marshal.globalsWhitelist.clear() 20 oldCollectWhitelist = blue.marshal.collectWhitelist 21 blue.marshal.collectWhitelist = True 22 try: 23 zippedSum = pickleSum = changeSum = 0 24 for i in xrange(iterations): 25 pickle = blue.marshal.Save(what) 26 zipped = zlib.compress(pickle) 27 before = sys.getpymalloced() 28 unpickled = blue.marshal.Load(pickle) 29 after = sys.getpymalloced() 30 pickleSum += len(pickle) 31 zippedSum += len(zipped) 32 changeSum += after - before 33 34 denominator = float(iterations) 35 return (pickleSum / denominator, zippedSum / denominator, changeSum / denominator) 36 finally: 37 if enabled: 38 gc.enable() 39 blue.marshal.globalsWhitelist.clear() 40 blue.marshal.globalsWhitelist.update(oldWhitelist) 41 blue.marshal.collectWhitelist = oldCollectWhitelist 42 43 44 class RefTracker(object): 45 46 def __init__(self): 47 if not hasattr(self.__class__, 'instanceIndex'): 48 self.__class__.instanceIndex = {} 49 self.__class__.instanceIndex[id(self)] = weakref.ref(self) 50 51 def __del__(self): 52 del self.__class__.instanceIndex[id(self)] 53 54 55 def CheckSM(): 56 ignorableForROLE_SERVICE = ['genderID', 57 'bloodlineID', 58 'languageID', 59 'rolesAtHQ', 60 'wingid', 61 'constellationid', 62 'regionid', 63 'fleetid', 64 'rolesAtAll', 65 'rolesAtBase', 66 'hqID', 67 'locationid', 68 'shipid', 69 'rolesAtOther', 70 'squadid', 71 'raceID', 72 'gangrole', 73 'solarsystemid', 74 'charid', 75 'corprole', 76 'corpid', 77 'userid', 78 'stationid', 79 'allianceid', 80 'solarsystemid2'] 81 print('\nChecking sm.services for leaked sessions\n') 82 for serviceName, serviceObject in sm.services.iteritems(): 83 if not hasattr(serviceObject, 'boundObjects'): 84 continue 85 if 0 == len(serviceObject.boundObjects): 86 continue 87 print('Checking: %s' % serviceName) 88 for boundObject in serviceObject.boundObjects.itervalues(): 89 print('\n ', str(boundObject), '\n ' + '=' * len(str(boundObject))) 90 print(' Object Connections:') 91 for connectionList in [ d.values for d in boundObject.objectConnections.itervalues() ]: 92 for obj in connectionList: 93 if obj.__session__: 94 print(' __session__ roles: ', obj.__session__.role) 95 print(' ', obj.__dict__) 96 97 print(' Session Connections:') 98 for sess in boundObject.sessionConnections.itervalues(): 99 print(' session roles: ', sess.role) 100 for k, v in sess.__dict__.iteritems(): 101 if k == 'connectedObjects': 102 print(' ', k, ':') 103 for someID, connection in v.iteritems(): 104 print(' ', someID, ':', connection) 105 106 else: 107 if sess.role & ROLE_SERVICE: 108 if k in ignorableForROLE_SERVICE: 109 continue 110 print(' ', k, ': ', v) 111 112 print()