From 766820f3281f493b087345ee1c65766e927ec31a Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 16 Nov 2011 12:01:46 +0000 Subject: [PATCH] Improving logging for detecting bad performance. --- .../logic/modifiers/LoggingThreadLocal.java | 16 +- .../lotro/logic/modifiers/ModifiersLogic.java | 394 ++++++------------ .../gempukku/lotro/server/ServerResource.java | 54 +-- 3 files changed, 167 insertions(+), 297 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LoggingThreadLocal.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LoggingThreadLocal.java index 544327808..5ebffcf1d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LoggingThreadLocal.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LoggingThreadLocal.java @@ -8,26 +8,22 @@ public class LoggingThreadLocal { private static ThreadLocal _logLocal = new ThreadLocal(); private static ThreadLocal _start = new ThreadLocal(); - public static boolean isStarting() { - if (_logLocal.get() == null) { - _logLocal.set(new StringBuilder()); - _start.set(System.currentTimeMillis()); - return true; - } - return false; + public static void start() { + _logLocal.set(new StringBuilder()); + _start.set(System.currentTimeMillis()); } public static void log(PhysicalCard card, String desc) { StringBuilder builder = _logLocal.get(); - if (builder != null) + if (builder != null && card != null) builder.append(card.getBlueprintId()).append(" ").append(desc).append(" - "); } - public static void stop() { + public static void stop(boolean writeOperation) { long start = _start.get(); long time = System.currentTimeMillis() - start; if (time > 100) - LOG.error("Processing took " + time + "ms: \n" + _logLocal.get().toString()); + LOG.error("Processing took (" + writeOperation + ")" + time + "ms: \n" + _logLocal.get().toString()); _start.set(null); _logLocal.set(null); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index a6a7dabf5..1094a0285 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -188,53 +188,41 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public boolean hasKeyword(GameState gameState, PhysicalCard physicalCard, Keyword keyword) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "hasKeyword"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) - return false; - } + LoggingThreadLocal.log(physicalCard, "hasKeyword"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) + return false; + } - if (physicalCard.getBlueprint().hasKeyword(keyword)) - return true; + if (physicalCard.getBlueprint().hasKeyword(keyword)) + return true; - for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier) - && appliesKeywordModifier(gameState, modifier.getSource(), keyword)) - if (modifier.hasKeyword(gameState, this, physicalCard, keyword)) - return true; - } - } finally { - if (starting) - LoggingThreadLocal.stop(); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier) + && appliesKeywordModifier(gameState, modifier.getSource(), keyword)) + if (modifier.hasKeyword(gameState, this, physicalCard, keyword)) + return true; } return false; } @Override public int getKeywordCount(GameState gameState, PhysicalCard physicalCard, Keyword keyword) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "getKeywordCount"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) - return 0; - } - - int result = physicalCard.getBlueprint().getKeywordCount(keyword); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier) - && appliesKeywordModifier(gameState, modifier.getSource(), keyword)) - result += modifier.getKeywordCountModifier(gameState, this, physicalCard, keyword); - } - return Math.max(0, result); - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(physicalCard, "getKeywordCount"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) + return 0; } + + int result = physicalCard.getBlueprint().getKeywordCount(keyword); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier) + && appliesKeywordModifier(gameState, modifier.getSource(), keyword)) + result += modifier.getKeywordCountModifier(gameState, this, physicalCard, keyword); + } + return Math.max(0, result); } private boolean appliesKeywordModifier(GameState gameState, PhysicalCard modifierSource, Keyword keyword) { @@ -266,20 +254,14 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public int getStrength(GameState gameState, PhysicalCard physicalCard) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "getStrength"); - int result = physicalCard.getBlueprint().getStrength(); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.STRENGTH_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier) - && appliesStrengthModifier(gameState, modifier.getSource())) - result += modifier.getStrengthModifier(gameState, this, physicalCard); - } - return Math.max(0, result); - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(physicalCard, "getStrength"); + int result = physicalCard.getBlueprint().getStrength(); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.STRENGTH_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier) + && appliesStrengthModifier(gameState, modifier.getSource())) + result += modifier.getStrengthModifier(gameState, this, physicalCard); } + return Math.max(0, result); } private boolean appliesStrengthModifier(GameState gameState, PhysicalCard modifierSource) { @@ -295,262 +277,172 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public int getVitality(GameState gameState, PhysicalCard physicalCard) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "getVitality"); - int result = physicalCard.getBlueprint().getVitality() - gameState.getWounds(physicalCard); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.VITALITY_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result += modifier.getVitalityModifier(gameState, this, physicalCard); - } - return Math.max(0, result); - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(physicalCard, "getVitality"); + int result = physicalCard.getBlueprint().getVitality() - gameState.getWounds(physicalCard); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.VITALITY_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + result += modifier.getVitalityModifier(gameState, this, physicalCard); } + return Math.max(0, result); } @Override public int getResistance(GameState gameState, PhysicalCard physicalCard) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "getResistance"); - int result = physicalCard.getBlueprint().getResistance() - gameState.getBurdens(); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.RESISTANCE_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result += modifier.getResistanceModifier(gameState, this, physicalCard); - } - return Math.max(0, result); - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(physicalCard, "getResistance"); + int result = physicalCard.getBlueprint().getResistance() - gameState.getBurdens(); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.RESISTANCE_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + result += modifier.getResistanceModifier(gameState, this, physicalCard); } + return Math.max(0, result); } @Override public int getMinionSiteNumber(GameState gameState, PhysicalCard physicalCard) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "getMinionSiteNumber"); - int result = physicalCard.getBlueprint().getSiteNumber(); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.SITE_NUMBER_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result += modifier.getMinionSiteNumberModifier(gameState, this, physicalCard); - } - return Math.max(0, result); - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(physicalCard, "getMinionSiteNumber"); + int result = physicalCard.getBlueprint().getSiteNumber(); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.SITE_NUMBER_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + result += modifier.getMinionSiteNumberModifier(gameState, this, physicalCard); } + return Math.max(0, result); } @Override public int getTwilightCost(GameState gameState, PhysicalCard physicalCard, boolean ignoreRoamingPenalty) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "getTwilightCost"); - int result = physicalCard.getBlueprint().getTwilightCost(); - result += physicalCard.getBlueprint().getTwilightCostModifier(gameState, this, physicalCard); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result += modifier.getTwilightCostModifier(gameState, this, physicalCard, ignoreRoamingPenalty); - } - return Math.max(0, result); - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(physicalCard, "getTwilightCost"); + int result = physicalCard.getBlueprint().getTwilightCost(); + result += physicalCard.getBlueprint().getTwilightCostModifier(gameState, this, physicalCard); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + result += modifier.getTwilightCostModifier(gameState, this, physicalCard, ignoreRoamingPenalty); } + return Math.max(0, result); } @Override public int getPlayOnTwilightCost(GameState gameState, PhysicalCard physicalCard, PhysicalCard target) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "getPlayOnTwilightCost"); - int result = getTwilightCost(gameState, physicalCard, false); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result += modifier.getPlayOnTwilightCostModifier(gameState, this, physicalCard, target); - } - return Math.max(0, result); - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(physicalCard, "getPlayOnTwilightCost"); + int result = getTwilightCost(gameState, physicalCard, false); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + result += modifier.getPlayOnTwilightCostModifier(gameState, this, physicalCard, target); } + return Math.max(0, result); } @Override public int getRoamingPenalty(GameState gameState, PhysicalCard physicalCard) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(physicalCard, "getRoamingPenalty"); - int result = 2; - for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result += modifier.getRoamingPenaltyModifier(gameState, this, physicalCard); - } - return Math.max(0, result); - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(physicalCard, "getRoamingPenalty"); + int result = 2; + for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + result += modifier.getRoamingPenaltyModifier(gameState, this, physicalCard); } + return Math.max(0, result); } @Override public int getOverwhelmMultiplier(GameState gameState, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "getOverwhelmMultiplier"); - int overwhelmMultiplier = 2; - for (Modifier modifier : getModifiers(gameState, ModifierEffect.OVERWHELM_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - overwhelmMultiplier = Math.max(overwhelmMultiplier, modifier.getOverwhelmMultiplier(gameState, this, card)); - } - return overwhelmMultiplier; - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(card, "getOverwhelmMultiplier"); + int overwhelmMultiplier = 2; + for (Modifier modifier : getModifiers(gameState, ModifierEffect.OVERWHELM_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, card, modifier)) + overwhelmMultiplier = Math.max(overwhelmMultiplier, modifier.getOverwhelmMultiplier(gameState, this, card)); } + return overwhelmMultiplier; } @Override public boolean canTakeWound(GameState gameState, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "canTakeWound"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) { - Integer woundsTaken = _woundsPerPhaseMap.get(card.getCardId()); - if (woundsTaken == null) - woundsTaken = 0; - if (!modifier.canTakeWound(gameState, this, card, woundsTaken)) - return false; - } + LoggingThreadLocal.log(card, "canTakeWound"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, card, modifier)) { + Integer woundsTaken = _woundsPerPhaseMap.get(card.getCardId()); + if (woundsTaken == null) + woundsTaken = 0; + if (!modifier.canTakeWound(gameState, this, card, woundsTaken)) + return false; } - } finally { - if (starting) - LoggingThreadLocal.stop(); } return true; } @Override public boolean canTakeArcheryWound(GameState gameState, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "canTakeArcheryWound"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) { - if (!modifier.canTakeArcheryWound(gameState, this, card)) - return false; - } + LoggingThreadLocal.log(card, "canTakeArcheryWound"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, card, modifier)) { + if (!modifier.canTakeArcheryWound(gameState, this, card)) + return false; } - } finally { - if (starting) - LoggingThreadLocal.stop(); } return true; } @Override public boolean canBeExerted(GameState gameState, PhysicalCard source, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "canBeExerted"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (!modifier.canBeExerted(gameState, this, source, card)) - return false; - } - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(card, "canBeExerted"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (!modifier.canBeExerted(gameState, this, source, card)) + return false; } return true; } @Override public boolean isAllyAllowedToParticipateInArcheryFire(GameState gameState, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "isAllyAllowedToParticipateInArcheryFire"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (modifier.isAllyParticipateInArcheryFire(gameState, this, card)) - return true; - } - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(card, "isAllyAllowedToParticipateInArcheryFire"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (modifier.isAllyParticipateInArcheryFire(gameState, this, card)) + return true; } return false; } @Override public boolean isAllowedToParticipateInSkirmishes(GameState gameState, Side sidePlayer, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "isAllowedToParticipateInSkirmished"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (modifier.isParticipateInSkirmishes(gameState, sidePlayer, this, card)) - return true; - } - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(card, "isAllowedToParticipateInSkirmished"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (modifier.isParticipateInSkirmishes(gameState, sidePlayer, this, card)) + return true; } return false; } @Override public boolean isAllyPreventedFromParticipatingInArcheryFire(GameState gameState, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "isAllyPreventedFromParticipatingInArcheryFire"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (modifier.isAllyPreventedFromParticipatingInArcheryFire(gameState, this, card)) - return true; - } - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(card, "isAllyPreventedFromParticipatingInArcheryFire"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (modifier.isAllyPreventedFromParticipatingInArcheryFire(gameState, this, card)) + return true; } return false; } @Override public boolean isAllyPreventedFromParticipatingInSkirmishes(GameState gameState, Side sidePlayer, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "isAllyPreventedFromParticipatingInSkirmishes"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (modifier.isAllyPreventedFromParticipatingInSkirmishes(gameState, sidePlayer, this, card)) - return true; - } - } finally { - if (starting) - LoggingThreadLocal.stop(); + LoggingThreadLocal.log(card, "isAllyPreventedFromParticipatingInSkirmishes"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (modifier.isAllyPreventedFromParticipatingInSkirmishes(gameState, sidePlayer, this, card)) + return true; } return false; } @Override public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "addsToArcheryTotal"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.ARCHERY_MODIFIER)) - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (!modifier.addsToArcheryTotal(gameState, this, card)) - return false; + LoggingThreadLocal.log(card, "addsToArcheryTotal"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.ARCHERY_MODIFIER)) + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (!modifier.addsToArcheryTotal(gameState, this, card)) + return false; - } finally { - if (starting) - LoggingThreadLocal.stop(); - } return true; } @@ -620,49 +512,31 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "canBeAssignedToSkirmish"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.ASSIGNMENT_MODIFIER)) - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (!modifier.canBeAssignedToSkirmish(gameState, sidePlayer, this, card)) - return false; - } finally { - if (starting) - LoggingThreadLocal.stop(); - } + LoggingThreadLocal.log(card, "canBeAssignedToSkirmish"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.ASSIGNMENT_MODIFIER)) + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (!modifier.canBeAssignedToSkirmish(gameState, sidePlayer, this, card)) + return false; return true; } @Override public boolean canBeDiscardedFromPlay(GameState gameState, PhysicalCard card, PhysicalCard source) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "canBeDiscardedFromPlay"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.DISCARD_FROM_PLAY_MODIFIER)) - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (!modifier.canBeDiscardedFromPlay(gameState, this, card, source)) - return false; - } finally { - if (starting) - LoggingThreadLocal.stop(); - } + LoggingThreadLocal.log(card, "canBeDiscardedFromPlay"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.DISCARD_FROM_PLAY_MODIFIER)) + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (!modifier.canBeDiscardedFromPlay(gameState, this, card, source)) + return false; return true; } @Override public boolean canBeHealed(GameState gameState, PhysicalCard card) { - boolean starting = LoggingThreadLocal.isStarting(); - try { - LoggingThreadLocal.log(card, "canBeHealed"); - for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) - if (affectsCardWithSkipSet(gameState, card, modifier)) - if (!modifier.canBeHealed(gameState, this, card)) - return false; - } finally { - if (starting) - LoggingThreadLocal.stop(); - } + LoggingThreadLocal.log(card, "canBeHealed"); + for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) + if (affectsCardWithSkipSet(gameState, card, modifier)) + if (!modifier.canBeHealed(gameState, this, card)) + return false; return true; } diff --git a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerResource.java b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerResource.java index aef5454ec..2d759fd7e 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerResource.java +++ b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerResource.java @@ -18,6 +18,7 @@ import com.gempukku.lotro.hall.HallException; import com.gempukku.lotro.hall.HallInfoVisitor; import com.gempukku.lotro.hall.HallServer; import com.gempukku.lotro.league.LeagueService; +import com.gempukku.lotro.logic.modifiers.LoggingThreadLocal; import com.gempukku.lotro.logic.vo.LotroDeck; import com.sun.jersey.spi.resource.Singleton; import org.apache.commons.lang.StringEscapeUtils; @@ -279,36 +280,35 @@ public class ServerResource { if (!_test) participantId = getLoggedUser(request); - long start = System.currentTimeMillis(); + LoggingThreadLocal.start(); + try { + LotroGameMediator gameMediator = _lotroServer.getGameById(gameId); + if (gameMediator == null) + sendError(Response.Status.NOT_FOUND); - LotroGameMediator gameMediator = _lotroServer.getGameById(gameId); - if (gameMediator == null) - sendError(Response.Status.NOT_FOUND); - - if (decisionId != null) { - try { - gameMediator.playerAnswered(participantId, decisionId, decisionValue); - } catch (RuntimeException exp) { - _logger.error("Error while sending decision", exp); - throw exp; + if (decisionId != null) { + try { + gameMediator.playerAnswered(participantId, decisionId, decisionValue); + } catch (RuntimeException exp) { + _logger.error("Error while sending decision", exp); + throw exp; + } } + + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + + Document doc = documentBuilder.newDocument(); + Element update = doc.createElement("update"); + + gameMediator.processCommunicationChannel(participantId, new SerializationVisitor(doc, update)); + + doc.appendChild(update); + + return doc; + } finally { + LoggingThreadLocal.stop(decisionId != null); } - - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); - - Document doc = documentBuilder.newDocument(); - Element update = doc.createElement("update"); - - gameMediator.processCommunicationChannel(participantId, new SerializationVisitor(doc, update)); - - doc.appendChild(update); - - long time = System.currentTimeMillis() - start; - if (time > 100) - _logger.debug("Processing time: " + time); - - return doc; } @Path("/deck/list")