3 import java.util.Iterator;
\r
4 import java.util.Map;
\r
6 import com.ibm.wala.ipa.callgraph.AnalysisCache;
\r
7 import com.ibm.wala.ipa.callgraph.AnalysisOptions;
\r
8 import com.ibm.wala.ipa.callgraph.AnalysisScope;
\r
9 import com.ibm.wala.ipa.callgraph.CGNode;
\r
10 import com.ibm.wala.ipa.callgraph.CallGraph;
\r
11 import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
\r
12 import com.ibm.wala.ipa.callgraph.Entrypoint;
\r
13 import com.ibm.wala.ipa.callgraph.impl.Util;
\r
14 import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
\r
15 import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
\r
16 import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
\r
17 import com.ibm.wala.ipa.cha.ClassHierarchy;
\r
18 import com.ibm.wala.ipa.modref.ModRef;
\r
19 import com.ibm.wala.ipa.slicer.HeapExclusions;
\r
20 import com.ibm.wala.ipa.slicer.PDG;
\r
21 import com.ibm.wala.ipa.slicer.Statement;
\r
22 import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;
\r
23 import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;
\r
24 import com.ibm.wala.util.config.AnalysisScopeReader;
\r
25 import com.ibm.wala.util.intset.OrdinalSet;
\r
26 import com.ibm.wala.util.io.FileProvider;
\r
28 import demo.util.DemoUtil;
\r
29 import demo.util.MemoryInfo;
\r
31 public class ControlDependencePerformance {
\r
33 public static void main(String[] args) {
\r
35 long start = System.currentTimeMillis();
\r
37 String appJar = "bin/demo/testdata";
\r
38 // String appJar = "C:\\Users\\t-hatano\\git\\soba-core\\bin";
\r
39 AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));
\r
41 ClassHierarchy cha = ClassHierarchy.make(scope);
\r
43 Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);
\r
44 AnalysisOptions options = new AnalysisOptions(scope, entrypoints);
\r
46 // build the call graph
\r
47 CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);
\r
48 CallGraph cg = cgb.makeCallGraph(options, null);
\r
49 // PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();
\r
50 PointerAnalysis<InstanceKey> pa = null;
\r
52 for (int i = 0; i < cg.getMaxNumber(); i++) {
\r
53 CGNode node = cg.getNode(i);
\r
54 DataDependenceOptions dOptions = DataDependenceOptions.NONE;
\r
55 ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;
\r
56 ModRef modRef = ModRef.make();
\r
57 HeapExclusions exclusions = null;
\r
58 Map<CGNode, OrdinalSet<PointerKey>> mod = null;
\r
59 Map<CGNode, OrdinalSet<PointerKey>> ref = null;
\r
60 PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);
\r
62 for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {
\r
63 Statement s1 = itr.next();
\r
64 for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {
\r
65 Statement s2 = succs.next();
\r
66 // System.out.println(s1.toString() + " -> " + s2.toString());
\r
71 long end = System.currentTimeMillis();
\r
73 System.out.println((end - start) + " [ms]");
\r
74 System.out.println(MemoryInfo.getMemoryInfo());
\r
75 } catch (Exception e) {
\r
76 e.printStackTrace();
\r