From d120d419b5d303c071cae6e7efcc54389fa76445 Mon Sep 17 00:00:00 2001 From: Adrian Siekierka Date: Fri, 26 Oct 2018 19:48:36 +0200 Subject: remove parallelStreams on non-thread-safe ooperations in rebuildMethodNames, gain a bit of performance by not clearing the cache endlessly in phase 2 --- src/main/java/cuchaz/enigma/Deobfuscator.java | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java index 0c671589..465c1ec3 100644 --- a/src/main/java/cuchaz/enigma/Deobfuscator.java +++ b/src/main/java/cuchaz/enigma/Deobfuscator.java @@ -368,7 +368,7 @@ public class Deobfuscator { public void rebuildMethodNames(ProgressListener progress) { final AtomicInteger i = new AtomicInteger(); - Map> renameClassMap = new HashMap<>(); + Map> renameClassMap = new ConcurrentHashMap<>(); progress.init(getMappings().classes().size() * 3, "Rebuilding method names"); @@ -378,16 +378,18 @@ public class Deobfuscator { }); - renameClassMap.entrySet().parallelStream().forEach(renameClassMapEntry -> { + renameClassMap.entrySet().stream().forEach(renameClassMapEntry -> { progress.onProgress(i.getAndIncrement(), renameClassMapEntry.getKey().getDeobfName()); for (Map.Entry entry : renameClassMapEntry.getValue().entrySet()) { Entry obfEntry = entry.getKey(); - removeMapping(obfEntry); + removeMapping(obfEntry, false); } }); - renameClassMap.entrySet().parallelStream().forEach(renameClassMapEntry -> { + translatorCache.clear(); + + renameClassMap.entrySet().stream().forEach(renameClassMapEntry -> { progress.onProgress(i.getAndIncrement(), renameClassMapEntry.getKey().getDeobfName()); for (Map.Entry entry : renameClassMapEntry.getValue().entrySet()) { @@ -623,6 +625,10 @@ public class Deobfuscator { } public void removeMapping(Entry obfEntry) { + removeMapping(obfEntry, true); + } + + public void removeMapping(Entry obfEntry, boolean clearCache) { if (obfEntry instanceof ClassEntry) { this.renamer.removeClassMapping((ClassEntry) obfEntry); } else if (obfEntry instanceof FieldEntry) { @@ -639,10 +645,15 @@ public class Deobfuscator { } // clear caches - this.translatorCache.clear(); + if (clearCache) + this.translatorCache.clear(); } public void markAsDeobfuscated(Entry obfEntry) { + markAsDeobfuscated(obfEntry, true); + } + + public void markAsDeobfuscated(Entry obfEntry, boolean clearCache) { if (obfEntry instanceof ClassEntry) { this.renamer.markClassAsDeobfuscated((ClassEntry) obfEntry); } else if (obfEntry instanceof FieldEntry) { @@ -660,7 +671,8 @@ public class Deobfuscator { } // clear caches - this.translatorCache.clear(); + if (clearCache) + this.translatorCache.clear(); } public void changeModifier(Entry entry, Mappings.EntryModifier modifierEntry) { -- cgit v1.2.3