From 917ce9b914ca8db51a48d71c4ee07657be154dd7 Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris@kearneymail.com>
Date: Tue, 1 Sep 2015 07:38:52 -0700
Subject: [PATCH] Generating maps on a background thread.  It was causing the
 build command to be very slow.

---
 .../comandante/creeper/world/MapsManager.java | 26 ++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/main/java/com/comandante/creeper/world/MapsManager.java b/src/main/java/com/comandante/creeper/world/MapsManager.java
index 5cc18ca7..5a4e9407 100644
--- a/src/main/java/com/comandante/creeper/world/MapsManager.java
+++ b/src/main/java/com/comandante/creeper/world/MapsManager.java
@@ -1,19 +1,30 @@
 package com.comandante.creeper.world;
 
+import com.codahale.metrics.Timer;
 import com.comandante.creeper.CreeperConfiguration;
+import com.comandante.creeper.Main;
+import com.comandante.creeper.managers.GameManager;
 import com.comandante.creeper.server.Color;
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.collect.Maps;
+import org.apache.log4j.Logger;
 
 import java.util.Iterator;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import static com.codahale.metrics.MetricRegistry.name;
 
 public class MapsManager {
 
     private final RoomManager roomManager;
     private final Map<Integer, MapMatrix> floorMatrixMaps;
     private final CreeperConfiguration creeperConfiguration;
+    private final ExecutorService mapGeneratorService = Executors.newFixedThreadPool(1);
+    private static final Logger log = Logger.getLogger(GameManager.class);
+    private final com.codahale.metrics.Timer ticktime = Main.metrics.timer(name(MapsManager.class, "generate_all_maps_time"));
 
     public MapsManager(CreeperConfiguration creeperConfiguration, RoomManager roomManager) {
         this.roomManager = roomManager;
@@ -21,7 +32,8 @@ public class MapsManager {
         this.creeperConfiguration = creeperConfiguration;
     }
 
-    public void generateAllMaps() {
+    private void generate() {
+        Timer.Context time = ticktime.time();
         int maxRows = creeperConfiguration.defaultMapSize;
         int maxColumns = creeperConfiguration.defaultMapSize;
         Iterator<Map.Entry<Integer, Room>> rooms = roomManager.getRooms();
@@ -31,6 +43,11 @@ public class MapsManager {
             String s = drawMap(roomId, new Coords(maxRows, maxColumns));
             next.getValue().setMapData(Optional.of(s));
         }
+        time.stop();
+    }
+
+    public void generateAllMaps() {
+        mapGeneratorService.submit(new MapGeneration());
     }
 
     public String drawMap(Integer roomId, Coords max) {
@@ -74,4 +91,11 @@ public class MapsManager {
     public Map<Integer, MapMatrix> getFloorMatrixMaps() {
         return floorMatrixMaps;
     }
+
+    class MapGeneration implements Runnable {
+        @Override
+        public void run() {
+            generate();
+        }
+    }
 }
\ No newline at end of file
-- 
GitLab