memoizeit

Changes

pom.xml 7(+3 -4)

src/main/java/br/ufrgs/inf/prosoft/memoizeit/cache/Cache.java 20(+0 -20)

src/main/java/br/ufrgs/inf/prosoft/memoizeit/cache/CachingPerformance.java 64(+0 -64)

src/main/java/br/ufrgs/inf/prosoft/memoizeit/cache/MultiCache.java 58(+0 -58)

src/main/java/br/ufrgs/inf/prosoft/memoizeit/cache/SingleCache.java 55(+0 -55)

Details

pom.xml 7(+3 -4)

diff --git a/pom.xml b/pom.xml
index 49d20a0..332e50f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,11 +17,10 @@
             <artifactId>Trace</artifactId>
             <version>1.0</version>
         </dependency>
-        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
         <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.8.5</version>
+            <groupId>br.ufrgs.inf.prosoft.cache</groupId>
+            <artifactId>Cache</artifactId>
+            <version>1.0</version>
         </dependency>
     </dependencies>
     <build>
diff --git a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
index 2d32a79..fc4091c 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
@@ -19,7 +19,7 @@ import java.util.logging.Logger;
  */
 public class Main {
 
-    private static final Logger logger = Logger.getLogger(Main.class.getName());
+    private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
 
     public static void main(String[] args) {
         System.setProperty("java.util.logging.SimpleFormatter.format", "[%1$tF %1$tT+%1$tL] [%4$-7s] [MemoizeIt] %5$s %n");
@@ -33,11 +33,11 @@ public class Main {
             tracePath = args[0];
             callGraphPath = args[1];
         }
-        logger.log(Level.INFO, "Reading callgraph");
+        LOGGER.log(Level.INFO, "Reading callgraph");
         Graph<String> graph = CallGraphReader.parseFile(callGraphPath);
-        logger.log(Level.INFO, "Reading traces");
+        LOGGER.log(Level.INFO, "Reading traces");
         List<Trace> traces = TraceReader.partiallyParseFile(tracePath);
-        logger.log(Level.INFO, "Grouping methods");
+        LOGGER.log(Level.INFO, "Grouping methods");
         List<Method> methods = TraceReader.groupByMethods(traces);
         MemoizeIt memoizeIt = new MemoizeIt();
         memoizeIt.setCallGraph(graph);
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/MemoizeIt.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/MemoizeIt.java
index 5494b56..02fa5ae 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/MemoizeIt.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/MemoizeIt.java
@@ -5,7 +5,7 @@
  */
 package br.ufrgs.inf.prosoft.memoizeit;
 
-import br.ufrgs.inf.prosoft.memoizeit.cache.CachingPerformance;
+import br.ufrgs.inf.prosoft.cache.CachePerformance;
 import br.ufrgs.inf.prosoft.memoizeit.graph.Graph;
 import br.ufrgs.inf.prosoft.memoizeit.graph.Node;
 import java.util.ArrayList;
@@ -92,8 +92,7 @@ public class MemoizeIt {
         int i = 0;
         while (i < this.methods.size()) {
             Method method = this.methods.get(i);
-            double totalExecutionTime = method.getTotalExecutionTime();
-            double averageExecutionTime = totalExecutionTime / method.getOccurrencesSize();
+            double averageExecutionTime = method.getAverageExecutionTime();
             if (method.getOccurrencesSize() < this.minimumMethodCalls || averageExecutionTime < this.minimumExecutionTime) {
                 this.methods.remove(method);
                 continue;
@@ -299,32 +298,32 @@ public class MemoizeIt {
     }
 
     private void suggestImplementation(Method method) {
-        Map<String, CachingPerformance> cachingStrategyHasPerformance = method.simulateCachingStrategies();
-        CachingPerformance globalMultiCachePerformance = cachingStrategyHasPerformance.get("globalMultiCache");
-        CachingPerformance globalSingleCachePerformance = cachingStrategyHasPerformance.get("globalSingleCache");
-        CachingPerformance instanceMultiCachePerformance = cachingStrategyHasPerformance.get("instanceMultiCache");
-        CachingPerformance instanceSingleCachePerformance = cachingStrategyHasPerformance.get("instanceSingleCache");
+        Map<String, CachePerformance> cachingStrategyHasPerformance = method.simulateCachingStrategies();
+        CachePerformance globalMultiCachePerformance = cachingStrategyHasPerformance.get("globalMultiCache");
+        CachePerformance globalSingleCachePerformance = cachingStrategyHasPerformance.get("globalSingleCache");
+        CachePerformance instanceMultiCachePerformance = cachingStrategyHasPerformance.get("instanceMultiCache");
+        CachePerformance instanceSingleCachePerformance = cachingStrategyHasPerformance.get("instanceSingleCache");
         StringBuilder stringBuilder = new StringBuilder();
         stringBuilder.append("GS: ");
-        stringBuilder.append("R").append(globalSingleCachePerformance.getHitRatio());
+        stringBuilder.append("R").append(globalSingleCachePerformance.getRoundedHitRatio());
         stringBuilder.append(" * ").append(globalSingleCachePerformance);
         stringBuilder.append(" | IS: ");
-        stringBuilder.append("R").append(instanceSingleCachePerformance.getHitRatio());
+        stringBuilder.append("R").append(instanceSingleCachePerformance.getRoundedHitRatio());
         stringBuilder.append(" * ").append(instanceSingleCachePerformance);
         stringBuilder.append(" | GM: ");
-        stringBuilder.append("R").append(globalMultiCachePerformance.getHitRatio());
+        stringBuilder.append("R").append(globalMultiCachePerformance.getRoundedHitRatio());
         stringBuilder.append(" * ").append(globalMultiCachePerformance);
         stringBuilder.append(" | IM: ");
-        stringBuilder.append("R").append(instanceMultiCachePerformance.getHitRatio());
+        stringBuilder.append("R").append(instanceMultiCachePerformance.getRoundedHitRatio());
         stringBuilder.append(" * ").append(instanceMultiCachePerformance);
         System.out.println(stringBuilder);
-        if (globalSingleCachePerformance.getHitRatio() >= 50) {
+        if (globalSingleCachePerformance.getRoundedHitRatio() >= 50) {
             System.out.println("single, global");
-        } else if (instanceSingleCachePerformance.getHitRatio() >= 50) {
+        } else if (instanceSingleCachePerformance.getRoundedHitRatio() >= 50) {
             System.out.println("single, instance");
-        } else if (globalMultiCachePerformance.getHitRatio() >= 50) {
+        } else if (globalMultiCachePerformance.getRoundedHitRatio() >= 50) {
             System.out.println("multi, global");
-        } else if (instanceMultiCachePerformance.getHitRatio() >= 50) {
+        } else if (instanceMultiCachePerformance.getRoundedHitRatio() >= 50) {
             System.out.println("multi, instance");
         } else {
             System.out.println("none");
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Method.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Method.java
index 1f9dba9..5f406b7 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Method.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Method.java
@@ -5,9 +5,9 @@
  */
 package br.ufrgs.inf.prosoft.memoizeit;
 
-import br.ufrgs.inf.prosoft.memoizeit.cache.CachingPerformance;
-import br.ufrgs.inf.prosoft.memoizeit.cache.MultiCache;
-import br.ufrgs.inf.prosoft.memoizeit.cache.SingleCache;
+import br.ufrgs.inf.prosoft.cache.CachePerformance;
+import br.ufrgs.inf.prosoft.cache.MultiCache;
+import br.ufrgs.inf.prosoft.cache.SingleCache;
 import br.ufrgs.inf.prosoft.memoizeit.graph.Node;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -86,10 +86,13 @@ public class Method {
 
             @Override
             public void accept(Occurrence occurrence) {
-                System.out.print(".");
-                System.out.flush();
-                if (++i % 100 == 0) {
-                    System.out.println();
+                String verbose = System.getenv("TRACER_VERBOSE");
+                if (verbose != null && verbose.equals("true")) {
+                    System.out.print(".");
+                    System.out.flush();
+                    if (++i % 100 == 0) {
+                        System.out.println();
+                    }
                 }
                 if (depth < Integer.MAX_VALUE) {
                     OccurrenceConcrete thisOccurrence = occurrence.getConcrete();
@@ -116,12 +119,12 @@ public class Method {
     }
 
     protected boolean isChangeful() {
-        for (Map.Entry<String, List<Occurrence>> entry : this.groupByParameter.entrySet()) {
-            if (entry.getValue().size() == 1) {
+        for (List<Occurrence> occurrences : this.groupByParameter.values()) {
+            if (occurrences.size() == 1) {
                 continue;
             }
-            Occurrence firstOccurrence = entry.getValue().get(0);
-            if (entry.getValue().stream()
+            Occurrence firstOccurrence = occurrences.get(0);
+            if (occurrences.stream()
                     .anyMatch(occurrence -> occurrence.getReturnValue() != null
                     && !occurrence.getReturnValue().equals(firstOccurrence.getReturnValue()))) {
                 return true;
@@ -148,9 +151,12 @@ public class Method {
 
                     @Override
                     public void accept(Occurrence occurrence) {
-                        System.out.print(".");
-                        if (i++ % 100 == 0) {
-                            System.out.println();
+                        String verbose = System.getenv("TRACER_VERBOSE");
+                        if (verbose != null && verbose.equals("true")) {
+                            System.out.print(".");
+                            if (i++ % 100 == 0) {
+                                System.out.println();
+                            }
                         }
                         occurrence.removeUnusedFields(methodNode);
                     }
@@ -158,12 +164,12 @@ public class Method {
         System.out.println();
     }
 
-    protected Map<String, CachingPerformance> simulateCachingStrategies() {
-        Map<String, CachingPerformance> cachingStrategyHasPerformance = new HashMap<>();
-        CachingPerformance globalMultiCachePerformance = new CachingPerformance();
-        CachingPerformance globalSingleCachePerformance = new CachingPerformance();
-        CachingPerformance instanceMultiCachePerformance = new CachingPerformance();
-        CachingPerformance instanceSingleCachePerformance = new CachingPerformance();
+    protected Map<String, CachePerformance> simulateCachingStrategies() {
+        Map<String, CachePerformance> cachingStrategyHasPerformance = new HashMap<>();
+        CachePerformance globalMultiCachePerformance = new CachePerformance();
+        CachePerformance globalSingleCachePerformance = new CachePerformance();
+        CachePerformance instanceMultiCachePerformance = new CachePerformance();
+        CachePerformance instanceSingleCachePerformance = new CachePerformance();
         cachingStrategyHasPerformance.put("globalMultiCache", globalMultiCachePerformance);
         cachingStrategyHasPerformance.put("globalSingleCache", globalSingleCachePerformance);
         cachingStrategyHasPerformance.put("instanceMultiCache", instanceMultiCachePerformance);
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Occurrence.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Occurrence.java
index 27fd05f..4ad3877 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Occurrence.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Occurrence.java
@@ -5,7 +5,7 @@
  */
 package br.ufrgs.inf.prosoft.memoizeit;
 
-import br.ufrgs.inf.prosoft.memoizeit.cache.Cache;
+import br.ufrgs.inf.prosoft.cache.Cache;
 import br.ufrgs.inf.prosoft.memoizeit.graph.Node;
 import java.util.List;
 
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/utils/ObjectUtils.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/utils/ObjectUtils.java
index c2493ff..a7e585b 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/utils/ObjectUtils.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/utils/ObjectUtils.java
@@ -46,19 +46,17 @@ public class ObjectUtils {
 
     public static List<Object> deepCopy(List<Object> object) {
         List<Object> collection = new ArrayList<>();
-        object.forEach((item) -> {
+        object.forEach(item -> {
             collection.add(deepCopy(item));
         });
         return collection;
     }
 
     public static Object deepCopy(Object object) {
-        try {
-            try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) {
-                objectOutputStream.writeObject(object);
-                try (ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) {
-                    return objectInputStream.readObject();
-                }
+        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) {
+            objectOutputStream.writeObject(object);
+            try (ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) {
+                return objectInputStream.readObject();
             }
         } catch (IOException | ClassNotFoundException ex) {
             System.err.println("[MemoizeIt] clone exception: " + ex);