Skip to content

Commit

Permalink
add eval printer
Browse files Browse the repository at this point in the history
  • Loading branch information
kadirayk committed Jun 20, 2022
1 parent c630f9c commit c501f4b
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 0 deletions.
17 changes: 17 additions & 0 deletions soot-infoflow/src/soot/jimple/infoflow/Infoflow.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.concurrent.TimeUnit;

import boomerang.scene.jimple.BoomerangPretransformer;
import boomerang.scene.sparse.SparseCFGCache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -47,6 +48,7 @@
import soot.jimple.infoflow.aliasing.NullAliasStrategy;
import soot.jimple.infoflow.aliasing.PtsBasedAliasStrategy;
import soot.jimple.infoflow.aliasing.sparse.DefaultBoomerangAliasStrategy;
import soot.jimple.infoflow.aliasing.sparse.SparseAliasEval;
import soot.jimple.infoflow.aliasing.sparse.TypeBasedSparseBoomerangAliasStrategy;
import soot.jimple.infoflow.cfg.BiDirICFGFactory;
import soot.jimple.infoflow.codeOptimization.DeadCodeEliminator;
Expand Down Expand Up @@ -748,6 +750,20 @@ else if (logger.isInfoEnabled()) {
logger.info(String.format("Data flow solver took %d seconds. Maximum memory consumption: %d MB",
performanceData.getTotalRuntimeSeconds(), performanceData.getMaxMemoryConsumption()));

SparseCFGCache.SparsificationStrategy sparsificationStrategy=null;
switch(config.getAliasingAlgorithm()){
case Boomerang:
sparsificationStrategy = SparseCFGCache.SparsificationStrategy.NONE;
break;
case TypeBasedSparseBoomerang:
sparsificationStrategy = SparseCFGCache.SparsificationStrategy.TYPE_BASED;
break;
default:
break;
}
SparseAliasEval sparseAliasEval = new SparseAliasEval("SimpleAlias1", sparsificationStrategy);
sparseAliasEval.generate();

// Provide the handler with the final results
for (ResultsAvailableHandler handler : onResultsAvailable)
handler.onResultsAvailable(iCfg, results);
Expand Down Expand Up @@ -968,6 +984,7 @@ private IAliasingStrategy createAliasAnalysis(final ISourceSinkManager sourcesSi
backProblem = null;
backSolver = null;
aliasingStrategy = new DefaultBoomerangAliasStrategy(manager);

break;
case TypeBasedSparseBoomerang:
backProblem = null;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package soot.jimple.infoflow.aliasing.sparse;

import boomerang.scene.sparse.SparseCFGCache;
import boomerang.scene.sparse.eval.PropagationCounter;
import boomerang.scene.sparse.eval.SparseCFGQueryLog;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

/**
* to create evaluation data
* targetProgram, sparse mode, sparseCFG build time, #cache hit, #cache miss, total query time, #total propagation
*/
public class SparseAliasEval {

private static final String OUT_PUT_DIR = "./results";
private static final String FILE = "alias_eval.csv";

private final String targetProgram;
private final SparseCFGCache.SparsificationStrategy sparsificationStrategy;
private long sparseCFGBuildTime=0;
private long cacheHitCount=0;
private long cacheMissCount=0;
private long totalAliasQueryTime=0;
private long totalPropagationCount=0;

public SparseAliasEval(String targetProgram, SparseCFGCache.SparsificationStrategy sparsificationStrategy) {
this.targetProgram = targetProgram;
this.sparsificationStrategy = sparsificationStrategy;
handleSparseCacheData();
handlePropagationData();
handleAliasQueryTime();
}

private void handleSparseCacheData() {
if(sparsificationStrategy!= SparseCFGCache.SparsificationStrategy.NONE){
SparseCFGCache cache = SparseCFGCache.getInstance(sparsificationStrategy);
List<SparseCFGQueryLog> queryLogs = cache.getQueryLogs();

for (SparseCFGQueryLog queryLog : queryLogs) {
sparseCFGBuildTime += queryLog.getDuration();
if (queryLog.isRetrievedFromCache()) {
cacheHitCount++;
} else {
cacheMissCount++;
}
}
}
}

private void handlePropagationData() {
PropagationCounter counter = PropagationCounter.getInstance(sparsificationStrategy);
long fwd = counter.getForwardPropagation();
long bwd = counter.getBackwardPropagation();
totalPropagationCount = fwd + bwd;
}

private void handleAliasQueryTime() {
totalAliasQueryTime = SparseAliasManager.getTotalDuration().toMillis();
}

public void generate() {
File dir = new File(OUT_PUT_DIR);
if (!dir.exists()) {
dir.mkdir();
}
File file = new File(OUT_PUT_DIR + File.separator + FILE);
if(!file.exists()){
try (FileWriter writer = new FileWriter(file)) {
StringBuilder str = new StringBuilder();
str.append("targetProgram");
str.append(",");
str.append("sparsificationStrategy");
str.append(",");
str.append("totalAliasQueryTime");
str.append(",");
str.append("sparseCFGBuildTime");
str.append(",");
str.append("totalPropagationCount");
str.append(",");
str.append("cacheHitCount");
str.append(",");
str.append("cacheMissCount");
str.append(System.lineSeparator());
writer.write(str.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
try (FileWriter writer = new FileWriter(file, true)) {
StringBuilder str = new StringBuilder();
str.append(targetProgram);
str.append(",");
str.append(sparsificationStrategy);
str.append(",");
str.append(totalAliasQueryTime);
str.append(",");
str.append(sparseCFGBuildTime);
str.append(",");
str.append(totalPropagationCount);
str.append(",");
str.append(cacheHitCount);
str.append(",");
str.append(cacheMissCount);
str.append(System.lineSeparator());
writer.write(str.toString());
} catch (IOException e) {
e.printStackTrace();
}
}

}

0 comments on commit c501f4b

Please sign in to comment.