package test.rewolucja.resources.physical.implementation; import java.util.Properties; import schedframe.resources.units.CpuSpeed; import schedframe.scheduling.utils.ResourceParameterName; import test.rewolucja.energy.extension.EnergyExtension; import test.rewolucja.energy.profile.CPUPowerProfile; import test.rewolucja.energy.profile.PowerInterface; import test.rewolucja.extensions.ExtensionType; import test.rewolucja.resources.ResourceCharacteristics; import test.rewolucja.resources.ResourceStatus; import test.rewolucja.resources.description.ExecResourceDescription; import test.rewolucja.resources.physical.base.ComputingResource; import test.rewolucja.resources.properties.CpuPropertiesBuilder; import test.rewolucja.resources.properties.PropertiesDirector; public class CPU extends ComputingResource{ public CPU (ExecResourceDescription resDesc) { super(resDesc); accept(resDesc.getPowerProfile()); } /*public CPU (String resourceName, ResourceCharacteristics resourceCharacteristic) { super(resourceName, ResourceType.CPU, resourceCharacteristic); extensionList.add(new EnergyExtension(this, "example.energy.CPUEnergyEstimationPlugin")); }*/ public ComputingNode getComputingNode(){ return (ComputingNode)parent; } public double getUtilization(){ if(getStatus() == ResourceStatus.BUSY) return 1; else return 0; } public int getMIPS(){ return getProcessorSpeed().getAmount(); } public int getAvailableMIPS(){ return getProcessorSpeed().getFreeAmount(); } protected CpuSpeed getProcessorSpeed(){ return (CpuSpeed) getResourceCharacteristic().getResourceUnit(ResourceParameterName.CPUSPEED); } public CPUPowerProfile getPowerInterface(){ if (extensionList != null) { if(extensionList.isExtensionAvailable(ExtensionType.ENERGY_EXTENSION)){ EnergyExtension ee = (EnergyExtension)extensionList.getExtension(ExtensionType.ENERGY_EXTENSION); return (CPUPowerProfile)ee.getPowerInterface(); } } return null; } public void initCharacteristics(ExecResourceDescription resDesc){ resourceCharacteristic = new ResourceCharacteristics(); resourceCharacteristic.addResourceUnit(new CpuSpeed(name, 1, 0)); } public Properties getProperties(){ PropertiesDirector propDirector = new PropertiesDirector(); propDirector.setPropertiesBuilder(new CpuPropertiesBuilder()); propDirector.constructProperties(this); return propDirector.getProperties(); } public void accept(PowerInterface powIntVis){ extensionList.add(new EnergyExtension(this, powIntVis, "example.energy.CPUEnergyEstimationPlugin")); powIntVis.visit(this); } }