OSDN Git Service

Revised performance code.
authort-hatano <tnotawa@gmail.com>
Sat, 12 Mar 2016 10:11:53 +0000 (19:11 +0900)
committert-hatano <tnotawa@gmail.com>
Sat, 12 Mar 2016 10:11:53 +0000 (19:11 +0900)
JavaAnalysisToolsDemo/Java60RegressionExclusions.txt
JavaAnalysisToolsDemo/src/demo/soba/CallGraphPerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/soba/ClassHierarchyPerformance.java
JavaAnalysisToolsDemo/src/demo/soba/ControlAndDataDependencePerformance.java
JavaAnalysisToolsDemo/src/demo/wala/ClassHierarchyPerformance.java

index 1276e08..95dd763 100644 (file)
@@ -18,3 +18,5 @@ org\/omg\/.*
 org\/w3c\/.*
 java\/text\/.*
 java\/util\/.*
+java\/io\/.*
+java\/lang\/(?!Object).*
diff --git a/JavaAnalysisToolsDemo/src/demo/soba/CallGraphPerformance.java b/JavaAnalysisToolsDemo/src/demo/soba/CallGraphPerformance.java
new file mode 100644 (file)
index 0000000..e4a1d6c
--- /dev/null
@@ -0,0 +1,28 @@
+package demo.soba;\r
+\r
+import soba.core.JavaProgram;\r
+import soba.core.MethodInfo;\r
+import soba.util.callgraph.CallGraph;\r
+import soba.util.files.ClasspathUtil;\r
+import demo.util.MemoryInfo;\r
+\r
+public class CallGraphPerformance {\r
+\r
+       public static void main(String[] args) {\r
+               long start = System.currentTimeMillis();\r
+               \r
+               JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
+               CallGraph cg = new CallGraph(program);\r
+               for (MethodInfo caller: cg.getMethods()) {\r
+                       for (MethodInfo callee: cg.getCallees(caller)) {\r
+//                             System.out.println(caller.toLongString() + " may call " + callee.toLongString());\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
index a9139ae..689de9e 100644 (file)
@@ -21,7 +21,7 @@ public class ClassHierarchyPerformance {
                                        MethodInfo[] callees = ch.resolveCall(cs);\r
                                        if (callees.length > 0) {\r
                                                for (MethodInfo callee: callees) {\r
-//                                                     System.out.println(m.toString() + " may call " + callee.toString());\r
+//                                                     System.out.println(m.toLongString() + " may call " + callee.toLongString());\r
                                                }\r
                                        } else {\r
 //                                             System.out.println(m.toString() + " may call " + cs.toString());\r
index 0f76a8a..23f7462 100644 (file)
@@ -5,7 +5,6 @@ import soba.core.JavaProgram;
 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
@@ -20,16 +19,14 @@ public class ControlAndDataDependencePerformance {
                        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
+//                                     System.out.println(e.toString());\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
+                               for (int src = 0; src < cd.getVertexCount(); src++) {\r
+                                       for (int dst: cd.getEdges(src)) {\r
+//                                             System.out.println(src + " -> " + dst);\r
                                        }\r
-                               });\r
+                               }\r
                        }\r
                }\r
                \r
index 1e4cbc4..4eb9132 100644 (file)
@@ -2,10 +2,14 @@ package demo.wala;
 \r
 import java.util.Iterator;\r
 \r
+import com.ibm.wala.classLoader.IMethod;\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.CallGraphBuilder;\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
@@ -23,17 +27,18 @@ public class ClassHierarchyPerformance {
                        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
-                       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
+                       AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+                       CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
+                       CallGraph cg = builder.makeCallGraph(options, null);\r
+                       for (Iterator<CGNode> itr = cg.iterator(); itr.hasNext();) {\r
+                               CGNode caller = itr.next();\r
                                for (Iterator<CGNode> callees = cg.getSuccNodes(caller); callees.hasNext();) {\r
                                        CGNode callee = callees.next();\r
-//                                     System.out.println(caller.getMethod().toString() + " -> " + callee.getMethod().toString());\r
+                                       IMethod callerMethod = caller.getMethod();\r
+                                       IMethod calleeMethod = callee.getMethod();\r
+//                                     System.out.println(callerMethod.toString() + " -> " + calleeMethod.toString());\r
                                }\r
                        }\r
-                       \r
                        long end = System.currentTimeMillis();\r
                        \r
                        System.err.println((end - start) + " [ms]");\r