All Downloads are FREE. Search and download functionalities are using the official Maven repository.

qilin.stat.PTAEvaluator Maven / Gradle / Ivy

/* Qilin - a Java Pointer Analysis Framework
 * Copyright (C) 2021-2030 Qilin developers
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3.0 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 *
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 */

package qilin.stat;

import qilin.CoreConfig;
import qilin.core.PTA;

/**
 * Gather stats on the performance and precision of a PTA run.
 *
 * 

Each new run of the PTA will over-write stats * *

- Wall time (sec) - Memory (max, current) before and after - Reachable methods (context and * no-context) - Total reachable casts - Reachable casts that may fail - Call graph edges - Context * sensitive call graph edges - Total reachable virtual call sites - Polymorphic virtual call sites * (sites with >1 target methods) - Number of pointers (local and global) - Total points to sets * size (local and global) context insensitive (convert to alloc site) */ public class PTAEvaluator implements IEvaluator { protected final RuntimeStat runtimeStat; protected final Exporter exporter; protected final PTA pta; public PTAEvaluator(PTA pta) { this.pta = pta; runtimeStat = new RuntimeStat(); exporter = new Exporter(pta); } /** Note the start of a qilin.pta run. */ @Override public void begin() { Runtime runtime = Runtime.getRuntime(); // Getting the runtime reference // from system exporter.addLine(" ====== Memory Usage ======"); exporter.collectMetric( "Used Memory Before:", (runtime.totalMemory() - runtime.freeMemory()) / GB + " GB"); // Print // used memory exporter.collectMetric( "Free Memory Before:", runtime.freeMemory() / GB + " GB"); // Print free memory exporter.collectMetric( "Total Memory Before:", runtime.totalMemory() / GB + " GB"); // Print total available memory exporter.collectMetric( "Max Memory Before:", runtime.maxMemory() / GB + " GB"); // Print Maximum available memory exporter.collectMetric("Analysis: ", CoreConfig.v().getPtaConfig().ptaName); runtimeStat.begin(); } /** Note the end of a qilin.pta run. */ @Override public void end() { // done with processing runtimeStat.end(); /** all method reachable from the harness main */ PAGStat pagStat = new PAGStat(pta); BenchmarkStat benchmarkStat = new BenchmarkStat(pta); CallGraphStat callGraphStat = new CallGraphStat(pta); TypeClientStat typeClientStat = new TypeClientStat(pta); PointsToStat ptsStat = new PointsToStat(pta); AliasStat aliasStat = new AliasStat(pta); YummyStat yummyStat = new YummyStat(pta); runtimeStat.export(exporter); // memory stats Runtime runtime = Runtime.getRuntime(); // Getting the runtime reference // from system exporter.collectMetric( "Used Memory After:", (runtime.totalMemory() - runtime.freeMemory()) / GB + " GB"); // Print // used memory exporter.collectMetric( "Free Memory After:", runtime.freeMemory() / GB + " GB"); // Print free memory exporter.collectMetric( "Total Memory After:", runtime.totalMemory() / GB + " GB"); // Print total available memory exporter.collectMetric( "Max Memory After:", runtime.maxMemory() / GB + " GB"); // Print Maximum available memory exporter.addLine(" ====== Yummy ======"); yummyStat.export(exporter); exporter.addLine(" ====== Call Graph ======"); callGraphStat.export(exporter); exporter.addLine(" ====== Statements ======"); typeClientStat.export(exporter); exporter.addLine(" ====== Nodes ======"); ptsStat.export(exporter); exporter.addLine(" ====== Assignments ======"); pagStat.export(exporter); exporter.addLine(" ====== Aliases ======"); aliasStat.export(exporter); exporter.addLine(" ====== Classes ======"); benchmarkStat.export(exporter); } @Override public String toString() { return exporter.report(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy