From 90e98a95b548c88efd882e8e74bc4b36dd9af8b7 Mon Sep 17 00:00:00 2001 From: plaa Date: Mon, 25 Oct 2010 19:02:31 +0000 Subject: [PATCH] SafetyMutex and rocket optimization updates git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@93 180e2498-e6e9-4542-8430-84ac67f01cd8 --- .classpath | 6 +- ChangeLog | 12 + build.xml | 7 +- doc/properties.txt | 8 + lib-test/hamcrest-core-1.3.0RC1.jar | Bin 0 -> 65910 bytes lib-test/hamcrest-library-1.3.0RC1.jar | Bin 0 -> 73982 bytes lib-test/jmock-2.6.0-RC2.jar | Bin 0 -> 309306 bytes lib-test/jmock-junit4-2.6.0-RC2.jar | Bin 0 -> 17867 bytes .../{junit-4.7.jar => junit-dep-4.8.2.jar} | Bin 232354 -> 218272 bytes .../sf/openrocket/document/Simulation.java | 167 ++++++++------ .../gui/dialogs/DebugLogDialog.java | 4 +- .../openrocket/gui/dialogs/DetailDialog.java | 27 ++- .../GeneralOptimizationDialog.java | 16 +- .../sf/openrocket/gui/main/BasicFrame.java | 92 +++++++- .../openrocket/gui/main/ExceptionHandler.java | 56 +++-- .../openrocket/gui/main/SimulationPanel.java | 1 - .../gui/main/SimulationRunDialog.java | 10 +- .../openrocket/gui/main/SimulationWorker.java | 4 - .../gui/scalefigure/RocketPanel.java | 5 +- src/net/sf/openrocket/logging/LogHelper.java | 171 +++++++++++--- src/net/sf/openrocket/logging/LogLevel.java | 10 +- .../logging/LogLevelBufferLogger.java | 8 +- src/net/sf/openrocket/logging/LogLine.java | 57 +++-- .../sf/openrocket/logging/TraceException.java | 11 + .../optimization/general/Function.java | 19 +- .../optimization/general/FunctionCache.java | 22 +- .../general/FunctionOptimizer.java | 3 +- .../general/OptimizationException.java | 22 ++ .../general/ParallelExecutorCache.java | 105 +++++---- .../general/ParallelFunctionCache.java | 24 +- .../MultidirectionalSearchOptimizer.java | 3 +- ...rameter.java => OptimizableParameter.java} | 8 +- ....java => OptimizableParameterService.java} | 4 +- .../RocketOptimizationFunction.java | 88 ++++--- .../rocketoptimization/SimulationDomain.java | 25 ++ .../SimulationModifier.java | 2 +- .../modifiers/GenericModifier.java | 162 +++++++++++++ .../parameters/MaximumAltitudeParameter.java | 32 +++ .../sf/openrocket/rocketcomponent/Rocket.java | 44 ++-- .../rocketcomponent/RocketComponent.java | 4 + .../BasicEventSimulationEngine.java | 11 +- src/net/sf/openrocket/startup/Startup.java | 15 ++ .../openrocket/util/ConcurrencyException.java | 26 +++ src/net/sf/openrocket/util/GUIUtil.java | 4 +- .../sf/openrocket/util/MemoryManagement.java | 137 +++++++++++ src/net/sf/openrocket/util/SafetyMutex.java | 171 ++++++++++++++ .../utils/TestFunctionOptimizer.java | 14 +- .../utils/TestFunctionOptimizerLoop.java | 14 +- .../TestRocketOptimizationFunction.java | 214 ++++++++++++++++++ test/net/sf/openrocket/util/TestMutex.java | 156 +++++++++++++ 50 files changed, 1681 insertions(+), 320 deletions(-) create mode 100644 lib-test/hamcrest-core-1.3.0RC1.jar create mode 100644 lib-test/hamcrest-library-1.3.0RC1.jar create mode 100644 lib-test/jmock-2.6.0-RC2.jar create mode 100644 lib-test/jmock-junit4-2.6.0-RC2.jar rename lib-test/{junit-4.7.jar => junit-dep-4.8.2.jar} (62%) create mode 100644 src/net/sf/openrocket/optimization/general/OptimizationException.java rename src/net/sf/openrocket/optimization/rocketoptimization/{RocketOptimizationParameter.java => OptimizableParameter.java} (65%) rename src/net/sf/openrocket/optimization/rocketoptimization/{RocketOptimizationParameterService.java => OptimizableParameterService.java} (79%) create mode 100644 src/net/sf/openrocket/optimization/rocketoptimization/SimulationDomain.java create mode 100644 src/net/sf/openrocket/optimization/rocketoptimization/modifiers/GenericModifier.java create mode 100644 src/net/sf/openrocket/optimization/rocketoptimization/parameters/MaximumAltitudeParameter.java create mode 100644 src/net/sf/openrocket/util/ConcurrencyException.java create mode 100644 src/net/sf/openrocket/util/MemoryManagement.java create mode 100644 src/net/sf/openrocket/util/SafetyMutex.java create mode 100644 test/net/sf/openrocket/optimization/rocketoptimization/TestRocketOptimizationFunction.java create mode 100644 test/net/sf/openrocket/util/TestMutex.java diff --git a/.classpath b/.classpath index c71fbb9c..31166a94 100644 --- a/.classpath +++ b/.classpath @@ -10,7 +10,6 @@ - @@ -18,5 +17,10 @@ + + + + + diff --git a/ChangeLog b/ChangeLog index 0f4e934f..efbb9793 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2010-10-25 Doug Pedrick + + * [BUG] Take launch lug radial angle into account when loading rkt file + +2010-10-24 Sampo Niskane + + * Added SafetyMutex and took into use in Simulation + +2010-10-18 Sampo Niskanen + + * Ignore Sun JRE bug in D3D + 2010-10-09 Sampo Niskanen * [BUG] Fixed conversion to freeform fin set diff --git a/build.xml b/build.xml index 6262bc0d..0540b3dc 100644 --- a/build.xml +++ b/build.xml @@ -36,8 +36,11 @@ - - + + + + + diff --git a/doc/properties.txt b/doc/properties.txt index ed069041..cbddc55f 100644 --- a/doc/properties.txt +++ b/doc/properties.txt @@ -25,6 +25,14 @@ openrocket.log.tracelevel Debugging options ----------------- +openrocket.debug + Turns on various options useful for debugging purposes. The parameters defined are: + openrocket.log.stdout=VBOSE + openrocket.log.tracelevel=VBOSE + openrocket.debug.menu=true + openrocket.debug.motordigest=true + + openrocket.debug.menu If defined the "Debug" menu will be displayed in the main application window. diff --git a/lib-test/hamcrest-core-1.3.0RC1.jar b/lib-test/hamcrest-core-1.3.0RC1.jar new file mode 100644 index 0000000000000000000000000000000000000000..1195cb7f58a9d6c221e2b012f2f315bf116db46e GIT binary patch literal 65910 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�tENK*ZS+yo`n4R@W|6&$tRH$zXZ&#jVl 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 literal 0 HcmV?d00001 diff --git a/lib-test/hamcrest-library-1.3.0RC1.jar b/lib-test/hamcrest-library-1.3.0RC1.jar new file mode 100644 index 0000000000000000000000000000000000000000..8e6568b5504c8fa457f918ed3ccbb6ee63191e58 GIT binary patch literal 73982 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 literal 0 HcmV?d00001 diff --git a/lib-test/jmock-junit4-2.6.0-RC2.jar b/lib-test/jmock-junit4-2.6.0-RC2.jar new file mode 100644 index 0000000000000000000000000000000000000000..129e5613606bc2ac70a8e1d43a996b500954a0d1 GIT binary patch literal 17867 zcmdU1TW}o5b-e?CTwpK&K>*@Q4-P?y++6^>ghagvkRn8p3P=K^1c)?A$Yz57IypNrGC6%J|MMRc zoe!G+6itu3^~uErH04h}K0(u|iRsBxCue4JQ>UgZr?_Bym5~d!>lMq+5py(ms7s%4 zB2Ok(tiqCQ;u&5(#;;GfwpFp`N1j?m`@^}1M&=HUn(3LUV@?$dZrNM)D)zExPCA8L zrc3YAL%jYgK|&kwD!YsMumxj|hrz+5bBmXj%Z00vc1cJ(V(p4f#a?u+3P_6dNy5Ir zVV{?(PO)-0(v^q1{OrG7d>9z>C%azP(^J5Aa5PsaS)TXfpa0$8qr)iWJ19l__%y($ z{W`VNAfF!8X)hf}(ZLj@HEO?Rl?EOAMn$9jX9e|)Pu{IM4(2JpT%NZ}`I!nPVcB*n zW2!?16RA<}*_W(qR=#98i}`bNFWCitzqPVd^ac-UG$_FdW=5H$2o_j#`|%5X*Q0FJd-WiDvcb^@emwC!xsv8SucbGAEc&6V(^_iVXfl`dFrk?+;RHl{)&(#V)( zPMl!g+IVtc14s^zGM{X4whF#!)S6}l^piIV_6p01m!b^rXUbK#V4o^761reVj`;~3 zPdbHC*(*AWQ+8#kJfEVhK|?fbP#1L@)IqvIon#oajdmNfi%%nz1II(@ZN%`wQH}Pk zJIxyPg)=+5B_04DUB?G_hSHF`r$XdQt%! zq+>g-j^UoQOMiCgL(;OtA5u$peRCw%|*{r*)0ChM>Bs6-^EU%}1!09*uzPQy}-?eH#GXiDJtn8a=D!x{x0*Ym3DfW zZ(JQb!(ytmQ2#fLbkZul(n+t<7x{EEMXzz6FX{AUdOby7X{R^1?^ksiB(I&m zmZCRP^mVLrR#cFXQ$@Q3+1MQs4cA^MLAm9{tEkHAj|z}b5o33)YBs1YJ6QFKp&)z_ z9OdX5?TBl$)fHc(^(PyTXODrFh*r|5W2U(1Se2>^jkL3dHtrx4SwR@(Sz!bE)0qh1 zzzVcAu@E|Qy1a~aScqE*t6C}NS#!CLRm$^3R(`L+Xpj|hu*D$?G#Lq2gbTB%-YT6Xi+)8jCs{s;{QoUdl zBDRlbN50n}ECUf4m@Jj-MXNMXDA=ACOc4O}EEJu2)laRm;V2er0YyM17v2`=ZC;!$ z#X*gfKvyfpQhpLLV^zv7M#;jrJ5Q$0=9LMZ03MTV$K%1yf9>$v}QTMeiE)2lR(2`Xht>nEoV1 ze`?U5(VrW1irF1OIVKVY{RRDHirzEmd-Q#ch6F$AxEqu3FpE~H_=<4TPr7c|)hN4M zc5Sn=WI1Npu}z=sg>u!IH;azR8q6%P-v=Duq4&XCr`)tzOfDLEU>c=s(R`|e<#hUa zpm|uVg6D+$9dpAXGuY+X6}h~i4zc>$(wA8;?}$3kiX5S^w=NV*rAgu-10K>HNp!;1YpM|s?OBLCkp;p2A&_gzAYTs;3|b{1TpYe^SE2W zb9SD~iBca;0d-t-VXj61$R z3}0D;uk1VD{Nyn_c^psJQy!!zaMeOba0eBSE5@UMJNC7A!0NS84S=F4A2=2FiEG?023gO2k#JUTcd6n#4x{f@nQ^- z)_7#fI)WiO6rbAIjw)~;16!VsD=Z1%|F$1e&(!dbD07FlU%ErRmu^vCZ~q$IBSWSg zxa!@B(;Dr%MY}&9{$MKF@ZMNMv;qD1eJt4a7$#*85M)I6AW$JpltB}SO`d`bJ&m`g zATQ4ZyfGldQ#6epPhk4b(Ro4Km4KKlikNoxCO`sD@PC3BX8z0C+3an)|08-pqp9JK zXs<@^(lK0^8vT&=P4`jH$Qli-(f)U7aOj`tfjcx95c?q0uto<2g$F+#Is5)EJ|6l} zyiGdZM#!vOJ_iur61dv})b|4IVIY18D4wAiTwSDD`W%(%N+`hA-p(GP{7*7xBCWBXHJ`!%;-oe8j`iS6?fcyC6dR;n@gX zo_YpWSWsp95@G2c9m2k?15>zN2j6>B)R&_ENd8G$s=G=P4M!Z~_0WQfk2##Z((L<4 zvko>Oaj6vDV?b~16bT+!rHvC_-!VK80w@*d^3dzZiXa&!yrEgwa=a3I(6Bd?(=)RZ z(ktP^OuA3li;%t9Y43Ka$-M8H}p<{LMLVTFNc!*ubX;UCz6Gv{PD*TQfCiVJu2h7kUpHB1XjE>yPSshnXd^OD}j&nK|*t0s6!3@8c< zQ2G};u_7+<>2iv$q&Rc3jb7C0^Yn!jCr$e3Y&+*o`Z#a0jSB6YH|Zl=$1?JhCq+MV z0#W1iZpCti|5Z0%D-ytSmIt?BV+r6O!JCiF=myvXAqjH5i&1IVNZ*Llp}Y$@cpYay zOjh4@E(T%}i@Y=%-5jkO$NT0Q63A|-vIjC{-3cv*qBSN(J{^ks(9I3DpyPM2&+r0 z=8|;{(LMs~Bu8ZYKWxf?+n_h-s|J0I-h@b*7D8}?zRs!Hw+s?_mv7KFQ!@R53`%}e zG<>>Ek1YsBOU<`4LY31{D<#u@k#*>=_lA8#@G$LlV(gwUaFeiLE1~dJ5LZ9g`~MWU zssw2~q*q*vhP9t2fc;ET4n0C_h0T)w7jicXRY0Fh*bZizJN;Gsj1tt8$Zmr9yJNh|B%|38 zqy>DBtse=35!`941L3hTtSROF?aU&;Ye7gZqfbz-Xc*0TR5uBOCf5kU5@I`HE=p!;T znjZOxx;P}9!bLZSgxij^Atv07Ovv^%>V20+wc+n^2;7J8x4##`?vCL#LfE^bcNb3F zj&Igz_ifsrRF3-ndAap<4a9X4d z5#x*qW|>7VDn{}Z6UXVCD}cc16Q4}^?s2?3jvg%tqFY3kLy~JLW_R%v-lltpfckwQ zdNN5c34Wc9aJMTMwo7rBFb8q&$|uZSIqcII=%he^(;z(WJxGLb=7~d3F3-Rb4+{SI z_V+*Oz+CW$(@2}LIf>|VgljNNF2C4^f(#wV>`!qy#uibAfqDS!@xxnRhS##Gow0~d z{VC$t&3p2{T1K&LQ}N5)?9l~|c-rbu9s^z9a; zZ;>kB`T?4>z~qG%l|jh-aHj%+d@mB^I{<{QcB1;EMO^Jhso^?Wv~n^|*0?wY=Oyi|0qnv%MkyvJHGW!&Pan^MWNMHz?47J4#DoU?7m zgmyNq1+bFgRZtBo_F=J=g?P~^dP~@o=IC(FUXa_jHlE+$k`>;XMgr3@=gZff9QWqW zam?US*~M;lMLo*vE7iGDv7lmAk>vm~6>K~lUoQlq z5)C9^0WvMZukk032?E4T2K1noj>}bR_M_Dh48^Oi*lwE1mc7OVYI8ImGs-2P0Z;CO*>G(Mm@VUi#Tax6KE2y>s*JZ$EhQ&YWfSzD)IzokNE@tnj zq$wBe8&VanDnX!JU?9)2uZ!(=`5>)`Ker&r%qYZtw#Y^~8KlS-;Rvn`0g*fU8zwgp zZ?j3=Q97~ESb9;gIqWlwsUJ2&P+aMgi7-haCMzb>erMTBh(WH|;PLhXcI|Yo1QQsd zp~eg3>iA4`1-VGiyJ)!%Dnh*UK-H;w_WVG`Y(!zu8B%DK;sht&g#%0a#p_ptMv4hM z-9bypR@i{&I4+g^gb%fnua%4QreALxie<1>pMb?Z8IxStC6pC@$%oWeESp&5k&=d_ zY;jw;dc;+Ye1-fMST+P3SuauA6H=d({iFBQ5;emz zSk5J@P0|Zo?#EKbWh?1SCJBNkG$L#goqdfZj@w7(tJVsq2R2?5#zHp)7qT|qC+r=tyoS;SYik_}*C}FaL{=Sy;%iB8Uy^fEzZv-@&Lgk=_oK&taQ>Ma z2qpN##ShIr{^z+6&X)~NZg0->58ZbKBks%c+RtG-J2%l_4;oRsmAJEVk_s zVR%s&)`ZVgc0HI4xzS-BmX0f@cj26R!Xd5WktV&-DCvP$szz5@S{c1q-9XG?)8kmgF1j|{4C*j(eoOud%%)VhQuaxXzQ@~>!$Keehi-n03 zvvB1ZVDS5)NCAt-D>DlxRj^d`lYVh>9!#~}t>T;H>ohMuK=MOP34{Y_F2OWi|Kg|* z2LXKHYT9q0=#(&EP$X82x`Zm@Q{jltmu>Z1DD{I18Hr0p0u0Px1pFkka1~KOnmzO= z)!bGR&dssMdk!YuM=`@W4xb!Y!<&jSZpw#12>zI&DB2pPCVO){&vSq)Za5vxJxhh) zvhWSeEnJ)tcOcx4gK3q4Ihn^T4{EY4O#&pM;2Mb`xr$Bz}D9nW3WcO@Yct zNHJkJDtczAXcS2EPa82A!mo&jRZ4OLrDck(Z@6I`;e}5*+dkYdFqEzRSVNQ^Mg6w_ zlW0#B+N5PUjWTdj4&|9i+CVs1C+_m0+>{LUZ~X-<)|x;3I;`>gvfdvT?$j|>yyD7( z!l>_H3l6iBEZl5($yoh~Lk5j?%X-qm0CoB$%4rn)ps9VN5`CKSpcxKz362VlPmf@Q zubAXbGD7j2)(KETv=i~J--kWyq(=TUu}Ksz$5AF?lW4h9Jreys{LQ94J;3Vw?h9)M zYNR1Lg1jDzVa2i(#?`{yb5OA02V?SGV(Ozn!%!jml&_=2L!br7T5;u;wJ_pOnu%Ic zZ0jt$VROSW7pl@AyC{}ivt_^(@NrWTC*vWlrN5OcQtSVD1@Qt~DxXa7Rqz)SEdfMFOD4PgX-Rv}J!@((Nc2)+0E7uN$N97(^{H;Q7t zUrmQ_e})~f=Fu*jZK-9FP?N>)A=EeVXEvHcjRumn(CZaFhtPk5nOYxu#C56179Jv5 zLJ!juw aCmcqxDSH0QmaPn<8~;9swfv&cAO8#VU{c%w literal 0 HcmV?d00001 diff --git a/lib-test/junit-4.7.jar b/lib-test/junit-dep-4.8.2.jar similarity index 62% rename from lib-test/junit-4.7.jar rename to lib-test/junit-dep-4.8.2.jar index 700ad6952c76177568f705f2666ea994da565ba4..f28b4ef0174806faec9ba54a0db0b35279278dc4 100644 GIT binary patch delta 55125 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≧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 Q7#kQx`pEr#(5Eo|A3qh2ApigX delta 69306 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 z%0D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ΐzTWf}F!C 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 diff --git a/src/net/sf/openrocket/document/Simulation.java b/src/net/sf/openrocket/document/Simulation.java index db462aad..9d5d0cd3 100644 --- a/src/net/sf/openrocket/document/Simulation.java +++ b/src/net/sf/openrocket/document/Simulation.java @@ -27,8 +27,16 @@ import net.sf.openrocket.simulation.listeners.SimulationListener; import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.ChangeSource; +import net.sf.openrocket.util.SafetyMutex; - +/** + * A class defining a simulation, its conditions and simulated data. + *

+ * This class is not thread-safe and enforces single-threaded access with a + * SafetyMutex. + * + * @author Sampo Niskanen + */ public class Simulation implements ChangeSource, Cloneable { private static final LogHelper log = Application.getLogger(); @@ -49,6 +57,7 @@ public class Simulation implements ChangeSource, Cloneable { NOT_SIMULATED } + private final SafetyMutex mutex = new SafetyMutex(); private final Rocket rocket; @@ -146,6 +155,7 @@ public class Simulation implements ChangeSource, Cloneable { * @return the rocket. */ public Rocket getRocket() { + mutex.verify(); return rocket; } @@ -157,6 +167,7 @@ public class Simulation implements ChangeSource, Cloneable { * @return a newly created Configuration of the launch conditions. */ public Configuration getConfiguration() { + mutex.verify(); Configuration c = new Configuration(rocket); c.setMotorConfigurationID(conditions.getMotorConfigurationID()); c.setAllStages(); @@ -171,6 +182,7 @@ public class Simulation implements ChangeSource, Cloneable { * @return the simulation conditions. */ public GUISimulationConditions getConditions() { + mutex.verify(); return conditions; } @@ -182,6 +194,7 @@ public class Simulation implements ChangeSource, Cloneable { * @return the actual list of simulation listeners. */ public List getSimulationListeners() { + mutex.verify(); return simulationListeners; } @@ -192,6 +205,7 @@ public class Simulation implements ChangeSource, Cloneable { * @return the name for the simulation. */ public String getName() { + mutex.verify(); return name; } @@ -202,15 +216,20 @@ public class Simulation implements ChangeSource, Cloneable { * @param name the name of the simulation. */ public void setName(String name) { - if (this.name.equals(name)) - return; - - if (name == null) - this.name = ""; - else - this.name = name; - - fireChangeEvent(); + mutex.lock("setName"); + try { + if (this.name.equals(name)) + return; + + if (name == null) + this.name = ""; + else + this.name = name; + + fireChangeEvent(); + } finally { + mutex.unlock("setName"); + } } @@ -222,6 +241,8 @@ public class Simulation implements ChangeSource, Cloneable { * @see Status */ public Status getStatus() { + mutex.verify(); + if (status == Status.UPTODATE || status == Status.LOADED) { if (rocket.getFunctionalModID() != simulatedRocketID || !conditions.equals(simulatedConditions)) @@ -236,54 +257,59 @@ public class Simulation implements ChangeSource, Cloneable { public void simulate(SimulationListener... additionalListeners) throws SimulationException { - - if (this.status == Status.EXTERNAL) { - throw new SimulationException("Cannot simulate imported simulation."); - } - - SimulationEngine simulator; - + mutex.lock("simulate"); try { - simulator = simulationEngineClass.newInstance(); - } catch (InstantiationException e) { - throw new IllegalStateException("Cannot instantiate simulator.", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Cannot access simulator instance?! BUG!", e); - } catch (NullPointerException e) { - throw new IllegalStateException("Simulator null", e); - } - - SimulationConditions simulationConditions = conditions.toSimulationConditions(); - for (SimulationListener l : additionalListeners) { - simulationConditions.getSimulationListenerList().add(l); - } - - for (String className : simulationListeners) { - SimulationListener l = null; + + if (this.status == Status.EXTERNAL) { + throw new SimulationException("Cannot simulate imported simulation."); + } + + SimulationEngine simulator; + try { - Class c = Class.forName(className); - l = (SimulationListener) c.newInstance(); - } catch (Exception e) { - throw new SimulationListenerException("Could not instantiate listener of " + - "class: " + className, e); + simulator = simulationEngineClass.newInstance(); + } catch (InstantiationException e) { + throw new IllegalStateException("Cannot instantiate simulator.", e); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Cannot access simulator instance?! BUG!", e); + } catch (NullPointerException e) { + throw new IllegalStateException("Simulator null", e); + } + + SimulationConditions simulationConditions = conditions.toSimulationConditions(); + for (SimulationListener l : additionalListeners) { + simulationConditions.getSimulationListenerList().add(l); + } + + for (String className : simulationListeners) { + SimulationListener l = null; + try { + Class c = Class.forName(className); + l = (SimulationListener) c.newInstance(); + } catch (Exception e) { + throw new SimulationListenerException("Could not instantiate listener of " + + "class: " + className, e); + } + simulationConditions.getSimulationListenerList().add(l); } - simulationConditions.getSimulationListenerList().add(l); + + long t1, t2; + log.debug("Simulation: calling simulator"); + t1 = System.currentTimeMillis(); + simulatedData = simulator.simulate(simulationConditions); + t2 = System.currentTimeMillis(); + log.debug("Simulation: returning from simulator, simulation took " + (t2 - t1) + "ms"); + + // Set simulated info after simulation, will not be set in case of exception + simulatedConditions = conditions.clone(); + simulatedMotors = getConfiguration().getMotorConfigurationDescription(); + simulatedRocketID = rocket.getFunctionalModID(); + + status = Status.UPTODATE; + fireChangeEvent(); + } finally { + mutex.unlock("simulate"); } - - long t1, t2; - log.debug("Simulation: calling simulator"); - t1 = System.currentTimeMillis(); - simulatedData = simulator.simulate(simulationConditions); - t2 = System.currentTimeMillis(); - log.debug("Simulation: returning from simulator, simulation took " + (t2 - t1) + "ms"); - - // Set simulated info after simulation, will not be set in case of exception - simulatedConditions = conditions.clone(); - simulatedMotors = getConfiguration().getMotorConfigurationDescription(); - simulatedRocketID = rocket.getFunctionalModID(); - - status = Status.UPTODATE; - fireChangeEvent(); } @@ -294,6 +320,7 @@ public class Simulation implements ChangeSource, Cloneable { * @return the conditions used in the previous simulation, or null. */ public GUISimulationConditions getSimulatedConditions() { + mutex.verify(); return simulatedConditions; } @@ -306,6 +333,7 @@ public class Simulation implements ChangeSource, Cloneable { * @see FlightData#getWarningSet() */ public WarningSet getSimulatedWarnings() { + mutex.verify(); if (simulatedData == null) return null; return simulatedData.getWarningSet(); @@ -321,6 +349,7 @@ public class Simulation implements ChangeSource, Cloneable { * @see Rocket#getMotorConfigurationNameOrDescription(String) */ public String getSimulatedMotorDescription() { + mutex.verify(); return simulatedMotors; } @@ -331,6 +360,7 @@ public class Simulation implements ChangeSource, Cloneable { * @return the flight data of the previous simulation, or null. */ public FlightData getSimulatedData() { + mutex.verify(); return simulatedData; } @@ -344,6 +374,7 @@ public class Simulation implements ChangeSource, Cloneable { */ @SuppressWarnings("unchecked") public Simulation copy() { + mutex.lock("copy"); try { Simulation copy = (Simulation) super.clone(); @@ -359,9 +390,10 @@ public class Simulation implements ChangeSource, Cloneable { return copy; - } catch (CloneNotSupportedException e) { throw new BugException("Clone not supported, BUG", e); + } finally { + mutex.unlock("copy"); } } @@ -375,26 +407,33 @@ public class Simulation implements ChangeSource, Cloneable { */ @SuppressWarnings("unchecked") public Simulation duplicateSimulation(Rocket newRocket) { - Simulation copy = new Simulation(newRocket); - - copy.name = this.name; - copy.conditions.copyFrom(this.conditions); - copy.simulationListeners = (ArrayList) this.simulationListeners.clone(); - copy.simulationStepperClass = this.simulationStepperClass; - copy.aerodynamicCalculatorClass = this.aerodynamicCalculatorClass; - - return copy; + mutex.lock("duplicateSimulation"); + try { + Simulation copy = new Simulation(newRocket); + + copy.name = this.name; + copy.conditions.copyFrom(this.conditions); + copy.simulationListeners = (ArrayList) this.simulationListeners.clone(); + copy.simulationStepperClass = this.simulationStepperClass; + copy.aerodynamicCalculatorClass = this.aerodynamicCalculatorClass; + + return copy; + } finally { + mutex.unlock("duplicateSimulation"); + } } @Override public void addChangeListener(ChangeListener listener) { + mutex.verify(); listeners.add(listener); } @Override public void removeChangeListener(ChangeListener listener) { + mutex.verify(); listeners.remove(listener); } diff --git a/src/net/sf/openrocket/gui/dialogs/DebugLogDialog.java b/src/net/sf/openrocket/gui/dialogs/DebugLogDialog.java index c67568fc..927cc548 100644 --- a/src/net/sf/openrocket/gui/dialogs/DebugLogDialog.java +++ b/src/net/sf/openrocket/gui/dialogs/DebugLogDialog.java @@ -141,7 +141,8 @@ public class DebugLogDialog extends JDialog { panel.add(new JLabel("Display log lines:"), "gapright para, split"); for (LogLevel l : LogLevel.values()) { JCheckBox box = new JCheckBox(l.toString()); - box.setSelected(true); + // By default display DEBUG and above + box.setSelected(l.atLeast(LogLevel.DEBUG)); box.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -279,6 +280,7 @@ public class DebugLogDialog extends JDialog { sorter.setComparator(1, NumericComparator.INSTANCE); sorter.setComparator(4, new LocationComparator()); table.setRowSorter(sorter); + sorter.setRowFilter(new LogFilter()); panel.add(new JScrollPane(table), "span, grow, width " + diff --git a/src/net/sf/openrocket/gui/dialogs/DetailDialog.java b/src/net/sf/openrocket/gui/dialogs/DetailDialog.java index 05a19950..87e36e67 100644 --- a/src/net/sf/openrocket/gui/dialogs/DetailDialog.java +++ b/src/net/sf/openrocket/gui/dialogs/DetailDialog.java @@ -3,16 +3,31 @@ package net.sf.openrocket.gui.dialogs; import java.awt.Component; import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; -public class DetailDialog { +import net.sf.openrocket.util.GUIUtil; - public static void showDetailedMessageDialog(Component parentComponent, Object message, - String details, String title, int messageType) { +public class DetailDialog { + + public static void showDetailedMessageDialog(Component parentComponent, Object message, + String details, String title, int messageType) { - // TODO: HIGH: Detailed dialog - JOptionPane.showMessageDialog(parentComponent, message, title, messageType, null); + if (details != null) { + JTextArea textArea = null; + textArea = new JTextArea(5, 40); + textArea.setText(details); + textArea.setCaretPosition(0); + textArea.setEditable(false); + GUIUtil.changeFontSize(textArea, -2); + JOptionPane.showMessageDialog(parentComponent, + new Object[] { message, new JScrollPane(textArea) }, + title, messageType, null); + } else { + JOptionPane.showMessageDialog(parentComponent, message, title, messageType, null); + } } - + } diff --git a/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java b/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java index 39f9d2b2..ed55079f 100644 --- a/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java +++ b/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java @@ -12,15 +12,15 @@ import java.util.ServiceLoader; import javax.swing.JDialog; import net.sf.openrocket.document.OpenRocketDocument; -import net.sf.openrocket.optimization.rocketoptimization.RocketOptimizationParameter; -import net.sf.openrocket.optimization.rocketoptimization.RocketOptimizationParameterService; +import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameter; +import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameterService; import net.sf.openrocket.optimization.rocketoptimization.SimulationModifier; import net.sf.openrocket.optimization.rocketoptimization.SimulationModifierService; import net.sf.openrocket.util.BugException; public class GeneralOptimizationDialog extends JDialog { - private final List optimizationParameters = new ArrayList(); + private final List optimizationParameters = new ArrayList(); private final Map> simulationModifiers = new HashMap>(); @@ -36,10 +36,10 @@ public class GeneralOptimizationDialog extends JDialog { private void loadOptimizationParameters() { - ServiceLoader loader = - ServiceLoader.load(RocketOptimizationParameterService.class); + ServiceLoader loader = + ServiceLoader.load(OptimizableParameterService.class); - for (RocketOptimizationParameterService g : loader) { + for (OptimizableParameterService g : loader) { optimizationParameters.addAll(g.getParameters(document)); } @@ -47,9 +47,9 @@ public class GeneralOptimizationDialog extends JDialog { throw new BugException("No rocket optimization parameters found, distribution built wrong."); } - Collections.sort(optimizationParameters, new Comparator() { + Collections.sort(optimizationParameters, new Comparator() { @Override - public int compare(RocketOptimizationParameter o1, RocketOptimizationParameter o2) { + public int compare(OptimizableParameter o1, OptimizableParameter o2) { return o1.getName().compareTo(o2.getName()); } }); diff --git a/src/net/sf/openrocket/gui/main/BasicFrame.java b/src/net/sf/openrocket/gui/main/BasicFrame.java index 4031be8a..4f1561ce 100644 --- a/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -25,6 +25,8 @@ import java.net.URL; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; import java.util.concurrent.ExecutionException; import javax.swing.Action; @@ -69,6 +71,7 @@ import net.sf.openrocket.gui.dialogs.AboutDialog; import net.sf.openrocket.gui.dialogs.BugReportDialog; import net.sf.openrocket.gui.dialogs.ComponentAnalysisDialog; import net.sf.openrocket.gui.dialogs.DebugLogDialog; +import net.sf.openrocket.gui.dialogs.DetailDialog; import net.sf.openrocket.gui.dialogs.ExampleDesignDialog; import net.sf.openrocket.gui.dialogs.LicenseDialog; import net.sf.openrocket.gui.dialogs.MotorDatabaseLoadingDialog; @@ -87,6 +90,8 @@ import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.GUIUtil; import net.sf.openrocket.util.Icons; +import net.sf.openrocket.util.MemoryManagement; +import net.sf.openrocket.util.MemoryManagement.MemoryData; import net.sf.openrocket.util.OpenFileWorker; import net.sf.openrocket.util.Prefs; import net.sf.openrocket.util.Reflection; @@ -728,10 +733,86 @@ public class BasicFrame extends JFrame { }); menu.add(item); + menu.addSeparator(); + + + item = new JMenuItem("Memory statistics"); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + log.user("Memory statistics selected"); + + // Get discarded but remaining objects (this also runs System.gc multiple times) + List objects = MemoryManagement.getRemainingObjects(); + StringBuilder sb = new StringBuilder(); + sb.append("Objects that should have been garbage-collected but have not been:\n"); + int count = 0; + for (MemoryData data : objects) { + Object o = data.getReference().get(); + if (o == null) + continue; + sb.append("Age ").append(System.currentTimeMillis() - data.getRegistrationTime()) + .append(" ms: ").append(o).append('\n'); + count++; + // Explicitly null the strong reference to avoid possibility of invisible references + o = null; + } + sb.append("Total: " + count); + + // Get basic memory stats + System.gc(); + long max = Runtime.getRuntime().maxMemory(); + long free = Runtime.getRuntime().freeMemory(); + long used = max - free; + String[] stats = new String[4]; + stats[0] = "Memory usage:"; + stats[1] = String.format(" Max memory: %.1f MB", max / 1024.0 / 1024.0); + stats[2] = String.format(" Used memory: %.1f MB (%.0f%%)", used / 1024.0 / 1024.0, 100.0 * used / max); + stats[3] = String.format(" Free memory: %.1f MB (%.0f%%)", free / 1024.0 / 1024.0, 100.0 * free / max); + + + DetailDialog.showDetailedMessageDialog(BasicFrame.this, stats, sb.toString(), + "Memory statistics", JOptionPane.INFORMATION_MESSAGE); + } + }); + menu.add(item); + + + item = new JMenuItem("Exhaust memory"); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + log.user("Exhaust memory selected"); + LinkedList data = new LinkedList(); + int count = 0; + final int bytesPerArray = 10240; + try { + while (true) { + byte[] array = new byte[bytesPerArray]; + for (int i = 0; i < bytesPerArray; i++) { + array[i] = (byte) i; + } + data.add(array); + count++; + } + } catch (OutOfMemoryError error) { + data = null; + long size = bytesPerArray * (long) count; + String s = String.format("OutOfMemory occurred after %d iterations (approx. %.1f MB consumed)", + count, size / 1024.0 / 1024.0); + log.debug(s, error); + JOptionPane.showMessageDialog(BasicFrame.this, s); + } + } + }); + menu.add(item); + + menu.addSeparator(); item = new JMenuItem("Exception here"); item.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { log.user("Exception here selected"); throw new RuntimeException("Testing exception from menu action listener"); @@ -769,13 +850,22 @@ public class BasicFrame extends JFrame { }); menu.add(item); + item = new JMenuItem("OutOfMemoryError here"); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + log.user("OutOfMemoryError here selected"); + throw new OutOfMemoryError("Testing OutOfMemoryError from menu action listener"); + } + }); + menu.add(item); + return menu; } - /** * Select the tab on the main pane. * diff --git a/src/net/sf/openrocket/gui/main/ExceptionHandler.java b/src/net/sf/openrocket/gui/main/ExceptionHandler.java index 384aee18..9fbc9a84 100644 --- a/src/net/sf/openrocket/gui/main/ExceptionHandler.java +++ b/src/net/sf/openrocket/gui/main/ExceptionHandler.java @@ -5,8 +5,8 @@ import javax.swing.SwingUtilities; import net.sf.openrocket.gui.dialogs.BugReportDialog; import net.sf.openrocket.logging.LogHelper; +import net.sf.openrocket.logging.TraceException; import net.sf.openrocket.startup.Application; -import net.sf.openrocket.util.BugException; public class ExceptionHandler implements Thread.UncaughtExceptionHandler { @@ -63,6 +63,7 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler { } else { log.info("Exception handler not on EDT, invoking dialog on EDT"); SwingUtilities.invokeAndWait(new Runnable() { + @Override public void run() { showDialog(thread, throwable); } @@ -76,7 +77,7 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler { log.error("Caught exception while handling exception", ex); System.err.println("Exception in exception handler, dumping exception:"); ex.printStackTrace(); - } catch (Throwable ignore) { + } catch (Exception ignore) { } } finally { @@ -90,11 +91,14 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler { /** * Handle an error condition programmatically without throwing an exception. * This can be used in cases where recovery of the error is desirable. + *

+ * This method is guaranteed never to throw an exception, and can thus be safely + * used in finally blocks. * * @param message the error message. */ public static void handleErrorCondition(String message) { - log.error(1, message); + log.error(1, message, new TraceException()); handleErrorCondition(new InternalException(message)); } @@ -102,6 +106,9 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler { /** * Handle an error condition programmatically without throwing an exception. * This can be used in cases where recovery of the error is desirable. + *

+ * This method is guaranteed never to throw an exception, and can thus be safely + * used in finally blocks. * * @param message the error message. * @param exception the exception that occurred. @@ -115,36 +122,39 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler { /** * Handle an error condition programmatically without throwing an exception. * This can be used in cases where recovery of the error is desirable. + *

+ * This method is guaranteed never to throw an exception, and can thus be safely + * used in finally blocks. * * @param exception the exception that occurred. */ public static void handleErrorCondition(final Exception exception) { - if (!(exception instanceof InternalException)) { - log.error(1, "Error occurred", exception); - } - final Thread thread = Thread.currentThread(); - final ExceptionHandler handler = instance; - - if (handler == null) { - // Not initialized, throw the exception - throw new BugException("Error condition before exception handling has been initialized", exception); - } - try { + if (!(exception instanceof InternalException)) { + log.error(1, "Error occurred", exception); + } + final Thread thread = Thread.currentThread(); + final ExceptionHandler handler = instance; + + if (handler == null) { + log.error("Error condition occurred before exception handling has been initialized", exception); + return; + } + if (SwingUtilities.isEventDispatchThread()) { log.info("Running in EDT, showing dialog"); handler.showDialog(thread, exception); } else { log.info("Not in EDT, invoking and waiting for dialog"); SwingUtilities.invokeAndWait(new Runnable() { + @Override public void run() { handler.showDialog(thread, exception); } }); } } catch (Exception e) { - log.error("Exception occurred while showing error dialog", e); - e.printStackTrace(); + log.error("Exception occurred in error handler", e); } } @@ -289,6 +299,8 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler { */ private static boolean isNonFatalJREBug(Throwable t) { + // NOTE: Calling method logs the entire throwable, so log only message here + /* * Detect and ignore bug 6828938 in Sun JRE 1.6.0_14 - 1.6.0_16. */ @@ -346,6 +358,18 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler { return true; } } + + /* + * Detect Sun JRE bug in D3D + */ + if (t instanceof ClassCastException) { + if (t.getMessage().equals("sun.awt.Win32GraphicsConfig cannot be cast to sun.java2d.d3d.D3DGraphicsConfig")) { + log.warn("Ignoring Sun JRE bug " + + "(see http://forums.sun.com/thread.jspa?threadID=5440525): " + t); + return true; + } + } + return false; } diff --git a/src/net/sf/openrocket/gui/main/SimulationPanel.java b/src/net/sf/openrocket/gui/main/SimulationPanel.java index 5fd4e1a9..644605db 100644 --- a/src/net/sf/openrocket/gui/main/SimulationPanel.java +++ b/src/net/sf/openrocket/gui/main/SimulationPanel.java @@ -226,7 +226,6 @@ public class SimulationPanel extends JPanel { // Set simulation status icon Simulation.Status status = document.getSimulation(row).getStatus(); - System.out.println("status=" + status); label.setIcon(Icons.SIMULATION_STATUS_ICON_MAP.get(status)); diff --git a/src/net/sf/openrocket/gui/main/SimulationRunDialog.java b/src/net/sf/openrocket/gui/main/SimulationRunDialog.java index c37ceef2..9b94ec61 100644 --- a/src/net/sf/openrocket/gui/main/SimulationRunDialog.java +++ b/src/net/sf/openrocket/gui/main/SimulationRunDialog.java @@ -69,7 +69,13 @@ public class SimulationRunDialog extends JDialog { private final JProgressBar progressBar; + /* + * NOTE: Care must be used when accessing the simulation parameters, since they + * are being run in another thread. Mutexes are used to avoid concurrent usage, which + * will result in an exception being thrown! + */ private final Simulation[] simulations; + private final String[] simulationNames; private final SimulationWorker[] simulationWorkers; private final SimulationStatus[] simulationStatuses; private final double[] simulationMaxAltitude; @@ -87,6 +93,7 @@ public class SimulationRunDialog extends JDialog { // Initialize the simulations int n = simulations.length; + simulationNames = new String[n]; simulationWorkers = new SimulationWorker[n]; simulationStatuses = new SimulationStatus[n]; simulationMaxAltitude = new double[n]; @@ -94,6 +101,7 @@ public class SimulationRunDialog extends JDialog { simulationDone = new boolean[n]; for (int i = 0; i < n; i++) { + simulationNames[i] = simulations[i].getName(); simulationWorkers[i] = new InteractiveSimulationWorker(simulations[i], i); executor.execute(simulationWorkers[i]); } @@ -201,7 +209,7 @@ public class SimulationRunDialog extends JDialog { log.debug("Progressbar value " + progress); // Update the simulation fields - simLabel.setText("Running " + simulations[index].getName()); + simLabel.setText("Running " + simulationNames[index]); if (simulationStatuses[index] == null) { log.debug("No simulation status data available, setting empty labels"); timeLabel.setText(""); diff --git a/src/net/sf/openrocket/gui/main/SimulationWorker.java b/src/net/sf/openrocket/gui/main/SimulationWorker.java index 9e6f62bc..f348fbcd 100644 --- a/src/net/sf/openrocket/gui/main/SimulationWorker.java +++ b/src/net/sf/openrocket/gui/main/SimulationWorker.java @@ -54,8 +54,6 @@ public abstract class SimulationWorker extends SwingWorkermessage the String message (may be null). *

  • cause the exception that caused this log (may be null). * + *

    + * The logging methods are guaranteed never to throw an exception, and can thus be safely + * used in finally blocks. * * @author Sampo Niskanen */ @@ -56,7 +59,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void verbose(String message) { - log(createLogLine(0, LogLevel.VBOSE, message, null)); + try { + log(createLogLine(0, LogLevel.VBOSE, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -66,7 +73,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void verbose(String message, Throwable cause) { - log(createLogLine(0, LogLevel.VBOSE, message, cause)); + try { + log(createLogLine(0, LogLevel.VBOSE, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -76,7 +87,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void verbose(int levels, String message) { - log(createLogLine(levels, LogLevel.VBOSE, message, null)); + try { + log(createLogLine(levels, LogLevel.VBOSE, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -87,7 +102,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void verbose(int levels, String message, Throwable cause) { - log(createLogLine(levels, LogLevel.VBOSE, message, cause)); + try { + log(createLogLine(levels, LogLevel.VBOSE, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -97,7 +116,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void debug(String message) { - log(createLogLine(0, LogLevel.DEBUG, message, null)); + try { + log(createLogLine(0, LogLevel.DEBUG, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -107,7 +130,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void debug(String message, Throwable cause) { - log(createLogLine(0, LogLevel.DEBUG, message, cause)); + try { + log(createLogLine(0, LogLevel.DEBUG, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -117,7 +144,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void debug(int levels, String message) { - log(createLogLine(levels, LogLevel.DEBUG, message, null)); + try { + log(createLogLine(levels, LogLevel.DEBUG, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -128,7 +159,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void debug(int levels, String message, Throwable cause) { - log(createLogLine(levels, LogLevel.DEBUG, message, cause)); + try { + log(createLogLine(levels, LogLevel.DEBUG, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -138,7 +173,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void info(String message) { - log(createLogLine(0, LogLevel.INFO, message, null)); + try { + log(createLogLine(0, LogLevel.INFO, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -148,7 +187,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void info(String message, Throwable cause) { - log(createLogLine(0, LogLevel.INFO, message, cause)); + try { + log(createLogLine(0, LogLevel.INFO, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -158,7 +201,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void info(int levels, String message) { - log(createLogLine(levels, LogLevel.INFO, message, null)); + try { + log(createLogLine(levels, LogLevel.INFO, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -169,7 +216,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void info(int levels, String message, Throwable cause) { - log(createLogLine(levels, LogLevel.INFO, message, cause)); + try { + log(createLogLine(levels, LogLevel.INFO, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -179,7 +230,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void user(String message) { - log(createLogLine(0, LogLevel.USER, message, null)); + try { + log(createLogLine(0, LogLevel.USER, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -189,7 +244,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void user(String message, Throwable cause) { - log(createLogLine(0, LogLevel.USER, message, cause)); + try { + log(createLogLine(0, LogLevel.USER, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -199,7 +258,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void user(int levels, String message) { - log(createLogLine(levels, LogLevel.USER, message, null)); + try { + log(createLogLine(levels, LogLevel.USER, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -210,7 +273,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void user(int levels, String message, Throwable cause) { - log(createLogLine(levels, LogLevel.USER, message, cause)); + try { + log(createLogLine(levels, LogLevel.USER, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -220,7 +287,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void warn(String message) { - log(createLogLine(0, LogLevel.WARN, message, null)); + try { + log(createLogLine(0, LogLevel.WARN, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -230,7 +301,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void warn(String message, Throwable cause) { - log(createLogLine(0, LogLevel.WARN, message, cause)); + try { + log(createLogLine(0, LogLevel.WARN, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -240,7 +315,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void warn(int levels, String message) { - log(createLogLine(levels, LogLevel.WARN, message, null)); + try { + log(createLogLine(levels, LogLevel.WARN, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -251,7 +330,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void warn(int levels, String message, Throwable cause) { - log(createLogLine(levels, LogLevel.WARN, message, cause)); + try { + log(createLogLine(levels, LogLevel.WARN, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -261,7 +344,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void error(String message) { - log(createLogLine(0, LogLevel.ERROR, message, null)); + try { + log(createLogLine(0, LogLevel.ERROR, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -271,7 +358,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void error(String message, Throwable cause) { - log(createLogLine(0, LogLevel.ERROR, message, cause)); + try { + log(createLogLine(0, LogLevel.ERROR, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -281,7 +372,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void error(int levels, String message) { - log(createLogLine(levels, LogLevel.ERROR, message, null)); + try { + log(createLogLine(levels, LogLevel.ERROR, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -292,7 +387,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void error(int levels, String message, Throwable cause) { - log(createLogLine(levels, LogLevel.ERROR, message, cause)); + try { + log(createLogLine(levels, LogLevel.ERROR, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -304,7 +403,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void log(LogLevel level, String message) { - log(createLogLine(0, level, message, null)); + try { + log(createLogLine(0, level, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -315,7 +418,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void log(LogLevel level, String message, Throwable cause) { - log(createLogLine(0, level, message, cause)); + try { + log(createLogLine(0, level, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -326,7 +433,11 @@ public abstract class LogHelper { * @param message the logged message (may be null). */ public void log(int levels, LogLevel level, String message) { - log(createLogLine(levels, level, message, null)); + try { + log(createLogLine(levels, level, message, null)); + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -338,7 +449,11 @@ public abstract class LogHelper { * @param cause the causing exception (may be null). */ public void log(int levels, LogLevel level, String message, Throwable cause) { - log(createLogLine(levels, level, message, cause)); + try { + log(createLogLine(levels, level, message, cause)); + } catch (Exception e) { + e.printStackTrace(); + } } diff --git a/src/net/sf/openrocket/logging/LogLevel.java b/src/net/sf/openrocket/logging/LogLevel.java index 74235b36..b52d1453 100644 --- a/src/net/sf/openrocket/logging/LogLevel.java +++ b/src/net/sf/openrocket/logging/LogLevel.java @@ -53,15 +53,23 @@ public enum LogLevel { */ VBOSE; - + /** The log level with highest priority */ + public static final LogLevel HIGHEST; + /** The log level with lowest priority */ + public static final LogLevel LOWEST; /** The maximum length of a level textual description */ public static final int LENGTH; + static { int length = 0; for (LogLevel l : LogLevel.values()) { length = Math.max(length, l.toString().length()); } LENGTH = length; + + LogLevel[] values = LogLevel.values(); + HIGHEST = values[0]; + LOWEST = values[values.length - 1]; } /** diff --git a/src/net/sf/openrocket/logging/LogLevelBufferLogger.java b/src/net/sf/openrocket/logging/LogLevelBufferLogger.java index 3b2a2c43..d9021065 100644 --- a/src/net/sf/openrocket/logging/LogLevelBufferLogger.java +++ b/src/net/sf/openrocket/logging/LogLevelBufferLogger.java @@ -54,12 +54,12 @@ public class LogLevelBufferLogger extends LogHelper { if (misses > 0) { if (logs.isEmpty()) { - result.add(new LogLine(level, 0, 0, new TraceException(), - "--- " + misses + " " + level + " lines removed but log is empty! ---", + result.add(new LogLine(level, 0, 0, null, + "===== " + misses + " " + level + " lines removed but log is empty! =====", null)); } else { - result.add(new LogLine(level, logs.get(0).getLogCount(), 0, new TraceException(), - "--- " + misses + " " + level + " lines removed ---", null)); + result.add(new LogLine(level, logs.get(0).getLogCount(), 0, null, + "===== " + misses + " " + level + " lines removed =====", null)); } } result.addAll(logs); diff --git a/src/net/sf/openrocket/logging/LogLine.java b/src/net/sf/openrocket/logging/LogLine.java index 71b92d48..c2dc4fa6 100644 --- a/src/net/sf/openrocket/logging/LogLine.java +++ b/src/net/sf/openrocket/logging/LogLine.java @@ -31,13 +31,32 @@ public class LogLine implements Comparable { private volatile String formattedMessage = null; - + + /** + * Construct a LogLine at the current moment. The next log line count number is selected + * and the current run time set to the timestamp. + * + * @param level the logging level + * @param trace the trace exception for the log line, null permitted + * @param message the log message + * @param cause the causing throwable, null permitted + */ public LogLine(LogLevel level, TraceException trace, String message, Throwable cause) { this(level, logCount.getAndIncrement(), System.currentTimeMillis() - startTime, trace, message, cause); } - - public LogLine(LogLevel level, int count, long timestamp, + /** + * Construct a LogLine with all parameters. This should only be used in special conditions, + * for example to insert a log line at a specific point within normal logs. + * + * @param level the logging level + * @param count the log line count number + * @param timestamp the log line timestamp + * @param trace the trace exception for the log line, null permitted + * @param message the log message + * @param cause the causing throwable, null permitted + */ + public LogLine(LogLevel level, int count, long timestamp, TraceException trace, String message, Throwable cause) { this.level = level; this.count = count; @@ -46,57 +65,57 @@ public class LogLine implements Comparable { this.message = message; this.cause = cause; } - + /** * @return the level */ public LogLevel getLevel() { return level; } - - + + /** * @return the count */ public int getLogCount() { return count; } - - + + /** * @return the timestamp */ public long getTimestamp() { return timestamp; } - - + + /** * @return the trace */ public TraceException getTrace() { return trace; } - - + + /** * @return the message */ public String getMessage() { return message; } - - + + /** * @return the error */ public Throwable getCause() { return cause; } - - + + /** @@ -109,7 +128,7 @@ public class LogLine implements Comparable { if (formattedMessage == null) { String str; str = String.format("%4d %10.3f %-" + LogLevel.LENGTH + "s %s %s", - count, timestamp/1000.0, (level != null) ? level.toString() : "NULL", + count, timestamp / 1000.0, (level != null) ? level.toString() : "NULL", (trace != null) ? trace.getMessage() : "(-)", message); if (cause != null) { @@ -123,8 +142,8 @@ public class LogLine implements Comparable { } return formattedMessage; } - - + + /** * Compare against another log line based on the log line count number. */ diff --git a/src/net/sf/openrocket/logging/TraceException.java b/src/net/sf/openrocket/logging/TraceException.java index 8468a1ed..b08109a3 100644 --- a/src/net/sf/openrocket/logging/TraceException.java +++ b/src/net/sf/openrocket/logging/TraceException.java @@ -62,6 +62,17 @@ public class TraceException extends Exception { } + /** + * Construct an exception with the specified message. + * + * @param message the message for the exception. + */ + public TraceException(String message) { + this(0, 0); + this.message = message; + } + + /** * Get the description of the code position as provided in the constructor. */ diff --git a/src/net/sf/openrocket/optimization/general/Function.java b/src/net/sf/openrocket/optimization/general/Function.java index 97404e2a..a7be5668 100644 --- a/src/net/sf/openrocket/optimization/general/Function.java +++ b/src/net/sf/openrocket/optimization/general/Function.java @@ -18,23 +18,8 @@ public interface Function { * @param point the point at which to evaluate the function. * @return the function value. * @throws InterruptedException if the thread was interrupted before function evaluation was completed. + * @throws OptimizationException if an error occurs that prevents the optimization */ - public double evaluate(Point point) throws InterruptedException; - - - /** - * Return a cached value of the function at the specified point. This allows efficient - * caching of old values even between calls to optimization methods. This method should - * NOT evaluate the function except in special cases (e.g. the point is outside of the - * function domain). - *

    - * Note that it is allowed to always allowed to return Double.NaN, especially - * for functions that are fast to evaluate. - * - * @param point the point of function evaluation. - * @return the function value, or Double.NaN if the function value has not been - * evaluated at this point. - */ - public double preComputed(Point point); + public double evaluate(Point point) throws InterruptedException, OptimizationException; } diff --git a/src/net/sf/openrocket/optimization/general/FunctionCache.java b/src/net/sf/openrocket/optimization/general/FunctionCache.java index c280fbac..69c42d79 100644 --- a/src/net/sf/openrocket/optimization/general/FunctionCache.java +++ b/src/net/sf/openrocket/optimization/general/FunctionCache.java @@ -2,18 +2,38 @@ package net.sf.openrocket.optimization.general; /** * A storage of cached values of a function. The purpose of this class is to - * cache function values + * cache function values between optimization runs. Subinterfaces may provide + * additional functionality. * * @author Sampo Niskanen */ public interface FunctionCache { + /** + * Compute and return the value of the function at the specified point. + * + * @param point the point at which to evaluate. + * @return the value of the function at that point. + */ public double getValue(Point point); + /** + * Clear the cache. + */ public void clearCache(); + /** + * Return the function that is evaluated by this cache implementation. + * + * @return the function that is being evaluated. + */ public Function getFunction(); + /** + * Set the function that is evaluated by this cache implementation. + * + * @param function the function that is being evaluated. + */ public void setFunction(Function function); } diff --git a/src/net/sf/openrocket/optimization/general/FunctionOptimizer.java b/src/net/sf/openrocket/optimization/general/FunctionOptimizer.java index 2caf7fa9..485843f9 100644 --- a/src/net/sf/openrocket/optimization/general/FunctionOptimizer.java +++ b/src/net/sf/openrocket/optimization/general/FunctionOptimizer.java @@ -14,8 +14,9 @@ public interface FunctionOptimizer { * * @param initial the initial start point of the optimization. * @param control the optimization control. + * @throws OptimizationException if an error occurs that prevents optimization */ - public void optimize(Point initial, OptimizationController control); + public void optimize(Point initial, OptimizationController control) throws OptimizationException; /** diff --git a/src/net/sf/openrocket/optimization/general/OptimizationException.java b/src/net/sf/openrocket/optimization/general/OptimizationException.java new file mode 100644 index 00000000..7c0c0674 --- /dev/null +++ b/src/net/sf/openrocket/optimization/general/OptimizationException.java @@ -0,0 +1,22 @@ +package net.sf.openrocket.optimization.general; + +/** + * An exception that prevents optimization from continuing. + * + * @author Sampo Niskanen + */ +public class OptimizationException extends Exception { + + public OptimizationException(String message) { + super(message); + } + + public OptimizationException(Throwable cause) { + super(cause); + } + + public OptimizationException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/src/net/sf/openrocket/optimization/general/ParallelExecutorCache.java b/src/net/sf/openrocket/optimization/general/ParallelExecutorCache.java index 4f84dccb..78078600 100644 --- a/src/net/sf/openrocket/optimization/general/ParallelExecutorCache.java +++ b/src/net/sf/openrocket/optimization/general/ParallelExecutorCache.java @@ -14,11 +14,17 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import net.sf.openrocket.util.BugException; + /** * An implementation of a ParallelFunctionCache that evaluates function values * in parallel and caches them. This allows pre-calculating possibly required * function values beforehand. If values are not required after all, the * computation can be aborted assuming the function evaluation supports it. + *

    + * Note that while this class handles threads and abstracts background execution, + * the public methods themselves are NOT thread-safe and should be called from + * only one thread at a time. * * @author Sampo Niskanen */ @@ -32,13 +38,22 @@ public class ParallelExecutorCache implements ParallelFunctionCache { private Function function; - + /** + * Construct a cache that uses the same number of computational threads as there are + * processors available. + */ public ParallelExecutorCache() { this(Runtime.getRuntime().availableProcessors()); } + /** + * Construct a cache that uses the specified number of computational threads for background + * computation. The threads that are created are marked as daemon threads. + * + * @param threadCount the number of threads to use in the executor. + */ public ParallelExecutorCache(int threadCount) { - executor = new ThreadPoolExecutor(threadCount, threadCount, 60, TimeUnit.SECONDS, + this(new ThreadPoolExecutor(threadCount, threadCount, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new ThreadFactory() { @Override @@ -47,20 +62,22 @@ public class ParallelExecutorCache implements ParallelFunctionCache { t.setDaemon(true); return t; } - }); + })); } + /** + * Construct a cache that uses the specified ExecutorService for managing + * computational threads. + * + * @param executor the executor to use for function evaluations. + */ public ParallelExecutorCache(ExecutorService executor) { this.executor = executor; } - /** - * Queue a list of function evaluations at the specified points. - * - * @param points the points at which to evaluate the function. - */ + @Override public void compute(Collection points) { for (Point p : points) { compute(p); @@ -68,11 +85,7 @@ public class ParallelExecutorCache implements ParallelFunctionCache { } - /** - * Queue function evaluation for the specified point. - * - * @param point the point at which to evaluate the function. - */ + @Override public void compute(Point point) { if (functionCache.containsKey(point)) { // Function has already been evaluated at the point @@ -84,13 +97,6 @@ public class ParallelExecutorCache implements ParallelFunctionCache { return; } - double value = function.preComputed(point); - if (!Double.isNaN(value)) { - // Function value was in function cache - functionCache.put(point, value); - return; - } - // Submit point for evaluation FunctionCallable callable = new FunctionCallable(function, point); Future future = executor.submit(callable); @@ -98,27 +104,16 @@ public class ParallelExecutorCache implements ParallelFunctionCache { } - /** - * Wait for a collection of points to be computed. After calling this method - * the function values are available by calling XXX - * - * @param points the points to wait for. - * @throws InterruptedException if this thread was interrupted while waiting. - */ - public void waitFor(Collection points) throws InterruptedException { + @Override + public void waitFor(Collection points) throws InterruptedException, OptimizationException { for (Point p : points) { waitFor(p); } } - /** - * Wait for a point to be computed. After calling this method - * the function values are available by calling XXX - * - * @param point the point to wait for. - * @throws InterruptedException if this thread was interrupted while waiting. - */ - public void waitFor(Point point) throws InterruptedException { + + @Override + public void waitFor(Point point) throws InterruptedException, OptimizationException { if (functionCache.containsKey(point)) { return; } @@ -132,18 +127,24 @@ public class ParallelExecutorCache implements ParallelFunctionCache { double value = future.get(); functionCache.put(point, value); } catch (ExecutionException e) { - throw new IllegalStateException("Function threw exception while processing", e.getCause()); + Throwable cause = e.getCause(); + if (cause instanceof InterruptedException) { + throw (InterruptedException) cause; + } + if (cause instanceof OptimizationException) { + throw (OptimizationException) cause; + } + if (cause instanceof RuntimeException) { + throw (RuntimeException) cause; + } + + throw new BugException("Function threw unknown exception while processing", e); } } - /** - * Abort the computation of the specified point. If computation has ended, - * the result is stored in the function cache anyway. - * - * @param points the points to abort. - * @return a list of the points that have been computed anyway - */ + + @Override public List abort(Collection points) { List computed = new ArrayList(Math.min(points.size(), 10)); @@ -157,13 +158,8 @@ public class ParallelExecutorCache implements ParallelFunctionCache { } - /** - * Abort the computation of the specified point. If computation has ended, - * the result is stored in the function cache anyway. - * - * @param point the point to abort. - * @return true if the point has been computed anyway, false if not. - */ + + @Override public boolean abort(Point point) { if (functionCache.containsKey(point)) { return true; @@ -191,17 +187,17 @@ public class ParallelExecutorCache implements ParallelFunctionCache { } + @Override public double getValue(Point point) { Double d = functionCache.get(point); if (d == null) { - throw new IllegalStateException(point.toString() + " is not in function cache. " + + throw new IllegalStateException(point + " is not in function cache. " + "functionCache=" + functionCache + " futureMap=" + futureMap); } return d; } - @Override public Function getFunction() { return function; @@ -220,6 +216,7 @@ public class ParallelExecutorCache implements ParallelFunctionCache { functionCache.clear(); } + public ExecutorService getExecutor() { return executor; } @@ -239,7 +236,7 @@ public class ParallelExecutorCache implements ParallelFunctionCache { } @Override - public Double call() throws InterruptedException { + public Double call() throws InterruptedException, OptimizationException { return calledFunction.evaluate(point); } } diff --git a/src/net/sf/openrocket/optimization/general/ParallelFunctionCache.java b/src/net/sf/openrocket/optimization/general/ParallelFunctionCache.java index 9b4a0eba..c5b34a52 100644 --- a/src/net/sf/openrocket/optimization/general/ParallelFunctionCache.java +++ b/src/net/sf/openrocket/optimization/general/ParallelFunctionCache.java @@ -4,7 +4,7 @@ import java.util.Collection; import java.util.List; /** - * A FunctionCache that allows queuing points to be computed in the background, + * A FunctionCache that allows scheduling points to be computed in the background, * waiting for specific points to become computed or aborting the computation of * points. * @@ -13,14 +13,17 @@ import java.util.List; public interface ParallelFunctionCache extends FunctionCache { /** - * Queue a list of function evaluations at the specified points. + * Schedule a list of function evaluations at the specified points. + * The points are added to the end of the computation queue in the order + * they are returned by the iterator. * * @param points the points at which to evaluate the function. */ public void compute(Collection points); /** - * Queue function evaluation for the specified point. + * Schedule function evaluation for the specified point. The point is + * added to the end of the computation queue. * * @param point the point at which to evaluate the function. */ @@ -28,25 +31,26 @@ public interface ParallelFunctionCache extends FunctionCache { /** * Wait for a collection of points to be computed. After calling this method - * the function values are available by calling XXX + * the function values are available by calling {@link #getValue(Point)}. * * @param points the points to wait for. - * @throws InterruptedException if this thread was interrupted while waiting. + * @throws InterruptedException if this thread or the computing thread was interrupted while waiting. */ - public void waitFor(Collection points) throws InterruptedException; + public void waitFor(Collection points) throws InterruptedException, OptimizationException; /** * Wait for a point to be computed. After calling this method - * the function values are available by calling XXX + * the function value is available by calling {@link #getValue(Point)}. * * @param point the point to wait for. - * @throws InterruptedException if this thread was interrupted while waiting. + * @throws InterruptedException if this thread or the computing thread was interrupted while waiting. + * @throws OptimizationException */ - public void waitFor(Point point) throws InterruptedException; + public void waitFor(Point point) throws InterruptedException, OptimizationException; /** - * Abort the computation of the specified point. If computation has ended, + * Abort the computation of the specified points. If computation has ended, * the result is stored in the function cache anyway. * * @param points the points to abort. diff --git a/src/net/sf/openrocket/optimization/general/multidim/MultidirectionalSearchOptimizer.java b/src/net/sf/openrocket/optimization/general/multidim/MultidirectionalSearchOptimizer.java index 80a194b8..0e70bf13 100644 --- a/src/net/sf/openrocket/optimization/general/multidim/MultidirectionalSearchOptimizer.java +++ b/src/net/sf/openrocket/optimization/general/multidim/MultidirectionalSearchOptimizer.java @@ -9,6 +9,7 @@ import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.optimization.general.FunctionCache; import net.sf.openrocket.optimization.general.FunctionOptimizer; import net.sf.openrocket.optimization.general.OptimizationController; +import net.sf.openrocket.optimization.general.OptimizationException; import net.sf.openrocket.optimization.general.ParallelFunctionCache; import net.sf.openrocket.optimization.general.Point; import net.sf.openrocket.startup.Application; @@ -48,7 +49,7 @@ public class MultidirectionalSearchOptimizer implements FunctionOptimizer, Stati @Override - public void optimize(Point initial, OptimizationController control) { + public void optimize(Point initial, OptimizationController control) throws OptimizationException { FunctionCacheComparator comparator = new FunctionCacheComparator(functionExecutor); final List pattern = SearchPattern.square(initial.dim()); diff --git a/src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationParameter.java b/src/net/sf/openrocket/optimization/rocketoptimization/OptimizableParameter.java similarity index 65% rename from src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationParameter.java rename to src/net/sf/openrocket/optimization/rocketoptimization/OptimizableParameter.java index 61b1a801..e8506e8d 100644 --- a/src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationParameter.java +++ b/src/net/sf/openrocket/optimization/rocketoptimization/OptimizableParameter.java @@ -1,6 +1,7 @@ package net.sf.openrocket.optimization.rocketoptimization; import net.sf.openrocket.document.Simulation; +import net.sf.openrocket.optimization.general.OptimizationException; /** * A parameter of a rocket or simulation that can be optimized @@ -8,7 +9,7 @@ import net.sf.openrocket.document.Simulation; * * @author Sampo Niskanen */ -public interface RocketOptimizationParameter { +public interface OptimizableParameter { /** * Return the label name for this optimization parameter. @@ -20,10 +21,13 @@ public interface RocketOptimizationParameter { /** * Compute the value for this optimization parameter for the simulation. * The return value can be any double value. + *

    + * This method can return NaN in case of a problem computing * * @param simulation the simulation * @return the parameter value (any double value) + * @throws OptimizationException if an error occurs preventing the optimization from continuing */ - public double computeValue(Simulation simulation); + public double computeValue(Simulation simulation) throws OptimizationException; } diff --git a/src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationParameterService.java b/src/net/sf/openrocket/optimization/rocketoptimization/OptimizableParameterService.java similarity index 79% rename from src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationParameterService.java rename to src/net/sf/openrocket/optimization/rocketoptimization/OptimizableParameterService.java index ecff025b..b227917e 100644 --- a/src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationParameterService.java +++ b/src/net/sf/openrocket/optimization/rocketoptimization/OptimizableParameterService.java @@ -9,7 +9,7 @@ import net.sf.openrocket.document.OpenRocketDocument; * * @author Sampo Niskanen */ -public interface RocketOptimizationParameterService { +public interface OptimizableParameterService { /** * Return all available rocket optimization parameters for this document. @@ -18,6 +18,6 @@ public interface RocketOptimizationParameterService { * @param document the design document * @return a collection of the rocket optimization parameters. */ - public Collection getParameters(OpenRocketDocument document); + public Collection getParameters(OpenRocketDocument document); } diff --git a/src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationFunction.java b/src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationFunction.java index c975a8a4..a9fb500f 100644 --- a/src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationFunction.java +++ b/src/net/sf/openrocket/optimization/rocketoptimization/RocketOptimizationFunction.java @@ -7,6 +7,7 @@ import java.util.concurrent.ConcurrentHashMap; import net.sf.openrocket.document.Simulation; import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.optimization.general.Function; +import net.sf.openrocket.optimization.general.OptimizationException; import net.sf.openrocket.optimization.general.Point; import net.sf.openrocket.rocketcomponent.Rocket; import net.sf.openrocket.startup.Application; @@ -20,13 +21,16 @@ import net.sf.openrocket.startup.Application; public class RocketOptimizationFunction implements Function { private static final LogHelper log = Application.getLogger(); + private static final double OUTSIDE_DOMAIN_SCALE = 1.0e200; + /* * NOTE: This class must be thread-safe!!! */ private final Simulation baseSimulation; - private final RocketOptimizationParameter parameter; + private final OptimizableParameter parameter; private final OptimizationGoal goal; + private final SimulationDomain domain; private final SimulationModifier[] modifiers; private final Map parameterValueCache = new ConcurrentHashMap(); @@ -44,11 +48,12 @@ public class RocketOptimizationFunction implements Function { * @param goal the goal of the rocket parameter * @param modifiers the modifiers that modify the simulation */ - public RocketOptimizationFunction(Simulation baseSimulation, RocketOptimizationParameter parameter, - OptimizationGoal goal, SimulationModifier... modifiers) { + public RocketOptimizationFunction(Simulation baseSimulation, OptimizableParameter parameter, + OptimizationGoal goal, SimulationDomain domain, SimulationModifier... modifiers) { this.baseSimulation = baseSimulation; this.parameter = parameter; this.goal = goal; + this.domain = domain; this.modifiers = modifiers.clone(); if (modifiers.length == 0) { throw new IllegalArgumentException("No SimulationModifiers specified"); @@ -57,52 +62,71 @@ public class RocketOptimizationFunction implements Function { @Override - public double evaluate(Point point) throws InterruptedException { + public double evaluate(Point point) throws InterruptedException, OptimizationException { + /* + * parameterValue is the computed parameter value (e.g. altitude) + * goalValue is the value that needs to be minimized + */ + double goalValue, parameterValue; // Check for precomputed value - double value = preComputed(point); - if (!Double.isNaN(value)) { - return value; + Double d = goalValueCache.get(point); + if (d != null && !Double.isNaN(d)) { + log.verbose("Optimization function value at point " + point + " was found in cache: " + d); + return d; } + log.verbose("Computing optimization function value at point " + point); + // Create the new simulation based on the point double[] p = point.asArray(); if (p.length != modifiers.length) { throw new IllegalArgumentException("Point has length " + p.length + " while function has " + modifiers.length + " simulation modifiers"); } - Simulation simulation = newSimulationInstance(); + + Simulation simulation = newSimulationInstance(baseSimulation); for (int i = 0; i < modifiers.length; i++) { modifiers[i].modify(simulation, p[i]); } + + // Check whether the point is within the simulation domain + double distance = domain.getDistanceToDomain(simulation); + if (distance > 0 || Double.isNaN(distance)) { + if (Double.isNaN(distance)) { + goalValue = Double.MAX_VALUE; + } else { + goalValue = (distance + 1) * OUTSIDE_DOMAIN_SCALE; + } + parameterValueCache.put(point, Double.NaN); + goalValueCache.put(point, goalValue); + log.verbose("Optimization point is outside of domain, distance=" + distance + " goal function value=" + goalValue); + return goalValue; + } + + // Compute the optimization value - value = parameter.computeValue(simulation); - parameterValueCache.put(point, value); + parameterValue = parameter.computeValue(simulation); + parameterValueCache.put(point, parameterValue); - value = goal.getMinimizationParameter(value); - if (Double.isNaN(value)) { - log.warn("Computed value was NaN, baseSimulation=" + baseSimulation + " parameter=" + parameter + - " goal=" + goal + " modifiers=" + Arrays.toString(modifiers) + " simulation=" + simulation); - value = Double.MAX_VALUE; + goalValue = goal.getMinimizationParameter(parameterValue); + if (Double.isNaN(goalValue)) { + log.warn("Computed goal value was NaN, baseSimulation=" + baseSimulation + " parameter=" + parameter + + " goal=" + goal + " modifiers=" + Arrays.toString(modifiers) + " simulation=" + simulation + + " parameter value=" + parameterValue); + goalValue = Double.MAX_VALUE; } - goalValueCache.put(point, value); + goalValueCache.put(point, goalValue); - return value; - } - - @Override - public double preComputed(Point point) { - Double value = goalValueCache.get(point); - if (value != null) { - return value; - } + log.verbose("Parameter value at point " + point + " is " + goalValue + ", goal function value=" + goalValue); - // TODO: : is in domain? - return 0; + return goalValue; } + + /** * Return the parameter value at a point that has been computed. The purpose is * to allow retrieving the parameter value corresponding to the found minimum value. @@ -123,13 +147,15 @@ public class RocketOptimizationFunction implements Function { /** * Returns a new deep copy of the simulation and rocket. This methods performs * synchronization on the simulation for thread protection. + *

    + * Note: This method is package-private for unit testing purposes. * - * @return + * @return a new deep copy of the simulation and rocket */ - private Simulation newSimulationInstance() { + Simulation newSimulationInstance(Simulation simulation) { synchronized (baseSimulation) { - Rocket newRocket = (Rocket) baseSimulation.getRocket().copy(); - Simulation newSimulation = baseSimulation.duplicateSimulation(newRocket); + Rocket newRocket = (Rocket) simulation.getRocket().copy(); + Simulation newSimulation = simulation.duplicateSimulation(newRocket); return newSimulation; } } diff --git a/src/net/sf/openrocket/optimization/rocketoptimization/SimulationDomain.java b/src/net/sf/openrocket/optimization/rocketoptimization/SimulationDomain.java new file mode 100644 index 00000000..b03be658 --- /dev/null +++ b/src/net/sf/openrocket/optimization/rocketoptimization/SimulationDomain.java @@ -0,0 +1,25 @@ +package net.sf.openrocket.optimization.rocketoptimization; + +import net.sf.openrocket.document.Simulation; + +/** + * An interface defining a function domain which limits allowed function values. + * + * @author Sampo Niskanen + */ +public interface SimulationDomain { + + /** + * Return a value determining whether the simulation is within the domain limits + * of an optimization process. If the returned value is negative or zero, the + * simulation is within the domain; if the value is positive, the returned value + * is an indication of how far from the domain the value is; if the returned value + * is NaN, the simulation is outside of the domain. + * + * @param simulation the simulation to check. + * @return a negative value or zero if the simulation is in the domain; + * a positive value or NaN if not. + */ + public double getDistanceToDomain(Simulation simulation); + +} diff --git a/src/net/sf/openrocket/optimization/rocketoptimization/SimulationModifier.java b/src/net/sf/openrocket/optimization/rocketoptimization/SimulationModifier.java index a22507d0..147ac0d4 100644 --- a/src/net/sf/openrocket/optimization/rocketoptimization/SimulationModifier.java +++ b/src/net/sf/openrocket/optimization/rocketoptimization/SimulationModifier.java @@ -72,7 +72,7 @@ public interface SimulationModifier extends ChangeSource { /** * Return the current scaled value. This is normally within the range [0...1], but * can be outside the range if the current value is outside of the min and max values. - * @return + * @return the current value of this parameter (normally between [0 ... 1]) */ public double getCurrentScaledValue(); diff --git a/src/net/sf/openrocket/optimization/rocketoptimization/modifiers/GenericModifier.java b/src/net/sf/openrocket/optimization/rocketoptimization/modifiers/GenericModifier.java new file mode 100644 index 00000000..ac62dc62 --- /dev/null +++ b/src/net/sf/openrocket/optimization/rocketoptimization/modifiers/GenericModifier.java @@ -0,0 +1,162 @@ +package net.sf.openrocket.optimization.rocketoptimization.modifiers; + +import javax.swing.event.ChangeListener; + +import net.sf.openrocket.document.Simulation; +import net.sf.openrocket.optimization.rocketoptimization.SimulationModifier; +import net.sf.openrocket.unit.UnitGroup; +import net.sf.openrocket.util.BugException; +import net.sf.openrocket.util.MathUtil; +import net.sf.openrocket.util.Reflection.Method; + +public class GenericModifier implements SimulationModifier { + + private final String name; + private final Object relatedObject; + private final UnitGroup unitGroup; + private final double multiplier; + private final Object modifiable; + + private final Method getter; + private final Method setter; + + private double minValue; + private double maxValue; + + + + + + public GenericModifier(String modifierName, Object relatedObject, UnitGroup unitGroup, double multiplier, + Object modifiable, String methodName) { + this.name = modifierName; + this.relatedObject = relatedObject; + this.unitGroup = unitGroup; + this.multiplier = multiplier; + this.modifiable = modifiable; + + if (MathUtil.equals(multiplier, 0)) { + throw new IllegalArgumentException("multiplier is zero"); + } + + try { + methodName = methodName.substring(0, 1).toUpperCase() + methodName.substring(1); + getter = new Method(modifiable.getClass().getMethod("get" + methodName)); + setter = new Method(modifiable.getClass().getMethod("set" + methodName, double.class)); + } catch (SecurityException e) { + throw new BugException("Trying to find method get/set" + methodName + " in class " + modifiable.getClass(), e); + } catch (NoSuchMethodException e) { + throw new BugException("Trying to find method get/set" + methodName + " in class " + modifiable.getClass(), e); + } + } + + + @Override + public String getName() { + return name; + } + + @Override + public Object getRelatedObject() { + return relatedObject; + } + + @Override + public double getCurrentValue() { + return ((Double) getter.invoke(modifiable)) * multiplier; + } + + + @Override + public double getCurrentScaledValue() { + double value = getCurrentValue(); + return toScaledValue(value); + } + + @Override + public void modify(Simulation simulation, double scaledValue) { + double siValue = toBaseValue(scaledValue) / multiplier; + setter.invoke(modifiable, siValue); + } + + + /** + * Returns the scaled value (normally within [0...1]). + */ + private double toScaledValue(double value) { + if (MathUtil.equals(minValue, maxValue)) { + if (value > maxValue) + return 1.0; + if (value < minValue) + return 0.0; + return 0.5; + } + + return MathUtil.map(value, minValue, maxValue, 0.0, 1.0); + } + + + /** + * Returns the base value (in SI units). + */ + private double toBaseValue(double value) { + return MathUtil.map(value, 0.0, 1.0, minValue, maxValue); + } + + + + @Override + public double getMinValue() { + return minValue; + } + + @Override + public void setMinValue(double value) { + if (MathUtil.equals(minValue, value)) + return; + this.minValue = value; + if (maxValue < minValue) + maxValue = minValue; + fireChangeEvent(); + } + + @Override + public double getMaxValue() { + return maxValue; + } + + @Override + public void setMaxValue(double value) { + if (MathUtil.equals(maxValue, value)) + return; + this.maxValue = value; + if (minValue > maxValue) + minValue = maxValue; + fireChangeEvent(); + } + + @Override + public UnitGroup getUnitGroup() { + return unitGroup; + } + + + @Override + public void addChangeListener(ChangeListener listener) { + // TODO Auto-generated method stub + + } + + @Override + public void removeChangeListener(ChangeListener listener) { + // TODO Auto-generated method stub + + } + + + private void fireChangeEvent() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/net/sf/openrocket/optimization/rocketoptimization/parameters/MaximumAltitudeParameter.java b/src/net/sf/openrocket/optimization/rocketoptimization/parameters/MaximumAltitudeParameter.java new file mode 100644 index 00000000..d8a2543c --- /dev/null +++ b/src/net/sf/openrocket/optimization/rocketoptimization/parameters/MaximumAltitudeParameter.java @@ -0,0 +1,32 @@ +package net.sf.openrocket.optimization.rocketoptimization.parameters; + +import net.sf.openrocket.document.Simulation; +import net.sf.openrocket.optimization.general.OptimizationException; +import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameter; +import net.sf.openrocket.simulation.FlightDataType; +import net.sf.openrocket.simulation.exception.SimulationException; +import net.sf.openrocket.simulation.listeners.system.ApogeeEndListener; + +/** + * An optimization parameter that computes the maximum altitude of a simulated flight. + * + * @author Sampo Niskanen + */ +public class MaximumAltitudeParameter implements OptimizableParameter { + + @Override + public String getName() { + return "Maximum altitude"; + } + + @Override + public double computeValue(Simulation simulation) throws OptimizationException { + try { + simulation.simulate(new ApogeeEndListener()); + return simulation.getSimulatedData().getBranch(0).getMaximum(FlightDataType.TYPE_ALTITUDE); + } catch (SimulationException e) { + throw new OptimizationException(e); + } + } + +} diff --git a/src/net/sf/openrocket/rocketcomponent/Rocket.java b/src/net/sf/openrocket/rocketcomponent/Rocket.java index a347bc07..7ba088b9 100644 --- a/src/net/sf/openrocket/rocketcomponent/Rocket.java +++ b/src/net/sf/openrocket/rocketcomponent/Rocket.java @@ -12,7 +12,10 @@ import java.util.UUID; import javax.swing.event.ChangeListener; import javax.swing.event.EventListenerList; +import net.sf.openrocket.gui.main.ExceptionHandler; +import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.motor.Motor; +import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.Chars; import net.sf.openrocket.util.Coordinate; import net.sf.openrocket.util.MathUtil; @@ -30,9 +33,9 @@ import net.sf.openrocket.util.UniqueID; */ public class Rocket extends RocketComponent { - public static final double DEFAULT_REFERENCE_LENGTH = 0.01; + private static final LogHelper log = Application.getLogger(); - private static final boolean DEBUG_LISTENERS = false; + public static final double DEFAULT_REFERENCE_LENGTH = 0.01; /** @@ -343,17 +346,15 @@ public class Rocket extends RocketComponent { public void addComponentChangeListener(ComponentChangeListener l) { checkState(); listenerList.add(ComponentChangeListener.class, l); - if (DEBUG_LISTENERS) - System.out.println(this + ": Added listner (now " + listenerList.getListenerCount() + - " listeners): " + l); + log.verbose("Added ComponentChangeListener " + l + ", current number of listeners is " + + listenerList.getListenerCount()); } @Override public void removeComponentChangeListener(ComponentChangeListener l) { listenerList.remove(ComponentChangeListener.class, l); - if (DEBUG_LISTENERS) - System.out.println(this + ": Removed listner (now " + listenerList.getListenerCount() + - " listeners): " + l); + log.verbose("Removed ComponentChangeListener " + l + ", current number of listeners is " + + listenerList.getListenerCount()); } @@ -361,17 +362,15 @@ public class Rocket extends RocketComponent { public void addChangeListener(ChangeListener l) { checkState(); listenerList.add(ChangeListener.class, l); - if (DEBUG_LISTENERS) - System.out.println(this + ": Added listner (now " + listenerList.getListenerCount() + - " listeners): " + l); + log.verbose("Added ChangeListener " + l + ", current number of listeners is " + + listenerList.getListenerCount()); } @Override public void removeChangeListener(ChangeListener l) { listenerList.remove(ChangeListener.class, l); - if (DEBUG_LISTENERS) - System.out.println(this + ": Removed listner (now " + listenerList.getListenerCount() + - " listeners): " + l); + log.verbose("Removed ChangeListener " + l + ", current number of listeners is " + + listenerList.getListenerCount()); } @@ -392,15 +391,15 @@ public class Rocket extends RocketComponent { functionalModID = modID; } - if (DEBUG_LISTENERS) - System.out.println("FIRING " + e); - // Check whether frozen if (freezeList != null) { + log.debug("Rocket is in frozen state, adding event " + e + " info freeze list"); freezeList.add(e); return; } + log.debug("Firing rocket change event " + e); + // Notify all components first Iterator iterator = this.deepIterator(true); while (iterator.hasNext()) { @@ -441,6 +440,10 @@ public class Rocket extends RocketComponent { checkState(); if (freezeList == null) { freezeList = new LinkedList(); + log.debug("Freezing Rocket"); + } else { + ExceptionHandler.handleErrorCondition("Attempting to freeze Rocket when it is already frozen, " + + "freezeList=" + freezeList); } } @@ -453,13 +456,18 @@ public class Rocket extends RocketComponent { */ public void thaw() { checkState(); - if (freezeList == null) + if (freezeList == null) { + ExceptionHandler.handleErrorCondition("Attempting to thaw Rocket when it is not frozen"); return; + } if (freezeList.size() == 0) { + log.warn("Thawing rocket with no changes made"); freezeList = null; return; } + log.debug("Thawing rocket, freezeList=" + freezeList); + int type = 0; Object c = null; for (ComponentChangeEvent e : freezeList) { diff --git a/src/net/sf/openrocket/rocketcomponent/RocketComponent.java b/src/net/sf/openrocket/rocketcomponent/RocketComponent.java index 2e0a784c..34ae962f 100644 --- a/src/net/sf/openrocket/rocketcomponent/RocketComponent.java +++ b/src/net/sf/openrocket/rocketcomponent/RocketComponent.java @@ -12,7 +12,9 @@ import java.util.Stack; import javax.swing.event.ChangeListener; +import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.logging.TraceException; +import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.ChangeSource; import net.sf.openrocket.util.Coordinate; @@ -23,6 +25,7 @@ import net.sf.openrocket.util.UniqueID; public abstract class RocketComponent implements ChangeSource, Cloneable, Iterable { + private static final LogHelper log = Application.getLogger(); /* * Text is suitable to the form @@ -1304,6 +1307,7 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, checkState(); if (parent == null) { /* Ignore if root invalid. */ + log.debug("Attempted firing event " + e + " with root " + this.getComponentName() + ", ignoring event"); return; } getRoot().fireComponentChangeEvent(e); diff --git a/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java b/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java index ef80f497..655cdb52 100644 --- a/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java +++ b/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java @@ -41,6 +41,7 @@ public class BasicEventSimulationEngine implements SimulationEngine { private SimulationStatus status; + @Override public FlightData simulate(SimulationConditions simulationConditions) throws SimulationException { Set motorBurntOut = new HashSet(); @@ -409,7 +410,7 @@ public class BasicEventSimulationEngine implements SimulationEngine { case STAGE_SEPARATION: { // TODO: HIGH: Store lower stages to be simulated later - RocketComponent stage = (RocketComponent) event.getSource(); + RocketComponent stage = event.getSource(); int n = stage.getStageNumber(); status.getConfiguration().setToStage(n); status.getFlightData().addEvent(event); @@ -542,6 +543,14 @@ public class BasicEventSimulationEngine implements SimulationEngine { d += status.getEffectiveLaunchRodLength(); if (Double.isNaN(d) || b) { + log.error("Simulation resulted in NaN value:" + + " simulationTime=" + status.getSimulationTime() + + " previousTimeStep=" + status.getPreviousTimeStep() + + " rocketPosition=" + status.getRocketPosition() + + " rocketVelocity=" + status.getRocketVelocity() + + " rocketOrientationQuaternion=" + status.getRocketOrientationQuaternion() + + " rocketRotationVelocity=" + status.getRocketRotationVelocity() + + " effectiveLaunchRodLength=" + status.getEffectiveLaunchRodLength()); throw new SimulationException("Simulation resulted in not-a-number (NaN) value, please report a bug."); } } diff --git a/src/net/sf/openrocket/startup/Startup.java b/src/net/sf/openrocket/startup/Startup.java index 2d2d492e..658f70c0 100644 --- a/src/net/sf/openrocket/startup/Startup.java +++ b/src/net/sf/openrocket/startup/Startup.java @@ -62,6 +62,9 @@ public class Startup { public static void main(final String[] args) throws Exception { + // Check for "openrocket.debug" property before anything else + checkDebugStatus(); + // Initialize logging first so we can use it initializeLogging(); @@ -91,6 +94,18 @@ public class Startup { + private static void checkDebugStatus() { + if (System.getProperty("openrocket.debug") != null) { + System.setProperty("openrocket.log.stdout", "VBOSE"); + System.setProperty("openrocket.log.tracelevel", "VBOSE"); + System.setProperty("openrocket.debug.menu", "true"); + System.setProperty("openrocket.debug.motordigest", "true"); + } + } + + + + private static void runMain(String[] args) { // Initialize the splash screen with version info diff --git a/src/net/sf/openrocket/util/ConcurrencyException.java b/src/net/sf/openrocket/util/ConcurrencyException.java new file mode 100644 index 00000000..252267c8 --- /dev/null +++ b/src/net/sf/openrocket/util/ConcurrencyException.java @@ -0,0 +1,26 @@ +package net.sf.openrocket.util; + +/** + * An exception that indicates a concurrency bug in the software. + * + * @author Sampo Niskanen + */ +public class ConcurrencyException extends FatalException { + + public ConcurrencyException() { + super(); + } + + public ConcurrencyException(String message, Throwable cause) { + super(message, cause); + } + + public ConcurrencyException(String message) { + super(message); + } + + public ConcurrencyException(Throwable cause) { + super(cause); + } + +} diff --git a/src/net/sf/openrocket/util/GUIUtil.java b/src/net/sf/openrocket/util/GUIUtil.java index 54047e35..ff97d9a8 100644 --- a/src/net/sf/openrocket/util/GUIUtil.java +++ b/src/net/sf/openrocket/util/GUIUtil.java @@ -128,6 +128,7 @@ public class GUIUtil { */ public static void installEscapeCloseOperation(final JDialog dialog) { Action dispatchClosing = new AbstractAction() { + @Override public void actionPerformed(ActionEvent event) { log.user("Closing dialog " + dialog); dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING)); @@ -194,6 +195,7 @@ public class GUIUtil { @Override public void windowClosed(WindowEvent e) { setNullModels(window); + MemoryManagement.collectable(window); } }); } @@ -341,7 +343,7 @@ public class GUIUtil { JTree tree = (JTree) c; tree.setModel(new DefaultTreeModel(new TreeNode() { - @SuppressWarnings("unchecked") + @SuppressWarnings("rawtypes") @Override public Enumeration children() { return new Vector().elements(); diff --git a/src/net/sf/openrocket/util/MemoryManagement.java b/src/net/sf/openrocket/util/MemoryManagement.java new file mode 100644 index 00000000..34589b58 --- /dev/null +++ b/src/net/sf/openrocket/util/MemoryManagement.java @@ -0,0 +1,137 @@ +package net.sf.openrocket.util; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import net.sf.openrocket.logging.LogHelper; +import net.sf.openrocket.startup.Application; + +/** + * A class that performs certain memory-management operations for debugging purposes. + * For example, complex objects that are being discarded and that should be garbage-collectable + * (such as dialog windows) should be registered for monitoring by calling + * {@link #collectable(Object)}. This will allow monitoring whether the object really is + * garbage-collected or whether it is retained in memory due to a memory leak. + * Only complex objects should be registered due to the overhead of the monitoring. + * + * @author Sampo Niskanen + */ +public final class MemoryManagement { + private static final LogHelper log = Application.getLogger(); + + /** Purge cleared references every this many calls to {@link #collectable(Object)} */ + private static final int PURGE_CALL_COUNT = 100; + + + /** + * Storage of the objects. This is basically a mapping from the objects (using weak references) + * to + */ + private static List objects = new LinkedList(); + private static int callCount = 0; + + + private MemoryManagement() { + } + + + /** + * Mark an object that should be garbage-collectable by the GC. This class will monitor + * whether the object actually gets garbage-collected or not by holding a weak reference + * to the object. + * + * @param o the object to monitor. + */ + public static synchronized void collectable(Object o) { + if (o == null) { + throw new IllegalArgumentException("object is null"); + } + log.debug("Adding object into collectable list: " + o); + objects.add(new MemoryData(o)); + callCount++; + if (callCount % PURGE_CALL_COUNT == 0) { + purge(); + } + } + + + /** + * Return the number of times {@link #collectable(Object)} has been called. + * @return the number of times {@link #collectable(Object)} has been called. + */ + public static synchronized int getCallCount() { + return callCount; + } + + + /** + * Return a list of MemoryData objects corresponding to the objects that have been + * registered by {@link #collectable(Object)} and have not been garbage-collected properly. + * This method first calls System.gc() multiple times to attempt to + * force any remaining garbage collection. + * + * @return a list of MemoryData objects for objects that have not yet been garbage-collected. + */ + public static synchronized ArrayList getRemainingObjects() { + for (int i = 0; i < 5; i++) { + System.runFinalization(); + System.gc(); + try { + Thread.sleep(1); + } catch (InterruptedException e) { + } + } + purge(); + return new ArrayList(objects); + } + + + + /** + * Purge all cleared references from the object list. + */ + private static void purge() { + int origCount = objects.size(); + Iterator iterator = objects.iterator(); + while (iterator.hasNext()) { + MemoryData data = iterator.next(); + if (data.getReference().get() == null) { + iterator.remove(); + } + } + log.debug(objects.size() + " of " + origCount + " objects remaining in discarded objects list after purge."); + } + + + /** + * A value object class containing data of a discarded object reference. + */ + public static final class MemoryData { + private final WeakReference reference; + private final long registrationTime; + + private MemoryData(Object object) { + this.reference = new WeakReference(object); + this.registrationTime = System.currentTimeMillis(); + } + + /** + * Return the weak reference to the discarded object. + */ + public WeakReference getReference() { + return reference; + } + + /** + * Return the time when the object was discarded. + * @return a millisecond timestamp of when the object was discarded. + */ + public long getRegistrationTime() { + return registrationTime; + } + } + +} diff --git a/src/net/sf/openrocket/util/SafetyMutex.java b/src/net/sf/openrocket/util/SafetyMutex.java new file mode 100644 index 00000000..fb202a91 --- /dev/null +++ b/src/net/sf/openrocket/util/SafetyMutex.java @@ -0,0 +1,171 @@ +package net.sf.openrocket.util; + +import java.util.LinkedList; + +import net.sf.openrocket.gui.main.ExceptionHandler; +import net.sf.openrocket.logging.LogHelper; +import net.sf.openrocket.startup.Application; + +/** + * A mutex that can be used for verifying thread safety. This class cannot be + * used to perform synchronization, only to detect concurrency issues. This + * class can be used by the main methods of non-thread-safe classes to ensure + * the class is not wrongly used from multiple threads concurrently. + *

    + * This mutex is not reentrant even for the same thread that has locked it. + * + * @author Sampo Niskanen + */ +public class SafetyMutex { + private static final LogHelper log = Application.getLogger(); + + // Package-private for unit testing + static volatile boolean errorReported = false; + + // lockingThread is set when this mutex is locked. + Thread lockingThread = null; + // Stack of places that have locked this mutex + final LinkedList locations = new LinkedList(); + + + /** + * Verify that this mutex is unlocked, but don't lock it. This has the same effect + * as mutex.lock(); mutex.unlock(); and is useful for methods that return + * immediately (e.g. getters). + * + * @throws ConcurrencyException if this mutex is already locked. + */ + public synchronized void verify() { + checkState(true); + if (lockingThread != null && lockingThread != Thread.currentThread()) { + error("Mutex is already locked", true); + } + } + + + /** + * Lock this mutex. If this mutex is already locked an error is raised and + * a ConcurrencyException is thrown. The location parameter is used to distinguish + * the locking location, and it should be e.g. the method name. + * + * @param location a string describing the location where this mutex was locked (cannot be null). + * + * @throws ConcurrencyException if this mutex is already locked. + */ + public synchronized void lock(String location) { + if (location == null) { + throw new IllegalArgumentException("location is null"); + } + checkState(true); + + Thread currentThread = Thread.currentThread(); + if (lockingThread != null && lockingThread != currentThread) { + error("Mutex is already locked", true); + } + + lockingThread = currentThread; + locations.push(location); + } + + + + /** + * Unlock this mutex. If this mutex is not locked at the position of the parameter + * or was locked by another thread than the current thread an error is raised, + * but an exception is not thrown. + *

    + * This method is guaranteed never to throw an exception, so it can safely be used in finally blocks. + * + * @param location a location string matching that which locked the mutex + * @return whether the unlocking was successful (this normally doesn't need to be checked) + */ + public synchronized boolean unlock(String location) { + try { + + if (location == null) { + ExceptionHandler.handleErrorCondition("location is null"); + location = ""; + } + checkState(false); + + + // Check that the mutex is locked + if (lockingThread == null) { + error("Mutex was not locked", false); + return false; + } + + // Check that the mutex is locked by the current thread + if (lockingThread != Thread.currentThread()) { + error("Mutex is being unlocked from differerent thread than where it was locked", false); + return false; + } + + // Check that the unlock location is correct + String lastLocation = locations.pop(); + if (!location.equals(lastLocation)) { + locations.push(lastLocation); + error("Mutex unlocking location does not match locking location, location=" + location, false); + return false; + } + + // Unlock the mutex if the last one + if (locations.isEmpty()) { + lockingThread = null; + } + return true; + } catch (Exception e) { + ExceptionHandler.handleErrorCondition("An exception occurred while unlocking a mutex, " + + "locking thread=" + lockingThread + " locations=" + locations, e); + return false; + } + } + + + + /** + * Check that the internal state of the mutex (lockingThread vs. locations) is correct. + */ + private void checkState(boolean throwException) { + /* + * Disallowed states: + * lockingThread == null && !locations.isEmpty() + * lockingThread != null && locations.isEmpty() + */ + if ((lockingThread == null) ^ (locations.isEmpty())) { + // Clear the mutex only after error() has executed (and possibly thrown an exception) + try { + error("Mutex data inconsistency occurred - unlocking mutex", throwException); + } finally { + lockingThread = null; + locations.clear(); + } + } + } + + + /** + * Raise an error. The first occurrence is passed directly to the exception handler, + * later errors are simply logged. + */ + private void error(String message, boolean throwException) { + message = message + + ", current thread = " + Thread.currentThread() + + ", locking thread=" + lockingThread + + ", locking locations=" + locations; + + ConcurrencyException ex = new ConcurrencyException(message); + + if (!errorReported) { + errorReported = true; + ExceptionHandler.handleErrorCondition(ex); + } else { + log.error(message, ex); + } + + if (throwException) { + throw ex; + } + } + +} diff --git a/src/net/sf/openrocket/utils/TestFunctionOptimizer.java b/src/net/sf/openrocket/utils/TestFunctionOptimizer.java index a57ea78a..e5f9da71 100644 --- a/src/net/sf/openrocket/utils/TestFunctionOptimizer.java +++ b/src/net/sf/openrocket/utils/TestFunctionOptimizer.java @@ -3,6 +3,7 @@ package net.sf.openrocket.utils; import net.sf.openrocket.optimization.general.Function; import net.sf.openrocket.optimization.general.FunctionOptimizer; import net.sf.openrocket.optimization.general.OptimizationController; +import net.sf.openrocket.optimization.general.OptimizationException; import net.sf.openrocket.optimization.general.ParallelExecutorCache; import net.sf.openrocket.optimization.general.ParallelFunctionCache; import net.sf.openrocket.optimization.general.Point; @@ -22,7 +23,7 @@ public class TestFunctionOptimizer { private void go(final ParallelFunctionCache functionCache, - final FunctionOptimizer optimizer, final Point optimum, final int maxSteps) { + final FunctionOptimizer optimizer, final Point optimum, final int maxSteps) throws OptimizationException { Function function = new Function() { @Override @@ -35,15 +36,6 @@ public class TestFunctionOptimizer { return Double.NaN; } } - - @Override - public double preComputed(Point p) { - for (double d : p.asArray()) { - if (d < 0 || d > 1) - return Double.MAX_VALUE; - } - return Double.NaN; - } }; OptimizationController control = new OptimizationController() { @@ -83,7 +75,7 @@ public class TestFunctionOptimizer { } - public static void main(String[] args) throws InterruptedException { + public static void main(String[] args) throws InterruptedException, OptimizationException { System.err.println("Number of processors: " + Runtime.getRuntime().availableProcessors()); diff --git a/src/net/sf/openrocket/utils/TestFunctionOptimizerLoop.java b/src/net/sf/openrocket/utils/TestFunctionOptimizerLoop.java index b60bb3d8..e09a0ee8 100644 --- a/src/net/sf/openrocket/utils/TestFunctionOptimizerLoop.java +++ b/src/net/sf/openrocket/utils/TestFunctionOptimizerLoop.java @@ -10,6 +10,7 @@ import java.util.concurrent.TimeUnit; import net.sf.openrocket.optimization.general.Function; import net.sf.openrocket.optimization.general.FunctionOptimizer; import net.sf.openrocket.optimization.general.OptimizationController; +import net.sf.openrocket.optimization.general.OptimizationException; import net.sf.openrocket.optimization.general.ParallelExecutorCache; import net.sf.openrocket.optimization.general.Point; import net.sf.openrocket.optimization.general.multidim.MultidirectionalSearchOptimizer; @@ -26,7 +27,7 @@ public class TestFunctionOptimizerLoop { - private void go(final FunctionOptimizer optimizer, final Point optimum, final int maxSteps, ExecutorService executor) { + private void go(final FunctionOptimizer optimizer, final Point optimum, final int maxSteps, ExecutorService executor) throws OptimizationException { Function function = new Function() { @Override @@ -34,15 +35,6 @@ public class TestFunctionOptimizerLoop { evaluations++; return p.sub(optimum).length2(); } - - @Override - public double preComputed(Point p) { - for (double d : p.asArray()) { - if (d < 0 || d > 1) - return Double.MAX_VALUE; - } - return Double.NaN; - } }; OptimizationController control = new OptimizationController() { @@ -67,7 +59,7 @@ public class TestFunctionOptimizerLoop { } - public static void main(String[] args) { + public static void main(String[] args) throws OptimizationException { System.err.println("PRECISION = " + PRECISION); diff --git a/test/net/sf/openrocket/optimization/rocketoptimization/TestRocketOptimizationFunction.java b/test/net/sf/openrocket/optimization/rocketoptimization/TestRocketOptimizationFunction.java new file mode 100644 index 00000000..53ee37de --- /dev/null +++ b/test/net/sf/openrocket/optimization/rocketoptimization/TestRocketOptimizationFunction.java @@ -0,0 +1,214 @@ +package net.sf.openrocket.optimization.rocketoptimization; + +import static org.junit.Assert.*; +import net.sf.openrocket.document.Simulation; +import net.sf.openrocket.optimization.general.OptimizationException; +import net.sf.openrocket.optimization.general.Point; +import net.sf.openrocket.rocketcomponent.Rocket; + +import org.jmock.Expectations; +import org.jmock.Mockery; +import org.jmock.auto.Mock; +import org.jmock.integration.junit4.JMock; +import org.jmock.integration.junit4.JUnit4Mockery; +import org.junit.Test; +import org.junit.runner.RunWith; + + +@RunWith(JMock.class) +public class TestRocketOptimizationFunction { + Mockery context = new JUnit4Mockery(); + + @Mock + OptimizableParameter parameter; + @Mock + OptimizationGoal goal; + @Mock + SimulationDomain domain; + @Mock + SimulationModifier modifier1; + @Mock + SimulationModifier modifier2; + + + @Test + public void testNormalEvaluation() throws InterruptedException, OptimizationException { + final Rocket rocket = new Rocket(); + final Simulation simulation = new Simulation(rocket); + + final double p1 = 0.4; + final double p2 = 0.7; + final double ddist = -0.43; + final double pvalue = 9.81; + final double gvalue = 8.81; + + // @formatter:off + context.checking(new Expectations() {{ + oneOf(modifier1).modify(simulation, p1); + oneOf(modifier2).modify(simulation, p2); + oneOf(domain).getDistanceToDomain(simulation); will(returnValue(ddist)); + oneOf(parameter).computeValue(simulation); will(returnValue(pvalue)); + oneOf(goal).getMinimizationParameter(pvalue); will(returnValue(gvalue)); + }}); + // @formatter:on + + + RocketOptimizationFunction function = new RocketOptimizationFunction(simulation, + parameter, goal, domain, modifier1, modifier2) { + @Override + Simulation newSimulationInstance(Simulation sim) { + return sim; + } + }; + + + assertEquals(Double.NaN, function.getComputedParameterValue(new Point(p1, p2)), 0); + + double value = function.evaluate(new Point(p1, p2)); + assertEquals(gvalue, value, 0); + + assertEquals(pvalue, function.getComputedParameterValue(new Point(p1, p2)), 0); + + // Re-evaluate the point to verify parameter is not recomputed + value = function.evaluate(new Point(p1, p2)); + assertEquals(gvalue, value, 0); + } + + + @Test + public void testNaNValue() throws InterruptedException, OptimizationException { + final Rocket rocket = new Rocket(); + final Simulation simulation = new Simulation(rocket); + + final double p1 = 0.4; + final double p2 = 0.7; + final double ddist = -0.43; + final double pvalue = 9.81; + + // @formatter:off + context.checking(new Expectations() {{ + oneOf(modifier1).modify(simulation, p1); + oneOf(modifier2).modify(simulation, p2); + oneOf(domain).getDistanceToDomain(simulation); will(returnValue(ddist)); + oneOf(parameter).computeValue(simulation); will(returnValue(pvalue)); + oneOf(goal).getMinimizationParameter(pvalue); will(returnValue(Double.NaN)); + }}); + // @formatter:on + + + RocketOptimizationFunction function = new RocketOptimizationFunction(simulation, + parameter, goal, domain, modifier1, modifier2) { + @Override + Simulation newSimulationInstance(Simulation sim) { + return sim; + } + }; + + + assertEquals(Double.NaN, function.getComputedParameterValue(new Point(p1, p2)), 0); + + double value = function.evaluate(new Point(p1, p2)); + assertEquals(Double.MAX_VALUE, value, 0); + + assertEquals(pvalue, function.getComputedParameterValue(new Point(p1, p2)), 0); + + value = function.evaluate(new Point(p1, p2)); + assertEquals(Double.MAX_VALUE, value, 0); + } + + + @Test + public void testOutsideDomain() throws InterruptedException, OptimizationException { + final Rocket rocket = new Rocket(); + final Simulation simulation = new Simulation(rocket); + + final double p1 = 0.4; + final double p2 = 0.7; + final double ddist = 0.98; + + // @formatter:off + context.checking(new Expectations() {{ + oneOf(modifier1).modify(simulation, p1); + oneOf(modifier2).modify(simulation, p2); + oneOf(domain).getDistanceToDomain(simulation); will(returnValue(ddist)); + }}); + // @formatter:on + + + RocketOptimizationFunction function = new RocketOptimizationFunction(simulation, + parameter, goal, domain, modifier1, modifier2) { + @Override + Simulation newSimulationInstance(Simulation sim) { + return sim; + } + }; + + + assertEquals(Double.NaN, function.getComputedParameterValue(new Point(p1, p2)), 0); + + double value = function.evaluate(new Point(p1, p2)); + assertTrue(value > 1e100); + + assertEquals(Double.NaN, function.getComputedParameterValue(new Point(p1, p2)), 0); + + value = function.evaluate(new Point(p1, p2)); + assertTrue(value > 1e100); + } + + @Test + public void testOutsideDomain2() throws InterruptedException, OptimizationException { + final Rocket rocket = new Rocket(); + final Simulation simulation = new Simulation(rocket); + + final double p1 = 0.4; + final double p2 = 0.7; + final double ddist = Double.NaN; + + // @formatter:off + context.checking(new Expectations() {{ + oneOf(modifier1).modify(simulation, p1); + oneOf(modifier2).modify(simulation, p2); + oneOf(domain).getDistanceToDomain(simulation); will(returnValue(ddist)); + }}); + // @formatter:on + + + RocketOptimizationFunction function = new RocketOptimizationFunction(simulation, + parameter, goal, domain, modifier1, modifier2) { + @Override + Simulation newSimulationInstance(Simulation sim) { + return sim; + } + }; + + + assertEquals(Double.NaN, function.getComputedParameterValue(new Point(p1, p2)), 0); + + double value = function.evaluate(new Point(p1, p2)); + assertEquals(Double.MAX_VALUE, value, 0); + + assertEquals(Double.NaN, function.getComputedParameterValue(new Point(p1, p2)), 0); + + value = function.evaluate(new Point(p1, p2)); + assertEquals(Double.MAX_VALUE, value, 0); + } + + + @Test + public void testNewSimulationInstance() { + final Rocket rocket = new Rocket(); + rocket.setName("Foobar"); + final Simulation simulation = new Simulation(rocket); + simulation.setName("MySim"); + + RocketOptimizationFunction function = new RocketOptimizationFunction(simulation, + parameter, goal, domain, modifier1, modifier2); + + Simulation sim = function.newSimulationInstance(simulation); + assertFalse(simulation == sim); + assertEquals("MySim", sim.getName()); + assertFalse(rocket == sim.getRocket()); + assertEquals("Foobar", sim.getRocket().getName()); + } + +} diff --git a/test/net/sf/openrocket/util/TestMutex.java b/test/net/sf/openrocket/util/TestMutex.java new file mode 100644 index 00000000..dd01848d --- /dev/null +++ b/test/net/sf/openrocket/util/TestMutex.java @@ -0,0 +1,156 @@ +package net.sf.openrocket.util; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class TestMutex { + + @Test + public void testSingleLocking() { + SafetyMutex m = new SafetyMutex(); + + // Test single locking + assertNull(m.lockingThread); + m.verify(); + m.lock("here"); + assertNotNull(m.lockingThread); + assertTrue(m.unlock("here")); + + } + + @Test + public void testDoubleLocking() { + SafetyMutex m = new SafetyMutex(); + + // Test double locking + m.verify(); + m.lock("foobar"); + m.verify(); + m.lock("bazqux"); + m.verify(); + assertTrue(m.unlock("bazqux")); + m.verify(); + assertTrue(m.unlock("foobar")); + m.verify(); + } + + @Test + public void testDoubleUnlocking() { + SafetyMutex m = new SafetyMutex(); + // Mark error reported to not init exception handler + SafetyMutex.errorReported = true; + + m.lock("here"); + assertTrue(m.unlock("here")); + assertFalse(m.unlock("here")); + } + + + + private volatile int testState = 0; + private volatile String failure = null; + + @Test(timeout = 1000) + public void testThreadingErrors() { + final SafetyMutex m = new SafetyMutex(); + + // Initialize and start the thread + Thread thread = new Thread() { + @Override + public void run() { + try { + + // Test locking a locked mutex + waitFor(1); + try { + m.lock("in thread one"); + failure = "Succeeded in locking a mutex locked by a different thread"; + return; + } catch (ConcurrencyException e) { + // OK + } + + // Test unlocking a mutex locked by a different thread + if (m.unlock("in thread two")) { + failure = "Succeeded in unlocking a mutex locked by a different thread"; + return; + } + + // Test verifying a locked mutex that already has an error + try { + m.verify(); + failure = "Succeeded in verifying a mutex locked by a different thread"; + return; + } catch (ConcurrencyException e) { + // OK + } + + // Test locking a mutex after it's been unlocked + testState = 2; + waitFor(3); + m.lock("in thread three"); + m.verify(); + + // Wait for other side to test + testState = 4; + waitFor(5); + + // Exit code + testState = 6; + + } catch (Exception e) { + failure = "Exception occurred in thread: " + e; + return; + } + + } + }; + thread.setDaemon(true); + thread.start(); + + m.lock("one"); + testState = 1; + + waitFor(2); + assertNull("Thread error: " + failure, failure); + + m.verify(); + m.unlock("one"); + testState = 3; + + waitFor(4); + assertNull("Thread error: " + failure, failure); + + try { + m.lock("two"); + fail("Succeeded in locking a locked mutex in main thread"); + } catch (ConcurrencyException e) { + // OK + } + + // Test unlocking a mutex locked by a different thread + assertFalse(m.unlock("here")); + + try { + m.verify(); + fail("Succeeded in verifying a locked mutex in main thread"); + } catch (ConcurrencyException e) { + // OK + } + + testState = 5; + waitFor(6); + assertNull("Thread error: " + failure, failure); + } + + private void waitFor(int state) { + while (testState != state && failure == null) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + } + } + } + +} -- 2.30.2