OSDN Git Service

Added programs using WALA/Soot
[soba/JavaAnalysisToolsDemo.git] / JavaAnalysisToolsDemo / src / demo / wala / DataDependencePerformance.java
1 package demo.wala;\r
2 \r
3 import java.util.Iterator;\r
4 import java.util.Map;\r
5 \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.Slicer.ControlDependenceOptions;\r
22 import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
23 import com.ibm.wala.ipa.slicer.Statement;\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
27 \r
28 import demo.util.DemoUtil;\r
29 import demo.util.MemoryInfo;\r
30 \r
31 public class DataDependencePerformance {\r
32 \r
33         public static void main(String[] args) {\r
34                 try {\r
35                         long start = System.currentTimeMillis();\r
36                         \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
40 \r
41                         ClassHierarchy cha = ClassHierarchy.make(scope);\r
42                         \r
43                         Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
44                         AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
45 \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 \r
51                         for (int i = 0; i < cg.getMaxNumber(); i++) {\r
52                                 CGNode node = cg.getNode(i);\r
53                                 DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;\r
54                                 ControlDependenceOptions cOptions = ControlDependenceOptions.NONE;\r
55                                 ModRef modRef = ModRef.make();\r
56                                 HeapExclusions exclusions = null;\r
57                                 Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
58                                 Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
59                                 PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
60                                 \r
61                                 for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
62                                         Statement s1 = itr.next();\r
63                                         for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
64                                                 Statement s2 = succs.next();\r
65 //                                              System.out.println(s1.toString() + " -> " + s2.toString());\r
66                                         }\r
67                                 }\r
68                         }\r
69                         \r
70                         long end = System.currentTimeMillis();\r
71                         \r
72                         System.out.println((end - start) + " [ms]");\r
73                         System.out.println(MemoryInfo.getMemoryInfo());\r
74                 } catch (Exception e) {\r
75                         e.printStackTrace();\r
76                 }\r
77         }\r
78 \r
79 }\r