diff --git a/Mage.Tests/src/test/java/org/mage/test/ai/LevelUpAbilityTest.java b/Mage.Tests/src/test/java/org/mage/test/ai/LevelUpAbilityTest.java index 190a1af80be..42c6c789134 100644 --- a/Mage.Tests/src/test/java/org/mage/test/ai/LevelUpAbilityTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/ai/LevelUpAbilityTest.java @@ -4,6 +4,7 @@ import junit.framework.Assert; import mage.Constants; import mage.counters.Counter; import mage.counters.CounterType; +import mage.game.GameImpl; import mage.game.permanent.Permanent; import org.junit.Test; import org.mage.test.serverside.base.CardTestBase; @@ -36,5 +37,8 @@ public class LevelUpAbilityTest extends CardTestBase { Assert.assertNotNull(master.getCounters()); Assert.assertFalse(master.getCounters().isEmpty()); Assert.assertEquals(12, master.getCounters().getCount(CounterType.LEVEL)); + + System.out.println("Copy count: " + GameImpl.copyCount); + System.out.println("Copy time: " + GameImpl.copyTime + " ms"); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/performance/CopyGameStatePerformanceTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/performance/CopyGameStatePerformanceTest.java new file mode 100644 index 00000000000..d92775c4664 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/performance/CopyGameStatePerformanceTest.java @@ -0,0 +1,35 @@ +package org.mage.test.serverside.performance; + +import mage.game.Game; +import org.mage.test.serverside.base.CardTestBase; + +/** + * Test for copying game state. + * + * @ayratn + */ +public class CopyGameStatePerformanceTest extends CardTestBase { + + public void run() throws Exception { + init(); + reset(); + System.out.println("Started copying..."); + long t1 = System.currentTimeMillis(); + for (int i = 0; i < 2000; i++) { + Game game = currentGame.copy(); + Game game2 = game.copy(); + } + long t2 = System.currentTimeMillis(); + System.out.println("Test took: " + (t2-t1) + " ms"); + } + + public static void main(String[] args) { + CopyGameStatePerformanceTest test = new CopyGameStatePerformanceTest(); + try { + test.run(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } +} diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 82b47172fd3..dd5cfd60202 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -105,6 +105,9 @@ public abstract class GameImpl> implements Game, Serializa protected MultiplayerAttackOption attackOption; protected GameOptions gameOptions; + public static volatile int copyCount = 0; + public static volatile long copyTime = 0; + @Override public abstract T copy(); @@ -116,6 +119,10 @@ public abstract class GameImpl> implements Game, Serializa } public GameImpl(final GameImpl game) { + long t1 = 0; + if (logger.isDebugEnabled()) { + t1 = System.currentTimeMillis(); + } this.id = game.id; this.ready = game.ready; this.startingPlayerId = game.startingPlayerId; @@ -131,6 +138,10 @@ public abstract class GameImpl> implements Game, Serializa this.simulation = game.simulation; this.gameOptions = game.gameOptions; this.lki.putAll(game.lki); + if (logger.isDebugEnabled()) { + copyCount++; + copyTime += (System.currentTimeMillis() - t1); + } } @Override