diff options
author | shedaniel <daniel@shedaniel.me> | 2021-05-01 19:40:27 +0800 |
---|---|---|
committer | shedaniel <daniel@shedaniel.me> | 2021-05-01 19:40:27 +0800 |
commit | 77e71acd99b735e3f4fea3b15149c2f351c1cdb8 (patch) | |
tree | 6ec17ee58269adc5a3411493a2ea695420ad7c92 /src/main/java/net/fabricmc/loom/util | |
parent | c28fe56870a6bf5d49e5b704e96e84072d8d68f5 (diff) | |
download | architectury-loom-77e71acd99b735e3f4fea3b15149c2f351c1cdb8.tar.gz architectury-loom-77e71acd99b735e3f4fea3b15149c2f351c1cdb8.tar.bz2 architectury-loom-77e71acd99b735e3f4fea3b15149c2f351c1cdb8.zip |
a
Diffstat (limited to 'src/main/java/net/fabricmc/loom/util')
6 files changed, 48 insertions, 18 deletions
diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java index cc33b6fe..046a2759 100644 --- a/src/main/java/net/fabricmc/loom/util/Constants.java +++ b/src/main/java/net/fabricmc/loom/util/Constants.java @@ -40,6 +40,7 @@ public class Constants { public static final String VERSION_MANIFESTS = "https://launchermeta.mojang.com/mc/game/version_manifest_v2.json"; public static final String SYSTEM_ARCH = System.getProperty("os.arch").equals("64") ? "64" : "32"; + public static final String TASK_CATEGORY = "loom"; public static final int ASM_VERSION = Opcodes.ASM9; diff --git a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java index f9573bf5..22ba7f70 100644 --- a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.Set; import java.util.function.Consumer; +import com.google.common.base.Stopwatch; import org.cadixdev.lorenz.MappingSet; import org.cadixdev.mercury.Mercury; import org.cadixdev.mercury.remapper.MercuryRemapper; @@ -45,7 +46,7 @@ import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.configuration.RemappedConfigurationEntry; import net.fabricmc.loom.configuration.providers.LaunchProvider; import net.fabricmc.loom.configuration.providers.mappings.MappingsProvider; -import net.fabricmc.loom.util.gradle.ProgressLogger; +import net.fabricmc.loom.configuration.providers.minecraft.tr.MercuryUtils; import net.fabricmc.lorenztiny.TinyMappingsReader; import net.fabricmc.mapping.tree.TinyTree; import net.fabricmc.stitch.util.StitchUtil; @@ -54,7 +55,7 @@ public class SourceRemapper { private final Project project; private String from; private String to; - private final List<Consumer<ProgressLogger>> remapTasks = new ArrayList<>(); + private final List<Consumer<Mercury>> remapTasks = new ArrayList<>(); private Mercury mercury; @@ -80,10 +81,9 @@ public class SourceRemapper { } public void scheduleRemapSources(File source, File destination, boolean reproducibleFileOrder, boolean preserveFileTimestamps) { - remapTasks.add((logger) -> { + remapTasks.add((mercury) -> { try { - logger.progress("remapping sources - " + source.getName()); - remapSourcesInner(source, destination); + remapSourcesInner(mercury, source, destination); ZipReprocessorUtil.reprocessZip(destination, reproducibleFileOrder, preserveFileTimestamps); // Set the remapped sources creation date to match the sources if we're likely succeeded in making it @@ -101,22 +101,21 @@ public class SourceRemapper { return; } - project.getLogger().lifecycle(":remapping sources"); + Stopwatch stopwatch = Stopwatch.createStarted(); + project.getLogger().lifecycle(":remapping " + remapTasks.size() + " sources"); - ProgressLogger progressLogger = ProgressLogger.getProgressFactory(project, SourceRemapper.class.getName()); - progressLogger.start("Remapping dependency sources", "sources"); - - remapTasks.forEach(consumer -> consumer.accept(progressLogger)); + Mercury mercury = getMercuryInstance(); + ThreadingUtils.run(remapTasks, consumer -> consumer.accept(MercuryUtils.copyMercury(mercury))); - progressLogger.completed(); + project.getLogger().lifecycle(":remapped " + remapTasks.size() + " sources in " + stopwatch.stop()); // TODO: FIXME - WORKAROUND https://github.com/FabricMC/fabric-loom/issues/45 System.gc(); } - private void remapSourcesInner(File source, File destination) throws Exception { + private void remapSourcesInner(Mercury mercury, File source, File destination) throws Exception { + Stopwatch stopwatch = Stopwatch.createStarted(); project.getLogger().info(":remapping source jar " + source.getName() + " from " + from + " to " + to); - Mercury mercury = getMercuryInstance(); if (source.equals(destination)) { if (source.isDirectory()) { @@ -166,6 +165,8 @@ public class SourceRemapper { if (isSrcTmp) { Files.walkFileTree(srcPath, new DeletingFileVisitor()); } + + project.getLogger().info(":remapped source jar " + source.getName() + " from " + from + " to " + to + " in " + stopwatch.stop()); } private Mercury getMercuryInstance() { diff --git a/src/main/java/net/fabricmc/loom/util/ThreadingUtils.java b/src/main/java/net/fabricmc/loom/util/ThreadingUtils.java index 79b67929..f0c9ff9c 100644 --- a/src/main/java/net/fabricmc/loom/util/ThreadingUtils.java +++ b/src/main/java/net/fabricmc/loom/util/ThreadingUtils.java @@ -34,9 +34,12 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; +import com.google.common.base.Stopwatch; + public class ThreadingUtils { public static <T> void run(Collection<T> values, UnsafeConsumer<T> action) { run(values.stream() @@ -128,10 +131,16 @@ public class ThreadingUtils { } public static class TaskCompleter { + Stopwatch stopwatch = Stopwatch.createUnstarted(); List<CompletableFuture<?>> tasks = new ArrayList<>(); ExecutorService service = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + List<Consumer<Stopwatch>> completionListener = new ArrayList<>(); public TaskCompleter add(UnsafeRunnable job) { + if (!stopwatch.isRunning()) { + stopwatch.start(); + } + tasks.add(CompletableFuture.runAsync(() -> { try { job.run(); @@ -139,6 +148,12 @@ public class ThreadingUtils { throw new RuntimeException(throwable); } }, service)); + + return this; + } + + public TaskCompleter onComplete(Consumer<Stopwatch> consumer) { + completionListener.add(consumer); return this; } @@ -146,6 +161,11 @@ public class ThreadingUtils { try { CompletableFuture.allOf(tasks.toArray(new CompletableFuture[0])).get(); service.shutdownNow(); + stopwatch.stop(); + + for (Consumer<Stopwatch> consumer : completionListener) { + consumer.accept(stopwatch); + } } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e); } diff --git a/src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java b/src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java index b9964020..92e5bf94 100644 --- a/src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java +++ b/src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java @@ -24,13 +24,14 @@ package net.fabricmc.loom.util; +import dev.architectury.tinyremapper.IMappingProvider; + import net.fabricmc.mapping.tree.ClassDef; import net.fabricmc.mapping.tree.FieldDef; import net.fabricmc.mapping.tree.LocalVariableDef; import net.fabricmc.mapping.tree.MethodDef; import net.fabricmc.mapping.tree.ParameterDef; import net.fabricmc.mapping.tree.TinyTree; -import net.fabricmc.tinyremapper.IMappingProvider; public class TinyRemapperMappingsHelper { private TinyRemapperMappingsHelper() { } diff --git a/src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java b/src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java index d0bc7864..021410b6 100644 --- a/src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java @@ -32,11 +32,12 @@ import java.util.Map; import java.util.function.BiConsumer; import java.util.stream.Collectors; +import dev.architectury.tinyremapper.IMappingProvider; + import net.fabricmc.loom.util.FileSystemUtil; import net.fabricmc.loom.util.FileSystemUtil.FileSystemDelegate; import net.fabricmc.mapping.tree.ClassDef; import net.fabricmc.mapping.tree.TinyTree; -import net.fabricmc.tinyremapper.IMappingProvider; public class InnerClassRemapper { public static IMappingProvider of(Path fromJar, TinyTree mappingsWithSrg, String from, String to) throws IOException { diff --git a/src/main/java/net/fabricmc/loom/util/srg/MCPReader.java b/src/main/java/net/fabricmc/loom/util/srg/MCPReader.java index 7639eb00..777a9007 100644 --- a/src/main/java/net/fabricmc/loom/util/srg/MCPReader.java +++ b/src/main/java/net/fabricmc/loom/util/srg/MCPReader.java @@ -39,7 +39,8 @@ import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; -import au.com.bytecode.opencsv.CSVReader; +import com.opencsv.CSVReader; +import com.opencsv.exceptions.CsvValidationException; import org.cadixdev.lorenz.MappingSet; import org.cadixdev.lorenz.io.srg.tsrg.TSrgReader; import org.cadixdev.lorenz.model.ClassMapping; @@ -71,7 +72,12 @@ public class MCPReader { Map<String, String> intermediaryToMCPMap = createIntermediaryToMCPMap(intermediaryTiny, srgTokens); Map<String, String[]> intermediaryToDocsMap = new HashMap<>(); Map<String, Map<Integer, String>> intermediaryToParamsMap = new HashMap<>(); - injectMcp(mcpJar, intermediaryToMCPMap, intermediaryToDocsMap, intermediaryToParamsMap); + + try { + injectMcp(mcpJar, intermediaryToMCPMap, intermediaryToDocsMap, intermediaryToParamsMap); + } catch (CsvValidationException e) { + throw new RuntimeException(e); + } mergeTokensIntoIntermediary(intermediaryTiny, intermediaryToMCPMap, intermediaryToDocsMap, intermediaryToParamsMap); return intermediaryTiny; @@ -186,7 +192,7 @@ public class MCPReader { } private void injectMcp(Path mcpJar, Map<String, String> intermediaryToSrgMap, Map<String, String[]> intermediaryToDocsMap, Map<String, Map<Integer, String>> intermediaryToParamsMap) - throws IOException { + throws IOException, CsvValidationException { Map<String, List<String>> srgToIntermediary = inverseMap(intermediaryToSrgMap); Map<String, List<String>> simpleSrgToIntermediary = new HashMap<>(); Pattern methodPattern = Pattern.compile("(func_\\d*)_.*"); |