OSDN Git Service

Modified performance code.
authort-hatano <tnotawa@gmail.com>
Tue, 23 Feb 2016 11:55:48 +0000 (20:55 +0900)
committert-hatano <tnotawa@gmail.com>
Tue, 23 Feb 2016 11:55:48 +0000 (20:55 +0900)
JavaAnalysisToolsDemo/Java60RegressionExclusions.txt
JavaAnalysisToolsDemo/doc/memo.txt [deleted file]
JavaAnalysisToolsDemo/setup.sh [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/soba/ClassHierarchyPerformance.java
JavaAnalysisToolsDemo/src/demo/soba/ControlAndDataDependencePerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/soba/DumpAnalysisClass.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/soot/ClassHierarchyPerformance.java
JavaAnalysisToolsDemo/src/demo/soot/ControlAndDataDependencePerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/wala/ClassHierarchyPerformance.java
JavaAnalysisToolsDemo/src/demo/wala/ControlAndDataDependencePerformance.java

diff --git a/JavaAnalysisToolsDemo/doc/memo.txt b/JavaAnalysisToolsDemo/doc/memo.txt
deleted file mode 100644 (file)
index 40b8327..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Soot:\r
-https://github.com/Sable/soot\r
-\r
-WALA:\r
-https://github.com/wala/WALA\r
-\r
-SOBA:\r
-http://scm.osdn.jp/gitroot/soba/soba-core.git
\ No newline at end of file
diff --git a/JavaAnalysisToolsDemo/setup.sh b/JavaAnalysisToolsDemo/setup.sh
new file mode 100644 (file)
index 0000000..504efa6
--- /dev/null
@@ -0,0 +1,3 @@
+git clone http://scm.osdn.jp/gitroot/soba/soba-core.git\r
+git clone https://github.com/Sable/soot.git\r
+git clone https://github.com/wala/WALA.git
\ No newline at end of file
index a0ef0ed..a9139ae 100644 (file)
@@ -11,13 +11,10 @@ import soba.util.files.ClasspathUtil;
 public class ClassHierarchyPerformance {\r
 \r
        public static void main(String[] args) {\r
-               args = new String[]{"bin/demo/testdata"};\r
-               \r
                long start = System.currentTimeMillis();\r
                \r
                JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
                ClassHierarchy ch = program.getClassHierarchy();\r
-               \r
                for (ClassInfo c: program.getClasses()) {\r
                        for (MethodInfo m: c.getMethods()) {\r
                                for (CallSite cs: m.getCallSites()) {\r
@@ -35,8 +32,8 @@ public class ClassHierarchyPerformance {
                \r
                long end = System.currentTimeMillis();\r
                \r
-               System.out.println((end - start) + " [ms]");\r
-               System.out.println(MemoryInfo.getMemoryInfo());\r
+               System.err.println((end - start) + " [ms]");\r
+               System.err.println(MemoryInfo.getMemoryInfo());\r
        }\r
 \r
 }\r
diff --git a/JavaAnalysisToolsDemo/src/demo/soba/ControlAndDataDependencePerformance.java b/JavaAnalysisToolsDemo/src/demo/soba/ControlAndDataDependencePerformance.java
new file mode 100644 (file)
index 0000000..0f76a8a
--- /dev/null
@@ -0,0 +1,42 @@
+package demo.soba;\r
+\r
+import soba.core.ClassInfo;\r
+import soba.core.JavaProgram;\r
+import soba.core.MethodInfo;\r
+import soba.core.method.DataDependence;\r
+import soba.core.method.DataFlowEdge;\r
+import soba.util.IntPairProc;\r
+import soba.util.files.ClasspathUtil;\r
+import soba.util.graph.DirectedGraph;\r
+import demo.util.MemoryInfo;\r
+\r
+public class ControlAndDataDependencePerformance {\r
+\r
+       public static void main(String[] args) {\r
+               long start = System.currentTimeMillis();\r
+               \r
+               JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
+               for (ClassInfo c: program.getClasses()) {\r
+                       for (MethodInfo m: c.getMethods()) {\r
+                               DataDependence dd = m.getDataDependence();\r
+                               for (DataFlowEdge e: dd.getEdges()) {\r
+//                                     System.out.println(e.getSourceInstruction() + " -> " + e.getDestinationInstruction());\r
+                               }\r
+                               DirectedGraph cd = m.getControlDependence();\r
+                               cd.forEachEdge(new IntPairProc() {\r
+                                       @Override\r
+                                       public boolean execute(int elem1, int elem2) {\r
+//                                             System.out.println(elem1 + " -> " + elem2);\r
+                                               return true;\r
+                                       }\r
+                               });\r
+                       }\r
+               }\r
+               \r
+               long end = System.currentTimeMillis();\r
+               \r
+               System.err.println((end - start) + " [ms]");\r
+               System.err.println(MemoryInfo.getMemoryInfo());\r
+       }\r
+\r
+}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/soba/DumpAnalysisClass.java b/JavaAnalysisToolsDemo/src/demo/soba/DumpAnalysisClass.java
new file mode 100644 (file)
index 0000000..f4103e9
--- /dev/null
@@ -0,0 +1,17 @@
+package demo.soba;\r
+\r
+import soba.core.ClassInfo;\r
+import soba.core.JavaProgram;\r
+import soba.util.files.ClasspathUtil;\r
+\r
+public class DumpAnalysisClass {\r
+\r
+       public static void main(String[] args) {\r
+               JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
+               program.getClasses().stream()\r
+                       .map(ClassInfo::getClassName)\r
+                       .map(className -> className.replaceAll("/", "."))\r
+                       .forEach(System.out::println);\r
+       }\r
+\r
+}\r
index 75ed2e8..dfd02c8 100644 (file)
@@ -1,46 +1,21 @@
 package demo.soot;\r
 \r
-import java.io.File;\r
-import java.util.Arrays;\r
 import java.util.Iterator;\r
-import java.util.List;\r
 import java.util.Map;\r
-import java.util.function.Consumer;\r
 \r
 import soot.MethodOrMethodContext;\r
 import soot.PackManager;\r
 import soot.Scene;\r
 import soot.SceneTransformer;\r
+import soot.SootMethod;\r
 import soot.Transform;\r
 import soot.jimple.toolkits.callgraph.CallGraph;\r
 import soot.jimple.toolkits.callgraph.Edge;\r
-import demo.util.DemoUtil;\r
 import demo.util.MemoryInfo;\r
 \r
 public class ClassHierarchyPerformance {\r
 \r
        public static void main(String[] args) {\r
-//             List<String> argsList = new ArrayList<String>(Arrays.asList(args));\r
-               List<String> argsList = Arrays.asList(new String[]{\r
-                               "-cp",\r
-                               "bin" + File.pathSeparator + \r
-                               "bin/testers" + File.pathSeparator + \r
-                               DemoUtil.RT_PATH + File.pathSeparator +\r
-                               DemoUtil.JCE_PATH,\r
-                               "-whole-program",\r
-                               "-main-class",\r
-                               "testers.CallGraphs",//main-class\r
-//                             "-app",\r
-//                             "testers.CallGraphs",\r
-                               "-p",\r
-                               "cg.cha",\r
-                               "apponly:true,verbose:true",\r
-                               "testers.CallGraphs",//argument classes\r
-                               "testers.A"                     //\r
-               });\r
-\r
-               long start = System.currentTimeMillis();\r
-               \r
                PackManager.v().getPack("wjtp").add(new Transform("wjtp.myTrans", new SceneTransformer() {\r
                        @Override\r
                        protected void internalTransform(String phaseName, Map options) {\r
@@ -49,20 +24,20 @@ public class ClassHierarchyPerformance {
                                        MethodOrMethodContext caller = callers.next();\r
                                        for (Iterator<Edge> edges = cg.edgesOutOf(caller); edges.hasNext();) {\r
                                                Edge edge = edges.next();\r
-//                                             System.out.println(edge.getSrc().method().toString() + " -> " + edge.getTgt().method().toString());\r
+                                               SootMethod srcMethod = edge.getSrc().method();\r
+                                               SootMethod tgtMethod = edge.getTgt().method();\r
+//                                             System.out.println(srcMethod.toString() + " -> " + tgtMethod.toString());\r
                                        }\r
-                               }\r
-                               \r
-                               long end = System.currentTimeMillis();\r
-                               \r
-                               System.out.println((end - start) + " [ms]");\r
-                               System.out.println(MemoryInfo.getMemoryInfo());\r
+                               }               \r
                        }\r
                }));\r
 \r
-               args = argsList.toArray(new String[0]);\r
-\r
+               long start = System.currentTimeMillis();\r
                soot.Main.main(args);\r
+               long end = System.currentTimeMillis();\r
+\r
+               System.err.println((end - start) + " [ms]");\r
+               System.err.println(MemoryInfo.getMemoryInfo());\r
        }\r
 \r
 }\r
diff --git a/JavaAnalysisToolsDemo/src/demo/soot/ControlAndDataDependencePerformance.java b/JavaAnalysisToolsDemo/src/demo/soot/ControlAndDataDependencePerformance.java
new file mode 100644 (file)
index 0000000..40a6699
--- /dev/null
@@ -0,0 +1,46 @@
+package demo.soot;\r
+\r
+import java.util.Map;\r
+\r
+import soot.Body;\r
+import soot.BodyTransformer;\r
+import soot.PackManager;\r
+import soot.PhaseOptions;\r
+import soot.Transform;\r
+import soot.toolkits.graph.ExceptionalUnitGraph;\r
+import soot.toolkits.graph.UnitGraph;\r
+import soot.toolkits.graph.pdg.HashMutablePDG;\r
+import soot.toolkits.graph.pdg.PDGNode;\r
+import soot.toolkits.graph.pdg.ProgramDependenceGraph;\r
+import demo.util.MemoryInfo;\r
+\r
+public class ControlAndDataDependencePerformance {\r
+\r
+       public static void main(String[] args) {\r
+               PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
+                       @Override\r
+                       protected void internalTransform(Body body, String phase, Map options) {\r
+                               try {\r
+                                       UnitGraph graph = new ExceptionalUnitGraph(body);\r
+                                       ProgramDependenceGraph pdg = new HashMutablePDG(graph);\r
+                                       for (PDGNode node1: pdg.getNodes()) {\r
+                                               for (PDGNode node2: pdg.getDependents(node1)) {\r
+//                                                     System.out.println(node1.toShortString() + " -> " + node2.toShortString());\r
+                                               }\r
+                                       }\r
+                               } catch (RuntimeException e) {\r
+                                       System.err.println(body.getMethod());\r
+                               }\r
+                       }\r
+               }));\r
+               PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
+               \r
+               long start = System.currentTimeMillis();\r
+               soot.Main.main(args);\r
+               long end = System.currentTimeMillis();\r
+\r
+               System.err.println((end - start) + " [ms]");\r
+               System.err.println(MemoryInfo.getMemoryInfo());\r
+       }\r
+\r
+}\r
index 357bae7..1e4cbc4 100644 (file)
@@ -2,12 +2,10 @@ package demo.wala;
 \r
 import java.util.Iterator;\r
 \r
-import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
-import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
 import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
 import com.ibm.wala.ipa.callgraph.CGNode;\r
-import com.ibm.wala.ipa.callgraph.CallGraph;\r
 import com.ibm.wala.ipa.callgraph.Entrypoint;\r
+import com.ibm.wala.ipa.callgraph.cha.CHACallGraph;\r
 import com.ibm.wala.ipa.callgraph.impl.Util;\r
 import com.ibm.wala.ipa.cha.ClassHierarchy;\r
 import com.ibm.wala.util.config.AnalysisScopeReader;\r
@@ -22,15 +20,11 @@ public class ClassHierarchyPerformance {
                try {\r
                        long start = System.currentTimeMillis();\r
                        \r
-                       String appJar = "bin/demo/testdata";\r
-                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
-\r
+                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
                        ClassHierarchy cha = ClassHierarchy.make(scope);\r
-\r
-                       Iterable<Entrypoint> entrypoints = com.ibm.wala.ipa.callgraph.impl.Util.makeMainEntrypoints(scope, cha);\r
-                       AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
-                       com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
-                       CallGraph cg = builder.makeCallGraph(options, null);\r
+                       Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+                       CHACallGraph cg = new CHACallGraph(cha);\r
+                       cg.init(entrypoints);\r
 \r
                        for (int i = 0; i < cg.getMaxNumber(); i++) {\r
                                CGNode caller = cg.getNode(i);\r
@@ -42,8 +36,8 @@ public class ClassHierarchyPerformance {
                        \r
                        long end = System.currentTimeMillis();\r
                        \r
-                       System.out.println((end - start) + " [ms]");\r
-                       System.out.println(MemoryInfo.getMemoryInfo());\r
+                       System.err.println((end - start) + " [ms]");\r
+                       System.err.println(MemoryInfo.getMemoryInfo());\r
                } catch (Exception e) {\r
                        e.printStackTrace();\r
                }\r
index 435a972..1cbe9d1 100644 (file)
@@ -18,31 +18,30 @@ import com.ibm.wala.ipa.cha.ClassHierarchy;
 import com.ibm.wala.ipa.modref.ModRef;\r
 import com.ibm.wala.ipa.slicer.HeapExclusions;\r
 import com.ibm.wala.ipa.slicer.PDG;\r
-import com.ibm.wala.ipa.slicer.Statement;\r
 import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
 import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Statement;\r
 import com.ibm.wala.util.config.AnalysisScopeReader;\r
 import com.ibm.wala.util.intset.OrdinalSet;\r
 import com.ibm.wala.util.io.FileProvider;\r
 \r
 import demo.util.DemoUtil;\r
+import demo.util.MemoryInfo;\r
 \r
 public class ControlAndDataDependencePerformance {\r
 \r
        public static void main(String[] args) {\r
                try {\r
-                       String appJar = "bin/demo/testdata";\r
-                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
-\r
-                       ClassHierarchy cha = ClassHierarchy.make(scope);\r
+                       long start = System.currentTimeMillis();\r
                        \r
+                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+                       ClassHierarchy cha = ClassHierarchy.make(scope);\r
                        Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+                       AnalysisCache cache = new AnalysisCache();\r
                        AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
-\r
-                       // build the call graph\r
-                       CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
-                       CallGraph cg = cgb.makeCallGraph(options, null);\r
-                       PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
+                       CallGraphBuilder builder = Util.makeZeroCFABuilder(options, cache, cha, scope);\r
+                       CallGraph cg = builder.makeCallGraph(options, null);\r
+                       PointerAnalysis<InstanceKey> pa = null;\r
 \r
                        for (int i = 0; i < cg.getMaxNumber(); i++) {\r
                                CGNode node = cg.getNode(i);\r
@@ -53,15 +52,19 @@ public class ControlAndDataDependencePerformance {
                                Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
                                Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
                                PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
-                               \r
-                               for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
-                                       Statement s1 = itr.next();\r
+                               for (Iterator<Statement> statements = pdg.iterator(); statements.hasNext();) {\r
+                                       Statement s1 = statements.next();\r
                                        for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
                                                Statement s2 = succs.next();\r
 //                                             System.out.println(s1.toString() + " -> " + s2.toString());\r
                                        }\r
                                }\r
                        }\r
+                       \r
+                       long end = System.currentTimeMillis();\r
+                       \r
+                       System.err.println((end - start) + " [ms]");\r
+                       System.err.println(MemoryInfo.getMemoryInfo());\r
                } catch (Exception e) {\r
                        e.printStackTrace();\r
                }\r