diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentUsages.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentUsages.java index b0f5268ad..7fa4ddada 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentUsages.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentUsages.java @@ -33,7 +33,7 @@ public class AsmFragmentUsages { * * @param log The compile log to add the output to */ - public static void logUsages(CompileLog log, boolean logRedundantFiles, boolean logUnusedFiles, boolean logDetails) { + public static void logUsages(CompileLog log, boolean logRedundantFiles, boolean logUnusedFiles, boolean logFileDetails, boolean logAllDetails) { Map> fragmentTemplateCache = AsmFragmentManager.getFragmentTemplateCache(); ArrayList signatures = new ArrayList<>(fragmentTemplateCache.keySet()); @@ -132,22 +132,54 @@ public class AsmFragmentUsages { } } - if (logDetails) { - log.append("\nDETAILED ASM FRAGMENT USAGES"); + if (logFileDetails) { + log.append("\nDETAILED ASM FILE USAGES"); + // Find all file templates + List fileTemplates = new ArrayList<>(); for (String signature : signatures) { List templates = fragmentTemplateCache.get(signature); for (AsmFragmentTemplate template : templates) { - Integer usage = fragmentTemplateUsage.get(template); - if (usage == null) usage = 0; - log.append(String.format("%8d", usage) + " " + template.getName()); + if (template.isFile()) { + fileTemplates.add(template); + } } } + logTemplatesByUsage(log, fileTemplates); + + } + + if (logAllDetails) { + log.append("\nDETAILED ASM FRAGMENT USAGES"); + List allTemplates = new ArrayList<>(); + for (String signature : signatures) { + List templates = fragmentTemplateCache.get(signature); + for (AsmFragmentTemplate template : templates) { + allTemplates.add(template); + } + } + logTemplatesByUsage(log, allTemplates); } } - + private static void logTemplatesByUsage(CompileLog log, List fileTemplates) { + // Sort by usage + Collections.sort(fileTemplates, (o1, o2) -> { + Integer u1 = fragmentTemplateUsage.get(o1); + Integer u2 = fragmentTemplateUsage.get(o2); + if (u1 == null) u1 = 0; + if (u2 == null) u2 = 0; + return u2 - u1; + } + ); + // Output + for (AsmFragmentTemplate template : fileTemplates) { + Integer usage = fragmentTemplateUsage.get(template); + if (usage == null) usage = 0; + log.append(String.format("%8d", usage) + " " + (template.isFile()?"*":"")+template.getName()); + } + } } diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index a862ada91..d82738961 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -32,7 +32,7 @@ public class TestPrograms { public static void tearDown() throws Exception { CompileLog log = new CompileLog(); log.setSysOut(true); - AsmFragmentUsages.logUsages(log, true, false, false); + AsmFragmentUsages.logUsages(log, true, false, true, false); } @Test