Files
ifogsim/src/org/fog/utils/TimeKeeper.java
2021-04-06 00:45:28 +02:00

154 lines
4.3 KiB
Java

package org.fog.utils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.cloudbus.cloudsim.core.CloudSim;
import org.fog.entities.Tuple;
public class TimeKeeper {
private static TimeKeeper instance;
private long simulationStartTime;
private int count;
private Map<Integer, Double> emitTimes;
private Map<Integer, Double> endTimes;
private Map<Integer, List<Integer>> loopIdToTupleIds;
private Map<Integer, Double> tupleIdToCpuStartTime;
private Map<String, Double> tupleTypeToAverageCpuTime;
private Map<String, Integer> tupleTypeToExecutedTupleCount;
private Map<Integer, Double> loopIdToCurrentAverage;
private Map<Integer, Integer> loopIdToCurrentNum;
public static TimeKeeper getInstance(){
if(instance == null)
instance = new TimeKeeper();
return instance;
}
public int getUniqueId(){
return count++;
}
public void tupleStartedExecution(Tuple tuple){
tupleIdToCpuStartTime.put(tuple.getCloudletId(), CloudSim.clock());
}
public void tupleEndedExecution(Tuple tuple){
if(!tupleIdToCpuStartTime.containsKey(tuple.getCloudletId()))
return;
double executionTime = CloudSim.clock() - tupleIdToCpuStartTime.get(tuple.getCloudletId());
if(!tupleTypeToAverageCpuTime.containsKey(tuple.getTupleType())){
tupleTypeToAverageCpuTime.put(tuple.getTupleType(), executionTime);
tupleTypeToExecutedTupleCount.put(tuple.getTupleType(), 1);
} else{
double currentAverage = tupleTypeToAverageCpuTime.get(tuple.getTupleType());
int currentCount = tupleTypeToExecutedTupleCount.get(tuple.getTupleType());
tupleTypeToAverageCpuTime.put(tuple.getTupleType(), (currentAverage*currentCount+executionTime)/(currentCount+1));
}
}
public Map<Integer, List<Integer>> loopIdToTupleIds(){
return getInstance().getLoopIdToTupleIds();
}
private TimeKeeper(){
count = 1;
setEmitTimes(new HashMap<Integer, Double>());
setEndTimes(new HashMap<Integer, Double>());
setLoopIdToTupleIds(new HashMap<Integer, List<Integer>>());
setTupleTypeToAverageCpuTime(new HashMap<String, Double>());
setTupleTypeToExecutedTupleCount(new HashMap<String, Integer>());
setTupleIdToCpuStartTime(new HashMap<Integer, Double>());
setLoopIdToCurrentAverage(new HashMap<Integer, Double>());
setLoopIdToCurrentNum(new HashMap<Integer, Integer>());
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public Map<Integer, Double> getEmitTimes() {
return emitTimes;
}
public void setEmitTimes(Map<Integer, Double> emitTimes) {
this.emitTimes = emitTimes;
}
public Map<Integer, Double> getEndTimes() {
return endTimes;
}
public void setEndTimes(Map<Integer, Double> endTimes) {
this.endTimes = endTimes;
}
public Map<Integer, List<Integer>> getLoopIdToTupleIds() {
return loopIdToTupleIds;
}
public void setLoopIdToTupleIds(Map<Integer, List<Integer>> loopIdToTupleIds) {
this.loopIdToTupleIds = loopIdToTupleIds;
}
public Map<String, Double> getTupleTypeToAverageCpuTime() {
return tupleTypeToAverageCpuTime;
}
public void setTupleTypeToAverageCpuTime(
Map<String, Double> tupleTypeToAverageCpuTime) {
this.tupleTypeToAverageCpuTime = tupleTypeToAverageCpuTime;
}
public Map<String, Integer> getTupleTypeToExecutedTupleCount() {
return tupleTypeToExecutedTupleCount;
}
public void setTupleTypeToExecutedTupleCount(
Map<String, Integer> tupleTypeToExecutedTupleCount) {
this.tupleTypeToExecutedTupleCount = tupleTypeToExecutedTupleCount;
}
public Map<Integer, Double> getTupleIdToCpuStartTime() {
return tupleIdToCpuStartTime;
}
public void setTupleIdToCpuStartTime(Map<Integer, Double> tupleIdToCpuStartTime) {
this.tupleIdToCpuStartTime = tupleIdToCpuStartTime;
}
public long getSimulationStartTime() {
return simulationStartTime;
}
public void setSimulationStartTime(long simulationStartTime) {
this.simulationStartTime = simulationStartTime;
}
public Map<Integer, Double> getLoopIdToCurrentAverage() {
return loopIdToCurrentAverage;
}
public void setLoopIdToCurrentAverage(Map<Integer, Double> loopIdToCurrentAverage) {
this.loopIdToCurrentAverage = loopIdToCurrentAverage;
}
public Map<Integer, Integer> getLoopIdToCurrentNum() {
return loopIdToCurrentNum;
}
public void setLoopIdToCurrentNum(Map<Integer, Integer> loopIdToCurrentNum) {
this.loopIdToCurrentNum = loopIdToCurrentNum;
}
}