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