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

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()