From 3841648ebad19e6a6ad6a420ac0c0799d392da5c Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 18 Nov 2011 05:13:38 +0100 Subject: Update ExecuteTimer to use ns instead of ms for calculations, output is still in ms --- .../src/com/earth2me/essentials/ExecuteTimer.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ExecuteTimer.java b/Essentials/src/com/earth2me/essentials/ExecuteTimer.java index 7a88018c2..301669428 100644 --- a/Essentials/src/com/earth2me/essentials/ExecuteTimer.java +++ b/Essentials/src/com/earth2me/essentials/ExecuteTimer.java @@ -1,12 +1,17 @@ package com.earth2me.essentials; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public class ExecuteTimer { - private final List times; + private final transient List times; + private final transient DecimalFormat decimalFormat = new DecimalFormat("#0.000", DecimalFormatSymbols.getInstance(Locale.US)); + public ExecuteTimer() { @@ -24,7 +29,7 @@ public class ExecuteTimer { if (!times.isEmpty() || "start".equals(label)) { - times.add(new ExecuteRecord(label, System.currentTimeMillis())); + times.add(new ExecuteRecord(label, System.nanoTime())); } } @@ -36,7 +41,7 @@ public class ExecuteTimer long time0 = 0; long time1 = 0; long time2 = 0; - long duration; + double duration; for (ExecuteRecord pair : times) { @@ -44,8 +49,8 @@ public class ExecuteTimer time2 = (Long)pair.getTime(); if (time1 > 0) { - duration = time2 - time1; - output.append(mark).append(": ").append(duration).append("ms - "); + duration = (time2 - time1)/1000000.0; + output.append(mark).append(": ").append(decimalFormat.format(duration)).append("ms - "); } else { @@ -53,8 +58,8 @@ public class ExecuteTimer } time1 = time2; } - duration = time1 - time0; - output.append("Total: ").append(duration).append("ms"); + duration = (time1 - time0)/1000000.0; + output.append("Total: ").append(decimalFormat.format(duration)).append("ms"); times.clear(); return output.toString(); } -- cgit v1.2.3 From c96b14a34c1a90dce502fd12c1c2b3cf9cf22460 Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 18 Nov 2011 05:23:38 +0100 Subject: Remove useless import --- Essentials/src/com/earth2me/essentials/textreader/TextInput.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/textreader/TextInput.java b/Essentials/src/com/earth2me/essentials/textreader/TextInput.java index c5536dd51..bc2230c03 100644 --- a/Essentials/src/com/earth2me/essentials/textreader/TextInput.java +++ b/Essentials/src/com/earth2me/essentials/textreader/TextInput.java @@ -17,7 +17,6 @@ import java.util.List; import java.util.Map; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import quicktime.streaming.Stream; public class TextInput implements IText -- cgit v1.2.3 From edf0ab756c9a48b46dcdd0e2fe30eee2fc3760d2 Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 18 Nov 2011 05:29:27 +0100 Subject: Updated UserMap to newest Guava-API --- .../src/com/earth2me/essentials/UserMap.java | 68 ++++++++++++---------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/UserMap.java b/Essentials/src/com/earth2me/essentials/UserMap.java index 580b2aaf9..dc6d310e6 100644 --- a/Essentials/src/com/earth2me/essentials/UserMap.java +++ b/Essentials/src/com/earth2me/essentials/UserMap.java @@ -1,24 +1,27 @@ package com.earth2me.essentials; -import com.google.common.base.Function; -import com.google.common.collect.ComputationException; -import com.google.common.collect.MapMaker; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.collect.ConcurrentHashMultiset; import java.io.File; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -public class UserMap implements Function, IConf +public class UserMap extends CacheLoader implements IConf { private final transient IEssentials ess; - private final transient ConcurrentMap users = new MapMaker().softValues().makeComputingMap(this); + private final transient Cache users = CacheBuilder.newBuilder().softValues().build(this); + private final transient ConcurrentHashMultiset keys = ConcurrentHashMultiset.create(); public UserMap(final IEssentials ess) { + super(); this.ess = ess; loadAllUsersAsync(ess); } @@ -35,6 +38,8 @@ public class UserMap implements Function, IConf { return; } + keys.clear(); + users.invalidateAll(); for (String string : userdir.list()) { if (!string.endsWith(".yml")) @@ -42,18 +47,7 @@ public class UserMap implements Function, IConf continue; } final String name = string.substring(0, string.length() - 4); - try - { - users.get(name.toLowerCase()); - } - catch (NullPointerException ex) - { - // Ignore these - } - catch (ComputationException ex) - { - Bukkit.getLogger().log(Level.INFO, "Failed to preload user " + name, ex); - } + keys.add(name.toLowerCase()); } } }); @@ -61,21 +55,29 @@ public class UserMap implements Function, IConf public boolean userExists(final String name) { - return users.containsKey(name.toLowerCase()); + return keys.contains(name.toLowerCase()); } public User getUser(final String name) throws NullPointerException { - return users.get(name.toLowerCase()); + try + { + return users.get(name.toLowerCase()); + } + catch (ExecutionException ex) + { + throw new NullPointerException(); + } } @Override - public User apply(final String name) + public User load(final String name) throws Exception { for (Player player : ess.getServer().getOnlinePlayers()) { if (player.getName().equalsIgnoreCase(name)) { + keys.add(name.toLowerCase()); return new User(player, ess); } } @@ -83,37 +85,43 @@ public class UserMap implements Function, IConf final File userFile = new File(userFolder, Util.sanitizeFileName(name) + ".yml"); if (userFile.exists()) { + keys.add(name.toLowerCase()); return new User(new OfflinePlayer(name, ess), ess); } - return null; + throw new Exception("User not found!"); } @Override public void reloadConfig() { - for (User user : users.values()) - { - user.reloadConfig(); - } + loadAllUsersAsync(ess); } public void removeUser(final String name) { - users.remove(name.toLowerCase()); + keys.remove(name.toLowerCase()); + users.invalidate(name.toLowerCase()); } public Set getAllUsers() { final Set userSet = new HashSet(); - for (String name : users.keySet()) + for (String name : keys) { - userSet.add(users.get(name)); + try + { + userSet.add(users.get(name)); + } + catch (ExecutionException ex) + { + Bukkit.getLogger().log(Level.INFO, "Failed to load user " + name, ex); + } } return userSet; } public int getUniqueUsers() { - return users.size(); + return keys.size(); } } -- cgit v1.2.3