From 0a8ff99edf4fd5386a600b7e0c840066847895e8 Mon Sep 17 00:00:00 2001 From: fgnm Date: Mon, 11 Jan 2021 21:34:32 +0100 Subject: [PATCH] Improve Performance Plugin with `GLProfiler` --- assets/plugins/plugin-performance-0.0.4.jar | Bin 5831 -> 5747 bytes .../plugin/performance/PerformancePanel.java | 89 ++++++++++-------- .../performance/PerformancePanelMediator.java | 4 + 3 files changed, 54 insertions(+), 39 deletions(-) diff --git a/assets/plugins/plugin-performance-0.0.4.jar b/assets/plugins/plugin-performance-0.0.4.jar index c81253a314f0afb38ee655706f451793da8a12cb..144da9a8d37ee60feeb3698b3042f1aba6a3c121 100644 GIT binary patch delta 3791 zcmY+HWmMGb7RG7m7;0#cknR!$Bm_oMlRED9E z2I)8g_jp|E-gWo;;d$O?@3lX^>-}NGjzp=A^$3Z`@$g7V@g^!nOp>Vmi1thWQTXjY zS}yuWXJ!7?6gqq*qTholM)=zQCbjAKj|l00N4M4ro>CCw;l=&4PB$fwfiw|0`qP_&Z?Xk^#y=MG&xtlr;uk?4*S-nnl`~1^{>q0SdbJi&bJySCZWdt;!Y%hFi?gEln}8P>D_BOuJl$TwO2a1~(zY7;s%O>~{Gc_y zL0ZvK)FI{9Wx4k5z<8`d+g1x2ryoP>rg(a&dYhD|z>z{WI^S|a{)$qQJE!!)N5(>) zgfGvr;AA9rQhBh_qYB&{SI`q~-_%gj__yO0^uVxBLAx2|-X389j!=4(V&OCM5g=4% zY4|`qx46>$3j;8Lu=$6kRDfeV`&mdVwpD2EiCm_{dKJU^y5EHjX$*M03eO7c z8(o-5oTp{7O<5%DzZP~d5XNu+4xT>!wwE#=yByR5a>Xbx8$|t$*6h>oi)YhyneEMg z05fiSeKOvQ5YttsS^5~=_zcc-FxO0(kN!EBO3;H0cH*Vyec$_tYJbr-8h92T`r)q$ z+PD+qi>+`fu0=4%E#L5TYtEjLbD5@4yKz^uo|t5DM+h?nMLOT9!-{l99t)A*#_Mq; zUsekq*PNONCFVvPGr6c24?z`U6ItBsw9*~l|N7x$^~jLS&mj3lwt{GhC##YxG}gLk z*W`c$1487KIsxiEcg|BqfnX>Tb-#kbm^rF`pr9x}AtajglbUtuW$&>2`BQn=R*uWZ z88$(B{_$=qcz<{a@V zEi+puZ{e9ERmEtKuFKiHWoNS$@tMZ@|aT&XWn6kGwnH_t7@ZD)OeJxc!REx#>}C6g5idvf?o&= zSDh)bo^p^;rQMw^%g9KQJhySS!rV@$1#|5Sk|4^fxG%4P`?6-Xq}nu3m`MsBPjQ*4 zPzt5v2Fj;X_N`rOzMpwlQ$lFQ=X*9+!}*eFehO%Ma?4EgVHfmnh-16b3PZ=o_wCJx z#St;MwnPotz1&#Njpeo~Itmw0?uE!j-hy{?1(;8vTwcy6n!v?O(_$*l)!?yE_*8PaE3+9s2`mU{){#rvN&-(*)&G&pxBnjm6*F5*5GRP#c-nAI4FHwFiS9JPqd&?kQh zdmyF#AbLg|6VgyBF<1B6Aj9qL*&iF5bvbpDFqIO~$mU_Uk$@_?_qZ&@^4u{wz0u-& zyBR6}&4zc^B(ix@ltR8_XbSIUiw0@^nV`B>Q~k`lV)jxG*_<8nyqaNP-$C)x(}L~U zyO9|`-d#(IGg<)pKRhws3TqpXUAW~~99rIm)pO13%FR(C6Z?|oO-;)BCpssB;m0bv5s$fvPGybCq0qQjSb2ayb9tcVb5WlKsNW>k)k6HE zQ`|a{mzdlJC;Rs3bRrp?2Z_N~9j zc)+BYUK``mmpqm-;MEzV^}R+sHaj@IlOOIoA!o`1WA@)Gs$VAabjHVlR7CS&lJ>fM zVgkGGnvf8LC8|E#F)?kk4HTNrX=v?>t0C9l2GYO|R&7fgnyy};S+nWc3SZi zFeXY}GREx98&s1DW+cHRK&?vZ+Cc(NITft}LlCb|n$?qnYpI<>cBA_iUH tLCIy zXP0)E2up2Ci})}6CfPR1^=ox0u%7N+_TuWq{5cNvz69J~%3ra}sC>!wJF*E4!^ z@XSvOMV|+(%Jpa}pS}&|g`GHP8)P~GQ^&auQxq(ER1>HrL7x_k#zvS7jAA7ywsG+T zLA=0H2_-1G;nsV$k}49NxJpmPx=Qbc4e7;3C8Vl;^Ij*mCpe}zyJ>s5U8zg`@S{VH z$$b5IpK)+nZ_5GaLud6*>{it3=7W*itu)VL4kBVhEv^}F>YIglS0BXmm~-L)w>Dwd z^#qbI+Oy~bo>-a{UV=dp?!pQ~qY6>ejA`4PppCiin5)757|2rE+d zAH=z!DpNm(Up3Omq+CE{$+}H*GbDG`oLjv7Jhnc>hT-zoPX};raxf_kMX!KzXJ6%9 z`zz_z(tXOv8`}ZXW4wnTUeO1@iy3cuXmh2sqJ%p?XV1#DrJBU>3Qjo!d6lLc`n8U- zN-u)sKr)99KzEPsQesA9PO~Rd=OGSYCjrb#?kGiO2 z59qcMD|fe!>u5Q=yCnD`HgV3#059sAjK1JZ9LO5ul zxCF>r)7^s`H8rf@81QR+S7D0wby`W$=KBsxmI1$$Lll!k=)o$nCazs~;|#L8ZRi&( ztu5Zf=#{P6wDNY6xk>1f%Fpwt$e^(}xA$!J!JT3yed?Z__-w0Tk^-{1ok(r13se1C z&#>*#mB6lV^a-I+zT99MqLqAyRvz%?t30WJeOA_O?(;Q+1z_DXklvGC76wJc(M{I9 zGhVnVS=vI6~QLqE0zHvzORDP+16T zND`RSg&dH51f=hk>z_SAhod&z2aX+FU%c--5-v~VHtlvG+r&qIU7&vYok7K_yBdEX zVeWqVO)w+iq;ajmcvDGs5pVh{RA7~>e0e|fEzlGPEWm$BR4uD1^4y42oYN!@+IJ%u zhvuUBk8L$RTWVX_B8e>`-7Y(*#o$=807rhF2u36=kW7C3_p;lTR-?1n9zT-qFU;d( z=Os&TZdqFd^G3COl)MykX5Z}>!&N=?1@zXv;&t&1%TA=&Uc~WrJ7M;+>JBZ9Q%P_J zXYnWx&q$%py+m8agg6SGN5Le$u>3&t&x!r+}lGjE{Oc*vkWP>g0=EC*+ zar2QY5YPAJ$K~CbW*4F=XW8)uG5*#vcq8hkA=3Vp*S_eyNawcBL1b-{QC{Z5qif6a zfQD=V_uv|yRp;HWpd3;+1O9t*v_pkPX+QhE_GOKI%dR3)4*fM7Auxtrm*}7qJ-Zn6 z?>fxu2$Q$qJWX2wh}4=<5L9r0gFyHhua*iF5T`alSCx2kc5Abvub&a&CR6|$R`YRUbGCJLZCSLl}S zi_7-=wY0l8#aV+D9;-H5VWEIsb#0{f*nW(ppR*s6(E3i*xi$9+>$1yy^EAr+*^ TnB;ex{GW4&5D!nD{`c)aa#b~P delta 3879 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 diff --git a/plugin-performance/src/main/java/games/rednblack/editor/plugin/performance/PerformancePanel.java b/plugin-performance/src/main/java/games/rednblack/editor/plugin/performance/PerformancePanel.java index 5fb30007..ff561f6f 100644 --- a/plugin-performance/src/main/java/games/rednblack/editor/plugin/performance/PerformancePanel.java +++ b/plugin-performance/src/main/java/games/rednblack/editor/plugin/performance/PerformancePanel.java @@ -2,25 +2,22 @@ package games.rednblack.editor.plugin.performance; import com.badlogic.ashley.core.Engine; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.utils.TimeUtils; +import com.badlogic.gdx.graphics.profiling.GLProfiler; import com.kotcrab.vis.ui.widget.VisLabel; import com.kotcrab.vis.ui.widget.VisTable; import games.rednblack.h2d.common.UIDraggablePanel; import java.lang.management.ManagementFactory; import java.lang.management.MemoryUsage; -import java.text.DecimalFormat; public class PerformancePanel extends UIDraggablePanel { - private VisTable mainTable; + private final VisTable mainTable; - private VisLabel entitiesCount; - private VisLabel fpsLbl; - private VisLabel memoryLabel; + private VisLabel entitiesCount, memoryLabel, fpsLbl, glCalls, drawCalls, shaderSwitch, textureBind, vertexCall; private Engine engine; - private long time; + private final GLProfiler profiler; public PerformancePanel() { super("Performance"); @@ -29,6 +26,9 @@ public class PerformancePanel extends UIDraggablePanel { mainTable = new VisTable(); getContentTable().add(mainTable).left().width(250).pad(5); + + profiler = new GLProfiler(Gdx.graphics); + profiler.enable(); } public void initView() { @@ -37,6 +37,11 @@ public class PerformancePanel extends UIDraggablePanel { entitiesCount = new VisLabel(); fpsLbl = new VisLabel(); memoryLabel = new VisLabel(); + glCalls = new VisLabel(); + drawCalls = new VisLabel(); + shaderSwitch = new VisLabel(); + textureBind = new VisLabel(); + vertexCall = new VisLabel(); mainTable.add(new VisLabel("Entity count: ")).right(); mainTable.add(entitiesCount).left().padLeft(4); @@ -49,9 +54,28 @@ public class PerformancePanel extends UIDraggablePanel { mainTable.add(new VisLabel("Memory: ")).right(); mainTable.add(memoryLabel).left().padLeft(4); mainTable.row(); - pack(); - time = TimeUtils.millis(); + mainTable.add(new VisLabel("GL Calls: ")).right(); + mainTable.add(glCalls).left().padLeft(4); + mainTable.row(); + + mainTable.add(new VisLabel("Draw calls: ")).right(); + mainTable.add(drawCalls).left().padLeft(4); + mainTable.row(); + + mainTable.add(new VisLabel("Shader switches: ")).right(); + mainTable.add(shaderSwitch).left().padLeft(4); + mainTable.row(); + + mainTable.add(new VisLabel("Texture bindings: ")).right(); + mainTable.add(textureBind).left().padLeft(4); + mainTable.row(); + + mainTable.add(new VisLabel("Vertex calls: ")).right(); + mainTable.add(vertexCall).left().padLeft(4); + mainTable.row(); + + pack(); } public void initLockView() { @@ -63,39 +87,26 @@ public class PerformancePanel extends UIDraggablePanel { @Override public void act(float delta) { super.act(delta); - if (TimeUtils.timeSinceMillis(time) > 1000) { - entitiesCount.setText(engine.getEntities().size() + ""); - fpsLbl.setText(Gdx.graphics.getFramesPerSecond() + ""); - MemoryUsage memoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); - long usedMemory = memoryUsage.getUsed(); - long allocatedMemory = memoryUsage.getCommitted(); - memoryLabel.setText(getFileSizeString(usedMemory) + " of " + getFileSizeString(allocatedMemory)); - } + entitiesCount.setText(engine.getEntities().size()); + fpsLbl.setText(Gdx.graphics.getFramesPerSecond()); + MemoryUsage memoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); + long usedMemory = memoryUsage.getUsed() / (1024 * 1024); + long allocatedMemory = memoryUsage.getCommitted() / (1024 * 1024); + memoryLabel.getText().clear(); + memoryLabel.getText().append(usedMemory); + memoryLabel.getText().append(" of "); + memoryLabel.getText().append(allocatedMemory); + memoryLabel.getText().append(" MB"); + glCalls.setText(profiler.getCalls()); + drawCalls.setText(profiler.getDrawCalls()); + shaderSwitch.setText(profiler.getShaderSwitches()); + textureBind.setText(profiler.getTextureBindings()); + vertexCall.setText((int) profiler.getVertexCount().total); } - public static final long KB = 1024; - public static final long MB = 1024 * KB; - public static final long GB = 1024 * MB; - public static final long PB = 1024 * GB; - DecimalFormat df = new DecimalFormat("#"); - - public String getFileSizeString(long size) { - int digits = getDigits(size); - df.applyPattern(digits == 0 ? "#" : "#." + getDigits(digits)); - if (size < KB) { - return df.format(size) + " " + "KB"; - } else if (size < MB) { - return df.format((float) size / KB) + " " + "KB"; - } else if (size < GB) { - return df.format((float) size / MB) + " " + "MB"; - } else { - return df.format((float) size / GB) + " " + "GB"; - } - } - - private int getDigits(long size) { - return size < GB ? 0 : 2; + public void render() { + profiler.reset(); } public void setEngine(Engine engine) { diff --git a/plugin-performance/src/main/java/games/rednblack/editor/plugin/performance/PerformancePanelMediator.java b/plugin-performance/src/main/java/games/rednblack/editor/plugin/performance/PerformancePanelMediator.java index 7242b610..520d9f91 100644 --- a/plugin-performance/src/main/java/games/rednblack/editor/plugin/performance/PerformancePanelMediator.java +++ b/plugin-performance/src/main/java/games/rednblack/editor/plugin/performance/PerformancePanelMediator.java @@ -21,6 +21,7 @@ public class PerformancePanelMediator extends Mediator { @Override public String[] listNotificationInterests() { return new String[]{ + MsgAPI.RENDER, MsgAPI.SCENE_LOADED, PerformancePlugin.PANEL_OPEN }; @@ -38,6 +39,9 @@ public class PerformancePanelMediator extends Mediator { case PerformancePlugin.PANEL_OPEN: viewComponent.show(performancePlugin.getAPI().getUIStage()); break; + case MsgAPI.RENDER: + viewComponent.render(); + break; } } }