From 21b455d4d95b5789cc98edde573de7ee5f7340eb Mon Sep 17 00:00:00 2001 From: fgnm Date: Tue, 30 Apr 2024 17:53:21 +0200 Subject: [PATCH] Spot all Pools access different from the main thread --- assets/plugins/plugin-performance-0.1.5.jar | Bin 6056 -> 6051 bytes hyperlap2d-runtime-libgdx | 2 +- .../java/com/badlogic/gdx/utils/Pools.java | 74 ------------------ .../controller/BootstrapInfoCommand.java | 3 - .../editor/proxy/ProjectManager.java | 6 +- .../editor/proxy/ResolutionManager.java | 4 +- .../editor/splash/SplashMediator.java | 6 +- .../view/ui/panel/ImportPanelMediator.java | 2 +- 8 files changed, 11 insertions(+), 86 deletions(-) delete mode 100644 src/main/java/com/badlogic/gdx/utils/Pools.java diff --git a/assets/plugins/plugin-performance-0.1.5.jar b/assets/plugins/plugin-performance-0.1.5.jar index ee3725be6d29b23f5a46dd24ef490d8e8bd4f702..c5a35dffe49b8fd787206655795234128816e3a2 100644 GIT binary patch delta 2682 zcmV-=3WfEkFQYFEP)h>@3IG5I2mox0kqmSKY>SbCBm!)Uk*F>LY>ScDH3DpllMewr z0&I(uO#w&(Y>Ts(0Z#)7Y>S>)S}1?}sFUvmRDY0UH_L;-0^x?`P6B1=fwTlD$&x_m zawQ?*u(Xrim(9TJ%rZO6Ws5CU)K)y|T`Si6s8)+*L#bA+M=jcVAJu9PtwO!)*{ap= zo0-i0|0+fbV|QyBu4D|AzLRtZd~jqld> zX;DKnQ_*(E*3DEyU1ta(j0`|ZjKXMv<>$**N!_vRXvWB;bTgVM8WkO2ps#AQmQ2PB zE32Avj$@euBWmk90~jMPo6L*uv7Cghb$>_q>Dg#bkM7r#Ddj{v^=t>58$vb0?BVDt zGHJZT1k?yrr8V7j_XXz0FD|8l{h1^&8B+wRX(wixjxrrz#G=|dS4g*(G^~`Kh^CSU zqS=Hp$!B+h`y{N9n1O>NYST@C!VUS6)F@Gn3 zxf1g*Utqy7&k2+ps>dPd49|a8S9$CZzzXXm>akFuf@1CTau8eo2Pv!X@}w-5h_aLs z87&#Wr2>mfM5Jsj)2k=4(Tr{N=mr5ax;DPqoh!Qvm*a{6mP)(~%LK-koL-weAP_9b z5SUtO<63`{;2rMZ*G^F{i%GDB$TxFHY zEI>Xcv4%+%2}5ai04*0Qmblifj1Za;X3JV7*5ew1QG{{b(N#8P zHnM=qo=i60Z7^xG#1^gzmpX@-$yTBk%8)2foTwtv5$x?N%i zQ)RYSODem4zwRV@dE@00*Sew|b->Bls!2DKOutUzdY8UW*|g<4!Srs41k*#dGD%Q} zo>oCnfsJlvcMnDq%(y(l;Ye{h37u01wz*iZX1A-oIYmv%ZFbd|&S2alVQ>Le*m|nh zDPMh)hfzx+!x#+^M&nd4%ztl7WSMn@ZS4;tM`v0#w=a(bv7e&e=9(2@yO?y4AhN*? z8n0eKcCU>`+^F#SMhXaZ=lzjHf$~a$vF&b%B3U;^$|c_{5bp2-6zQf25t3Z`E#!Eo z8=#`&A-r1RC?lvmL;X64*HYixXhjHvyH&!8SQ%yV{c)?rZFoJmrhf#%qnt|EMfMvc z-iSAmJ{La++jHI7gso>Bo!fWB1(8My(*&UA5)Q)j?RZN7Zwka#!l6qs}&M)D=AA5!jJ)50=ZVg)4)0-_}>@? zXfyH>eK^G>Sa7a(u#WBp$h+g4a=MXp`_E~_0(gLW!*KYS{eN>3590IG8?+3eh;FpH z+V#WK7Q`1R@DZyg!h*iUg1$_zi@}~C!xi{d3R7f56Nlkz5|1$C$LZ!i&CrvYqt@xl z*6c*@LGH6(m-q%}ImizHE;c4UCh<)sN+PZ)bSvKYw#0XMV=Qg74`^7*-Tj`#_jxz$ zhurU4T$8;0Lw|`M;c+TV+U_hiFM;`kB_^#oz0nrK(j1qI{HnrF@I(MVmG~K+^n3r% zN2mk2*bxvdAv}#|0{FSaFBmqF3xtyU(^j5QNKDPNc+J)SONn3MEG5cAtys_Uo|E`B zenZWTIkO$s2Hi09ESJ&xy7fW)j?<8KegA{RAKkmlR)17%A^Zt{4&W~mf5qP@ngc7g z%d!o^&ol~BV>Uy5X<%R2pqW~V{i-{!AzYA^!2AMU4B#IU|HQv2H>Ibz)A7S+#-K9i z7OUdlR82xiQ6@$R%o~<^l1+{Xtg0PKblt_eCxtX-B`NOJaotoKbLnon;k*ZAIBwA; z(W%)wuYY}Fxzo#eSP}pK-{_<>$e#n9x}xh#@{}~~@s<@yWjGq?$z>HKE5t*gK~+;Q z$t0&pDNBFf#Y(Ig^`f%k*G!RQe9#`MXS_EGVGe`q4k#tQW z|9_^CXVb8ls4M7`B}N}Dm9#58y&@ojGzw8wu&L~6&!)1Op6Vu2)=UPiJ&AS2X}mby zRGhXIr(28DZN=%%;&fMWs<9?sg_C{g$wSX$cNf#>Z=JiG6;9`2c6k=-%!H8b$>|y!zKLNhUCAggn#Fd{6|XocMZy)$E%8P zJB|hPJBL6wkKjHZ(`j8x|1U=!LBAfYSV+aQ2-o2f?55AX!*og9j!SU|aomF|@DP^b z43^PVcO{<3Rd^8%Vl-BW*;py+akW^5)uIiJVh3WvB*-2?v$z#&#c`|?C(tTR(|@Ez*%Y*w%|J&H?qxIk;U4NQ!Hs?iPAkB@5R2CoV^Q>VG)B;G z7x}s!Q?X+}DNQTL<`=amTRcLtLo`mPpVNoeF`DV`SRQZA;~jathvONiGQJ=06X5kJ zd^nF!xWAuPjgj&AOnOQ($(K|ORLG=fipAd#egrLYb?XhVv?(@P&`It~(qj(=hgjv@3IG5I2mox0v-1vw1p;h~lX(<(0&I(u@)R-xY>Sg7 z6+8lLi<4v(Ljr7zlc^O-0&I(u^%YhEY>Sgk7HtV^i=J3oD1ZB?lfxEe0&I(uDi<6A o;trD^0U(oo0SuEb4;~g!O9ci10000A015yn0{{SK6aWAK0L^a;o&W#< delta 2694 zcmYk8`9IT-AHZkG5t?IexnmM?=jh`sW^0op#79XI%aLPC=}pKvWXLfROIu^*R_;48 zIU_~6=b9shh;P2Xe7~>9>+yU(UXRy5@GMd%tMj03SlPHiAWlwDSkx1qVDMi)QaB=6 z?TBMKe@QsOVss=Vi`8FMJY_+#a)m|ZJF&>FN0buQ*z5tIG6W@OV!CL@8xiNs&OUv zPueZ2W0Sv^uEb|Z;qIUEwT89uA9;ss_t*07ZEUfEXb`O^Wq#2bWK|gAbg3wpPPAq^ z2U?cj1PxrXhFeoZhc6Q@)X)_8Ebd=XDB{w})5SA>>la!C@2c-XYK0yA^ogy}bKe zBA3Q@9?qo-j6mg~cd)8-E1ltx$B@=q5UCx9fH;LWVst3yilKDI=X5U%E%u_qHl8g9 zBs#4-%WvH0#-~7pc|m10O)DZE{G+>`!7^kGIKi=7sa_W=Tq;pE#r8_$l+RKaKTZeE zidaFFZW2sjgv?JyoX(kI9#>6rcZIX=X(2rfyg2O#F7;|ljs!g5xA9$em7RcJ*0Xbw z%YmOv9_Jd7c{UL#XKnVQ(Cd0AC`e&mP7ZDO=|s0bceKgXRm+f46gohn)6)(y5~2y* zJ}=Dn20bmHD&S<)xyIHLT-7DZNTLH*t~jr7Hghj4ER|Ul5It76?m}`8IAF`nEs`oB zt~`A(DUIj5BKSjs1xZzLh^n~a-KlwBI}ap2A@ps&&w(nS-f@$qBpoN_$c2FY4zt^Q zW1^vMe$A^4pSzDtn7La|Y^ip+)(3Fj7WXJw_SB|5sRi4cwIul`HE&L*T+sRE@b;32 z@fGJ7pIKRH!dNqDGn%I22ttaS&a53QU6RFEWS#NN^lotg&v4D;6j4HZd&T=KeLJ9o z&ERUQ%JPVW{3NNhPuZ2oX`fSg8|v+$CG5TINwtBNEfaVO?46%hsa;{>Z6L$iW>KP$ znLgHGe|uZSdcFRmq5%Em{coHKILzpT8{$Zf%ym@R-+ zYAWqt+f_5kv9@+{ZKAx83&4!MMz6p1Sg(sucDSkMVs7!BRjRz{mhJEt*9tj|2;n!E z+|{oI8%t2n?P6Rzp8K`CCChW>R}t%3*ywSD57u0$Y(kWxwtFlxAXcQnO3yMbb#~Al znT&nMqN0DYl`haFYI;*_Y1Fhn^Y_10F{V+ zv&nQCj}u%B+8FwlzgjJrnHi|<_l;k~f*XbqjL;PhgcSR?T?ON)?O)bIUy%kr!y4F{ z@aNI&Ub}SVL(5MC!G_})eLOtDqDgR#`+I0Sc7`wVwupy;yh-R-kdX>p^=Z{klYPJ@&HMd^fOMBz zdL_7ZT=_(LI9w-Or;>bXGyx~>)T5-x?0i`ZMqC^)epB07v(7XYP`al#e1r0;#+mOR z_dRGLj@T}9DUfSEk19ney3exNx6@fttTb^DBwhw$zMRwmgdchx65CmKjD8+dG*>PZ zETvW7Od5Z*BgcN;RAGAf?rR-+@95VfSkVmc;Az*Phz-S4jiWE z_`n@o8}qn-d9ojb}EbCbKLgR@=lgmzWPx(|h$2 zzs#A~Gc>?@^5A)U%DO1@)E%sF&eP_?CjtaV;-ojhPbK+-OwPGV^6Tg#yk`n;wO#g}UuOMG0pyeF-2zyR{yGT|M)##Gia1z?~;h`qdd{q8oI3N3Iff;op=f>&&T%s-m|R=f)I{rWM|qf zuXW5ydd+L7*XzfQuMbM9t;*%k8KOKoWYnZhSj)6$1LllNEZ18!Vzoh9R-*u7(_iY?qdLLa@z*2C1#XLrP!@iYZCp=1QW14eH>3Bby5-m|}$1*3+TiCO&AT3MbK%>o%eruwJ26)uV8BuIp@MO36w+kZE-jsLh~{t7 zR5_fIJ18yMl!i_FOJp2oSOWWBF3vU4;(#vl{>8){Y)TJsga2@ne>bR>0;&;oLNq0E z23N6d8-QJn>6!f>Ffh}@%i4lF28`^Q6u#I$PLa#r3%ah4zbw*2^&F>6U6Zw(kQd!p z^W{?;O;TQQ)n4xHGO$g#P$qnK-~xKW@}mrEZaaQV)z36h-_$>X0K_E@c|%h?s5tR2 z?G@gF>V*voNy%wq4Atx?8u+WtJYS2kw*8~hhg^LmgwHB35KKj2AkZ zfBl8_Y4u$H;e5=7MmOJplUvg@$m<*0Lx&rZlf*W|ySNiwT9$Q04W9~rHE=1K6^w}>0~ zG3FWRji-k7b2a;Oe*U{|z}wNQ2jBnQ-*NoNP>SD73gcdIWN%2=Wc2^&`6zj&hc0Mu(TTxBS>j8%r2*5nx=*c~=}cvvsPDl_O9@ z^&NaX_(#yXKHrq&Z$_u7|HH6Qd>8-On3JwVQq?dojQ?R8PL~gbE_a-^mZfMtO|9-? zBvz!C({a%tTxO$w?2Ez#FH<<9UG{y65+tC9y41bRVl=}(yS-2}8)nvRoAXVBN72EY zlc>kJ>!w$7t@tIo^;%o2dMf zLl8>VukG~2gUo`ts$^FPc{8cP5G diff --git a/hyperlap2d-runtime-libgdx b/hyperlap2d-runtime-libgdx index 8457a75a..e0312067 160000 --- a/hyperlap2d-runtime-libgdx +++ b/hyperlap2d-runtime-libgdx @@ -1 +1 @@ -Subproject commit 8457a75aab0f574b2ea9a62bcdd871c71b81671a +Subproject commit e0312067e90acf99fb8cbae519aabd0f86fd3234 diff --git a/src/main/java/com/badlogic/gdx/utils/Pools.java b/src/main/java/com/badlogic/gdx/utils/Pools.java deleted file mode 100644 index 28af8944..00000000 --- a/src/main/java/com/badlogic/gdx/utils/Pools.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.badlogic.gdx.utils; - -public class Pools { - static private final ThreadLocal> typePools = new ThreadLocal>() { - protected ObjectMap initialValue () { - return new ObjectMap(); - }; - }; - - /** Returns a new or existing pool for the specified type, stored in a Class to {@link Pool} map. Note the max size is ignored - * if this is not the first time this pool has been requested. */ - static public Pool get (Class type, int max) { - Pool pool = typePools.get().get(type); - if (pool == null) { - pool = new ReflectionPool(type, 4, max); - typePools.get().put(type, pool); - } - return pool; - } - - /** Returns a new or existing pool for the specified type, stored in a Class to {@link Pool} map. The max size of the pool used - * is 100. */ - static public Pool get (Class type) { - return get(type, 100); - } - - /** Sets an existing pool for the specified type, stored in a Class to {@link Pool} map. */ - static public void set (Class type, Pool pool) { - typePools.get().put(type, pool); - } - - /** Obtains an object from the {@link #get(Class) pool}. */ - static public T obtain (Class type) { - return get(type).obtain(); - } - - /** Frees an object from the {@link #get(Class) pool}. */ - static public void free (Object object) { - if (object == null) throw new IllegalArgumentException("object cannot be null."); - Pool pool = typePools.get().get(object.getClass()); - if (pool == null) return; // Ignore freeing an object that was never retained. - pool.free(object); - } - - /** Frees the specified objects from the {@link #get(Class) pool}. Null objects within the array are silently ignored. Objects - * don't need to be from the same pool. */ - static public void freeAll (Array objects) { - freeAll(objects, false); - } - - /** Frees the specified objects from the {@link #get(Class) pool}. Null objects within the array are silently ignored. - * @param samePool If true, objects don't need to be from the same pool but the pool must be looked up for each object. */ - static public void freeAll (Array objects, boolean samePool) { - if (objects == null) throw new IllegalArgumentException("objects cannot be null."); - Pool pool = null; - for (int i = 0, n = objects.size; i < n; i++) { - Object object = objects.get(i); - if (object == null) continue; - if (pool == null) { - pool = typePools.get().get(object.getClass()); - if (pool == null) continue; // Ignore freeing an object that was never retained. - } - pool.free(object); - if (!samePool) pool = null; - } - } - - public static String name() { - return "ThreadSafe Pools"; - } - - private Pools () { - } -} diff --git a/src/main/java/games/rednblack/editor/controller/BootstrapInfoCommand.java b/src/main/java/games/rednblack/editor/controller/BootstrapInfoCommand.java index bcb308e7..24fe49e7 100644 --- a/src/main/java/games/rednblack/editor/controller/BootstrapInfoCommand.java +++ b/src/main/java/games/rednblack/editor/controller/BootstrapInfoCommand.java @@ -2,7 +2,6 @@ package games.rednblack.editor.controller; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.utils.Pools; import games.rednblack.editor.utils.AppConfig; import games.rednblack.h2d.common.HyperLog; import games.rednblack.puremvc.commands.SimpleCommand; @@ -22,7 +21,5 @@ public class BootstrapInfoCommand extends SimpleCommand { HyperLog.info("Shaders version " + gl20.glGetString(GL20.GL_SHADING_LANGUAGE_VERSION)); HyperLog.info("JVM Version: " + System.getProperty("java.version") + " (" + System.getProperty("java.vendor") + ")"); - - HyperLog.info(Pools.name()); } } diff --git a/src/main/java/games/rednblack/editor/proxy/ProjectManager.java b/src/main/java/games/rednblack/editor/proxy/ProjectManager.java index 798f80a7..5fc1a82f 100755 --- a/src/main/java/games/rednblack/editor/proxy/ProjectManager.java +++ b/src/main/java/games/rednblack/editor/proxy/ProjectManager.java @@ -250,17 +250,17 @@ public class ProjectManager extends Proxy { FileAlterationListener listener = new FileAlterationListenerAdaptor() { @Override public void onFileCreate(File file) { - facade.sendNotification(MsgAPI.PROJECT_FILE_CREATED, file); + Gdx.app.postRunnable(() -> facade.sendNotification(MsgAPI.PROJECT_FILE_CREATED, file)); } @Override public void onFileDelete(File file) { - facade.sendNotification(MsgAPI.PROJECT_FILE_DELETED, file); + Gdx.app.postRunnable(() -> facade.sendNotification(MsgAPI.PROJECT_FILE_DELETED, file)); } @Override public void onFileChange(File file) { - facade.sendNotification(MsgAPI.PROJECT_FILE_MODIFIED, file); + Gdx.app.postRunnable(() -> facade.sendNotification(MsgAPI.PROJECT_FILE_MODIFIED, file)); } }; observer.addListener(listener); diff --git a/src/main/java/games/rednblack/editor/proxy/ResolutionManager.java b/src/main/java/games/rednblack/editor/proxy/ResolutionManager.java index 9db761c5..d794dd74 100644 --- a/src/main/java/games/rednblack/editor/proxy/ResolutionManager.java +++ b/src/main/java/games/rednblack/editor/proxy/ResolutionManager.java @@ -327,10 +327,10 @@ public class ResolutionManager extends Proxy { public void rePackProjectImagesForAllResolutions(boolean reloadProjectData, RepackCallback callback) { ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(() -> { - facade.sendNotification(MsgAPI.SHOW_LOADING_DIALOG); + Gdx.app.postRunnable(() -> facade.sendNotification(MsgAPI.SHOW_LOADING_DIALOG)); try { rePackProjectImagesForAllResolutionsSync(); - facade.sendNotification(MsgAPI.HIDE_LOADING_DIALOG); + Gdx.app.postRunnable(() -> facade.sendNotification(MsgAPI.HIDE_LOADING_DIALOG)); if (callback != null) callback.onRepack(true); } catch (Exception e) { diff --git a/src/main/java/games/rednblack/editor/splash/SplashMediator.java b/src/main/java/games/rednblack/editor/splash/SplashMediator.java index a9a05b74..b3abf773 100644 --- a/src/main/java/games/rednblack/editor/splash/SplashMediator.java +++ b/src/main/java/games/rednblack/editor/splash/SplashMediator.java @@ -76,8 +76,10 @@ public class SplashMediator extends Mediator { e.printStackTrace(); } - splash.loadedData(); - Gdx.app.postRunnable(() -> HyperLap2DApp.getInstance().mainWindow.setVisible(true)); + Gdx.app.postRunnable(() -> { + splash.loadedData(); + HyperLap2DApp.getInstance().mainWindow.setVisible(true); + }); }); executor.shutdown(); } diff --git a/src/main/java/games/rednblack/editor/view/ui/panel/ImportPanelMediator.java b/src/main/java/games/rednblack/editor/view/ui/panel/ImportPanelMediator.java index 2acd21e4..a1018876 100644 --- a/src/main/java/games/rednblack/editor/view/ui/panel/ImportPanelMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/panel/ImportPanelMediator.java @@ -130,7 +130,7 @@ public class ImportPanelMediator extends Mediator { @Override public void progressChanged(float value) { - viewComponent.getProgressBar().setValue(value); + Gdx.app.postRunnable(() -> viewComponent.getProgressBar().setValue(value)); } @Override