From: t-hatano Date: Sat, 12 Mar 2016 10:11:53 +0000 (+0900) Subject: Revised performance code. X-Git-Url: http://git.osdn.net/view?p=soba%2FJavaAnalysisToolsDemo.git;a=commitdiff_plain;h=bc535d52f31480b13898e8ffff16be9afd0080d1 Revised performance code. --- diff --git a/JavaAnalysisToolsDemo/Java60RegressionExclusions.txt b/JavaAnalysisToolsDemo/Java60RegressionExclusions.txt index 1276e08..95dd763 100644 --- a/JavaAnalysisToolsDemo/Java60RegressionExclusions.txt +++ b/JavaAnalysisToolsDemo/Java60RegressionExclusions.txt @@ -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 index 0000000..e4a1d6c --- /dev/null +++ b/JavaAnalysisToolsDemo/src/demo/soba/CallGraphPerformance.java @@ -0,0 +1,28 @@ +package demo.soba; + +import soba.core.JavaProgram; +import soba.core.MethodInfo; +import soba.util.callgraph.CallGraph; +import soba.util.files.ClasspathUtil; +import demo.util.MemoryInfo; + +public class CallGraphPerformance { + + public static void main(String[] args) { + long start = System.currentTimeMillis(); + + JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args)); + CallGraph cg = new CallGraph(program); + for (MethodInfo caller: cg.getMethods()) { + for (MethodInfo callee: cg.getCallees(caller)) { +// System.out.println(caller.toLongString() + " may call " + callee.toLongString()); + } + } + + long end = System.currentTimeMillis(); + + System.err.println((end - start) + " [ms]"); + System.err.println(MemoryInfo.getMemoryInfo()); + } + +} diff --git a/JavaAnalysisToolsDemo/src/demo/soba/ClassHierarchyPerformance.java b/JavaAnalysisToolsDemo/src/demo/soba/ClassHierarchyPerformance.java index a9139ae..689de9e 100644 --- a/JavaAnalysisToolsDemo/src/demo/soba/ClassHierarchyPerformance.java +++ b/JavaAnalysisToolsDemo/src/demo/soba/ClassHierarchyPerformance.java @@ -21,7 +21,7 @@ public class ClassHierarchyPerformance { MethodInfo[] callees = ch.resolveCall(cs); if (callees.length > 0) { for (MethodInfo callee: callees) { -// System.out.println(m.toString() + " may call " + callee.toString()); +// System.out.println(m.toLongString() + " may call " + callee.toLongString()); } } else { // System.out.println(m.toString() + " may call " + cs.toString()); diff --git a/JavaAnalysisToolsDemo/src/demo/soba/ControlAndDataDependencePerformance.java b/JavaAnalysisToolsDemo/src/demo/soba/ControlAndDataDependencePerformance.java index 0f76a8a..23f7462 100644 --- a/JavaAnalysisToolsDemo/src/demo/soba/ControlAndDataDependencePerformance.java +++ b/JavaAnalysisToolsDemo/src/demo/soba/ControlAndDataDependencePerformance.java @@ -5,7 +5,6 @@ import soba.core.JavaProgram; import soba.core.MethodInfo; import soba.core.method.DataDependence; import soba.core.method.DataFlowEdge; -import soba.util.IntPairProc; import soba.util.files.ClasspathUtil; import soba.util.graph.DirectedGraph; import demo.util.MemoryInfo; @@ -20,16 +19,14 @@ public class ControlAndDataDependencePerformance { for (MethodInfo m: c.getMethods()) { DataDependence dd = m.getDataDependence(); for (DataFlowEdge e: dd.getEdges()) { -// System.out.println(e.getSourceInstruction() + " -> " + e.getDestinationInstruction()); +// System.out.println(e.toString()); } DirectedGraph cd = m.getControlDependence(); - cd.forEachEdge(new IntPairProc() { - @Override - public boolean execute(int elem1, int elem2) { -// System.out.println(elem1 + " -> " + elem2); - return true; + for (int src = 0; src < cd.getVertexCount(); src++) { + for (int dst: cd.getEdges(src)) { +// System.out.println(src + " -> " + dst); } - }); + } } } diff --git a/JavaAnalysisToolsDemo/src/demo/wala/ClassHierarchyPerformance.java b/JavaAnalysisToolsDemo/src/demo/wala/ClassHierarchyPerformance.java index 1e4cbc4..4eb9132 100644 --- a/JavaAnalysisToolsDemo/src/demo/wala/ClassHierarchyPerformance.java +++ b/JavaAnalysisToolsDemo/src/demo/wala/ClassHierarchyPerformance.java @@ -2,10 +2,14 @@ package demo.wala; import java.util.Iterator; +import com.ibm.wala.classLoader.IMethod; +import com.ibm.wala.ipa.callgraph.AnalysisCache; +import com.ibm.wala.ipa.callgraph.AnalysisOptions; import com.ibm.wala.ipa.callgraph.AnalysisScope; import com.ibm.wala.ipa.callgraph.CGNode; +import com.ibm.wala.ipa.callgraph.CallGraph; +import com.ibm.wala.ipa.callgraph.CallGraphBuilder; import com.ibm.wala.ipa.callgraph.Entrypoint; -import com.ibm.wala.ipa.callgraph.cha.CHACallGraph; import com.ibm.wala.ipa.callgraph.impl.Util; import com.ibm.wala.ipa.cha.ClassHierarchy; import com.ibm.wala.util.config.AnalysisScopeReader; @@ -23,17 +27,18 @@ public class ClassHierarchyPerformance { AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS)); ClassHierarchy cha = ClassHierarchy.make(scope); Iterable entrypoints = Util.makeMainEntrypoints(scope, cha); - CHACallGraph cg = new CHACallGraph(cha); - cg.init(entrypoints); - - for (int i = 0; i < cg.getMaxNumber(); i++) { - CGNode caller = cg.getNode(i); + AnalysisOptions options = new AnalysisOptions(scope, entrypoints); + CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope); + CallGraph cg = builder.makeCallGraph(options, null); + for (Iterator itr = cg.iterator(); itr.hasNext();) { + CGNode caller = itr.next(); for (Iterator callees = cg.getSuccNodes(caller); callees.hasNext();) { CGNode callee = callees.next(); -// System.out.println(caller.getMethod().toString() + " -> " + callee.getMethod().toString()); + IMethod callerMethod = caller.getMethod(); + IMethod calleeMethod = callee.getMethod(); +// System.out.println(callerMethod.toString() + " -> " + calleeMethod.toString()); } } - long end = System.currentTimeMillis(); System.err.println((end - start) + " [ms]");