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

tablereports.py (11916B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\eveclientqatools\tablereports.py
      2 import blue
      3 import trinity
      4 import uthread
      5 from carbonui.control.scrollentries import ScrollEntryNode, SE_GenericCore
      6 from eve.client.script.environment.spaceObject.ExplosionManager import ExplosionManager
      7 from eve.client.script.ui.control import eveScroll
      8 from carbonui.control.window import Window
      9 from functools import reduce
     10 
     11 def CreateTableWindow(name, caption, contentFunction, minWidth = 340, updateFreq = 1000):
     12 
     13     def _closure():
     14         winID = 'Insider' + name + 'Window'
     15         Window.CloseIfOpen(windowID=winID)
     16         wnd = Window.Open(windowID=winID)
     17         wnd.SetMinSize([minWidth, 100])
     18         wnd.SetCaption(caption)
     19         main = wnd.GetMainArea()
     20         scroll = eveScroll.Scroll(parent=main)
     21         scroll.sr.id = 'insider' + name + 'Scroll'
     22 
     23         def _updateList():
     24             while Window.IsOpen(windowID=winID):
     25                 contentList, layout, headers = contentFunction()
     26                 scrolllist = []
     27                 for entry in contentList:
     28                     label = layout % entry
     29                     scrolllist.append(ScrollEntryNode(decoClass=SE_GenericCore, label=label))
     30 
     31                 scroll.Load(contentList=scrolllist, headers=headers, fixedEntryHeight=18)
     32                 blue.synchro.SleepWallclock(updateFreq)
     33 
     34         uthread.new(_updateList)
     35 
     36     return _closure
     37 
     38 
     39 def ShowBlueResourceReport():
     40 
     41     def BlueResDebugCont():
     42         label = '%s<t>%s<t>%i'
     43         headers = ['type', 'path', 'memory(kB)']
     44         types = {'gr2': 'granny',
     45          'sm_': 'shader',
     46          'dds': 'texture'}
     47         memoryTotal = {'granny': 0,
     48          'shader': 0,
     49          'texture': 0,
     50          'other': 0,
     51          'all': 0}
     52         contentList = []
     53         for key in blue.motherLode.keys():
     54             obj = blue.motherLode.Lookup(key)
     55             mem = -1
     56             if hasattr(obj, 'GetMemoryUsage'):
     57                 mem = obj.GetMemoryUsage()
     58             splitKey = key.split('.')
     59             resType = 'other'
     60             if len(splitKey[-1]) >= 3:
     61                 resType = types.get(splitKey[-1][:3], 'other')
     62             if mem > -1:
     63                 memoryTotal[resType] += mem
     64                 memoryTotal['all'] += mem
     65             contentList.append((resType, key, mem / 1024))
     66 
     67         contentList.append(('TOTAL:', 'Total Memory Textures', memoryTotal['texture'] / 1024))
     68         contentList.append(('TOTAL:', 'Total Memory Shaders', memoryTotal['shader'] / 1024))
     69         contentList.append(('TOTAL:', 'Total Memory Granny', memoryTotal['granny'] / 1024))
     70         contentList.append(('TOTAL:', 'Total Memory Other', memoryTotal['other'] / 1024))
     71         contentList.append(('TOTAL:', 'Total Memory', memoryTotal['all'] / 1024))
     72         return (contentList, label, headers)
     73 
     74     CreateTableWindow('BlueResources', 'Blue Resources', BlueResDebugCont, updateFreq=10000)()
     75 
     76 
     77 def ShowWarpEffectReport():
     78 
     79     def WarpEffectDebugCont():
     80         fxs = sm.GetService('FxSequencer')
     81         label = '%s<t>%s<t>%s<t>%s<t>%s<t>%s<t>%s<t>%s'
     82         headers = ['myWarp',
     83          'gfx',
     84          'gfx.display',
     85          'gfxModel',
     86          'prepared',
     87          'started',
     88          'aligned',
     89          'stopRequested']
     90         contentList = []
     91         for actKey in fxs.activations:
     92             activation = fxs.activations[actKey]
     93             effect = activation.effect
     94             if getattr(effect, '__guid__', None) == 'effects.Warping':
     95                 mine = str(effect.GetEffectShipID() == session.shipid)
     96                 prepared = str(getattr(effect, 'debugPrepared', False))
     97                 started = str(getattr(effect, 'debugStarted', False))
     98                 gfx = str(getattr(effect.gfx, '__bluetype__', 'None'))
     99                 gfxDisplay = str(getattr(effect.gfx, 'display', False))
    100                 gfxModel = str(getattr(getattr(effect, 'gfxModel', None), '__bluetype__', None))
    101                 stopRequested = str(getattr(effect, 'debugStopRequested', False))
    102                 aligned = str(getattr(effect, 'debugAligned', False))
    103                 contentList.append((mine,
    104                  gfx,
    105                  gfxDisplay,
    106                  gfxModel,
    107                  prepared,
    108                  started,
    109                  aligned,
    110                  stopRequested))
    111 
    112         return (contentList, label, headers)
    113 
    114     CreateTableWindow('WarpEffectDebug', 'Warp Debug', WarpEffectDebugCont)()
    115 
    116 
    117 def ShowEffectActivationReport():
    118 
    119     def EffectActivationsCont():
    120         fxs = sm.GetService('FxSequencer')
    121         label = '%s<t>%s<t>%s<t>%s<t>%s<t>%s<t>%s<t>%s'
    122         headers = ['activation',
    123          'guid',
    124          'duration',
    125          'repeat',
    126          'targetID',
    127          'shipID',
    128          'moduleID',
    129          'moduleTypeID']
    130         contentList = []
    131         for actKey in fxs.activations:
    132             activation = fxs.activations[actKey]
    133             for trigger in activation.triggers:
    134                 item = [actKey]
    135                 for key in headers[1:]:
    136                     item.append(str(trigger[key]))
    137 
    138                 contentList.append((item[0],
    139                  item[1],
    140                  item[2],
    141                  item[3],
    142                  item[4],
    143                  item[5],
    144                  item[6],
    145                  item[7]))
    146 
    147             if len(activation.triggers) == 0:
    148                 item = [actKey]
    149                 for key in headers[1:]:
    150                     item.append('invalid')
    151 
    152                 contentList.append((item[0],
    153                  item[1],
    154                  item[2],
    155                  item[3],
    156                  item[4],
    157                  item[5],
    158                  item[6],
    159                  item[7]))
    160 
    161         return (contentList, label, headers)
    162 
    163     CreateTableWindow('EffectActivations', 'Effect Activations', EffectActivationsCont, updateFreq=5000)()
    164 
    165 
    166 def ShowPlanetStatusReport():
    167 
    168     def PlanetStatusCont():
    169         planets = sm.GetService('space').planetManager.planets
    170         contentList = []
    171         for planet in planets:
    172             model = planet.model
    173             mainItem = (planet.id,
    174              model.requiredTextureSize,
    175              model.currentTextureSize,
    176              model.warping,
    177              model.ready,
    178              model.forceResourceLoading)
    179             contentList.append(mainItem)
    180 
    181         label = '%i<t>%s<t>%i<t>%i<t>%s<t>%s'
    182         headers = ['planetID',
    183          'reqTextureSize',
    184          'curTextureSize',
    185          'warping',
    186          'res ready',
    187          'force load']
    188         return (contentList, label, headers)
    189 
    190     CreateTableWindow('PlanetStatus', 'Planet Status', PlanetStatusCont, updateFreq=2500)()
    191 
    192 
    193 def ShowPlanetTextureReport():
    194 
    195     def PlanetTextureCont():
    196         planets = sm.GetService('space').planetManager.planets
    197         contentList = []
    198         for planet in planets:
    199             tex2DParams = [ param for param in planet.model.Find('trinity.TriTextureParameter') if param.resource is not None ]
    200             for param in tex2DParams:
    201                 resID = str(param.resource).split('(')[1].split(')')[0]
    202                 format = trinity.PIXEL_FORMAT.GetNameFromBitmask(param.resource.format)
    203                 contentList.append((planet.id,
    204                  param.name,
    205                  param.resource.width,
    206                  param.resource.height,
    207                  resID,
    208                  format))
    209 
    210         label = '%i<t>%s<t>%i<t>%i<t>%s<t>%s'
    211         headers = ['planetID',
    212          'texture',
    213          'texWidth',
    214          'texHeight',
    215          'resource',
    216          'format']
    217         return (contentList, label, headers)
    218 
    219     CreateTableWindow('PlanetTextures', 'Planet Textures', PlanetTextureCont, updateFreq=5000)()
    220 
    221 
    222 def ShowManagedRTReport():
    223 
    224     def ManagedRTReportCont():
    225         rtm = trinity.renderTargetManager
    226         depthStencilFun = trinity.RenderTargetManager._CreateDepthStencilAL
    227         renderTargetFun = trinity.RenderTargetManager._CreateRenderTargetAL
    228         renderTargetMsaaFun = trinity.RenderTargetManager._CreateRenderTargetMsaaAL
    229         contentList = []
    230         for each in rtm.targets:
    231             targetName = rtm.targets[each].object.name
    232             if each[0] == depthStencilFun:
    233                 fun, index, width, height, format, msaaType, msaaQuality = each
    234                 fmt = trinity.DEPTH_STENCIL_FORMAT.GetNameFromBitmask(format)
    235             elif each[0] == renderTargetFun:
    236                 fun, index, width, height, mipLevels, format = each
    237                 msaaType = 0
    238                 fmt = trinity.PIXEL_FORMAT.GetNameFromBitmask(format)
    239             else:
    240                 fun, index, width, height, format, msaaType, msaaQuality = each
    241                 fmt = trinity.PIXEL_FORMAT.GetNameFromBitmask(format)
    242             contentList.append((fmt,
    243              width,
    244              height,
    245              msaaType,
    246              index,
    247              targetName))
    248 
    249         label = '%s<t>%i<t>%i<t>%i<t>%i<t>%s'
    250         headers = ['format',
    251          'width',
    252          'height',
    253          'msaaType',
    254          'id',
    255          'name']
    256         return (contentList, label, headers)
    257 
    258     CreateTableWindow('ManagedRT', 'Managed RTs', ManagedRTReportCont, updateFreq=5000)()
    259 
    260 
    261 def ShowLODOverviewReport():
    262 
    263     def SpaceLODOverviewCont():
    264         scene = sm.GetService('sceneManager').GetActiveScene()
    265         content = []
    266         trackingDict = {'trinity.EveEffectRoot': {key:0 for key in range(-1, 5)},
    267          'trinity.EveEffectRoot2': {key:0 for key in range(-1, 5)},
    268          'trinity.EveMobile': {key:0 for key in range(-1, 5)},
    269          'trinity.EveShip2': {key:0 for key in range(-1, 5)},
    270          'trinity.EveStation2': {key:0 for key in range(-1, 5)},
    271          'trinity.EveRootTransform': {key:0 for key in range(-1, 5)},
    272          'trinity.EveTurretSet': {key:0 for key in range(-1, 5)},
    273          'trinity.EveSwarm': {key:0 for key in range(-1, 5)}}
    274         label = '%s<t>%i<t>%i<t>%i<t>%i<t>%i<t>%i<t>%i'
    275         headers = ['key',
    276          'total',
    277          'unspecified',
    278          'low',
    279          'medium',
    280          'high',
    281          'ultra',
    282          'invalid']
    283         if scene is None:
    284             return (content, label, headers)
    285         for each in scene.objects:
    286             if each.__bluetype__ not in trackingDict:
    287                 continue
    288             trackingDict[each.__bluetype__][each.lodLevel] += 1
    289             for turretSet in getattr(each, 'turretSets', []):
    290                 lod = trinity.Tr2LodResourceType.LOD_COUNT
    291                 if trinity.EveTurretSetLOD.LOD_HIGHEST == turretSet.lodLevel:
    292                     lod = trinity.Tr2LodResourceType.LOD_MEDIUM
    293                 trackingDict['trinity.EveTurretSet'][lod] += 1
    294 
    295         for each in trackingDict:
    296             entry = trackingDict[each]
    297             entryText = each.split('.')[1]
    298             count = reduce(lambda x, y: x + y, entry.values())
    299             content.append((entryText,
    300              count,
    301              entry[-1],
    302              entry[0],
    303              entry[1],
    304              entry[2],
    305              entry[3],
    306              entry[4]))
    307 
    308         return (content, label, headers)
    309 
    310     CreateTableWindow('SpaceLOD', 'LOD Report', SpaceLODOverviewCont)()
    311 
    312 
    313 def ShowExplosionPoolReport():
    314 
    315     def ExplosionPoolCont():
    316         em = ExplosionManager()
    317         contentList = []
    318         for pool in em.pooledExplosions.values():
    319             poolID = pool.path.split('/')[-1]
    320             contentList.append((poolID,
    321              pool.total,
    322              pool.active,
    323              pool.inactive,
    324              pool.refCount,
    325              max(pool.maxRecentUsed),
    326              pool.totalLoads))
    327 
    328         label = '%s<t>%i<t>%i<t>%i<t>%i<t>%i<t>%i'
    329         headers = ['pool',
    330          'size',
    331          'active',
    332          'inactive',
    333          'refs',
    334          'maxRecent',
    335          'loads']
    336         return (contentList, label, headers)
    337 
    338     CreateTableWindow('ExplosionPools', 'Explosion Pools', ExplosionPoolCont)()