EMMA Coverage Report (generated Sun Feb 05 10:43:15 CET 2012)
[all classes][de.uka.ipd.sdq.prototype.framework]

COVERAGE SUMMARY FOR SOURCE FILE [AbstractResourceEnvironment.java]

nameclass, %method, %block, %line, %
AbstractResourceEnvironment.java0%   (0/1)0%   (0/7)0%   (0/221)0%   (0/34)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AbstractResourceEnvironment0%   (0/1)0%   (0/7)0%   (0/221)0%   (0/34)
<static initializer> 0%   (0/1)0%   (0/87)0%   (0/6)
AbstractResourceEnvironment (): void 0%   (0/1)0%   (0/3)0%   (0/1)
getStrategy (String, String [], Class []): IDemandStrategy 0%   (0/1)0%   (0/39)0%   (0/8)
performDelay (double): void 0%   (0/1)0%   (0/10)0%   (0/4)
registerStrategy (String, DegreeOfAccuracyEnum, String, IDemandStrategy, Reso... 0%   (0/1)0%   (0/16)0%   (0/4)
setUpCPU (String, String, DegreeOfAccuracyEnum, String): void 0%   (0/1)0%   (0/33)0%   (0/6)
setUpHDD (String, String, DegreeOfAccuracyEnum, String): void 0%   (0/1)0%   (0/33)0%   (0/6)

1package de.uka.ipd.sdq.prototype.framework;
2 
3import de.uka.ipd.sdq.measurement.strategies.activeresource.DegreeOfAccuracyEnum;
4import de.uka.ipd.sdq.measurement.strategies.activeresource.IDemandStrategy;
5import de.uka.ipd.sdq.measurement.strategies.activeresource.ResourceTypeEnum;
6import de.uka.ipd.sdq.measurement.strategies.activeresource.cpu.CalculatePrimesDemand;
7import de.uka.ipd.sdq.measurement.strategies.activeresource.cpu.CountNumbersDemand;
8import de.uka.ipd.sdq.measurement.strategies.activeresource.cpu.FFTDemand;
9import de.uka.ipd.sdq.measurement.strategies.activeresource.cpu.FibonacciDemand;
10import de.uka.ipd.sdq.measurement.strategies.activeresource.cpu.MandelbrotDemand;
11import de.uka.ipd.sdq.measurement.strategies.activeresource.cpu.SortArrayDemand;
12import de.uka.ipd.sdq.measurement.strategies.activeresource.cpu.VoidDemand;
13import de.uka.ipd.sdq.measurement.strategies.activeresource.cpu.WaitDemand;
14import de.uka.ipd.sdq.measurement.strategies.activeresource.hdd.ReadLargeChunksDemand;
15import de.uka.ipd.sdq.simucomframework.variables.StackContext;
16 
17/**
18 * Assigns strategies for resource demand simulation. Also starts calibration 
19 * for active resources. 
20 * 
21 * Strategy is chosen by its name. 
22 * 
23 * @author Sebastian Lehrig, Thomas Zolynski
24 */
25public class AbstractResourceEnvironment {
26        
27        protected static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getRootLogger();
28 
29        /** CPU strategies, names */
30        protected static final String[] cpuStrategies = { "primes", "count_numbers", "fft", "fibonacci", "mandelbrot", "sortarray", "void", "wait" };
31        /** CPU strategies, corresponding classes */
32        protected static final Class<?>[] cpuStrategiesClasses = { CalculatePrimesDemand.class, CountNumbersDemand.class, FFTDemand.class, FibonacciDemand.class, MandelbrotDemand.class, SortArrayDemand.class, VoidDemand.class, WaitDemand.class };
33        
34        /** HDD strategies, names */
35        protected static final String[] hddStrategies = { "largeChunks" };
36        /** HDD strategies, corresponding classes */
37        protected static final Class<?>[] hddStrategiesClasses = { ReadLargeChunksDemand.class };
38 
39        /**
40         * Maps a strategy string to a strategy class.
41         * 
42         * @param usedStrategy                        name of the strategy
43         * @param strategies                        array of strategy names
44         * @param strategiesClasses                array of corresponding strategy classes
45         * @return new instance of the strategy class whose name was given
46         */
47        private static IDemandStrategy getStrategy(String usedStrategy, String[] strategies, Class<?>[] strategiesClasses)
48        {
49                IDemandStrategy strategy = null;
50                for (int i = 0; i < strategies.length; i ++) {
51                        if (strategies[i].equals(usedStrategy)) {
52                                try {
53                                        
54                                        strategy = (IDemandStrategy) strategiesClasses[i].newInstance();
55                                } catch (InstantiationException e) {
56                                        logger.error("CPU strategy " + usedStrategy + " can not be instantiated");
57                                } catch (IllegalAccessException e) {
58                                }
59                        }
60                }
61                return strategy;
62        }
63        
64        /**
65         * Starts the CPU calibration. 
66         * 
67         * @param usedStrategy                name of the used strategy
68         * @param calibrationPath        path where old calibration runs can be retrieved from and new ones will be stored
69         * @param accuracy                        accuracy of the calibration: LOW, MEDIUM or HIGH
70         * @param processingRate        processing rate
71         */
72        protected static void setUpCPU(String usedStrategy, String calibrationPath, DegreeOfAccuracyEnum accuracy, String processingRate) {
73                IDemandStrategy strategy = getStrategy(usedStrategy, cpuStrategies, cpuStrategiesClasses);
74 
75                if (strategy == null) {
76                        logger.warn("CPU strategy " + (usedStrategy == null ? "" : usedStrategy) + " not found. Using Fibonacci instead");
77                        strategy = new FibonacciDemand();
78                }
79 
80                registerStrategy(calibrationPath, accuracy, processingRate, strategy, de.uka.ipd.sdq.measurement.strategies.activeresource.ResourceTypeEnum.CPU);
81        }
82        
83        /**
84         * Starts the HDD calibration. 
85         * 
86         * @param usedStrategy                name of the used strategy
87         * @param calibrationPath        path where old calibration runs can be retrieved from and new ones will be stored
88         * @param accuracy                        accuracy of the calibration: LOW, MEDIUM or HIGH
89         * @param processingRate        processing rate
90         */
91        protected static void setUpHDD(String usedStrategy, String calibrationPath, DegreeOfAccuracyEnum accuracy, String processingRate) {
92                IDemandStrategy strategy = getStrategy(usedStrategy, cpuStrategies, cpuStrategiesClasses);;
93                
94                if (strategy == null) {
95                        logger.warn("HDD strategy " + (usedStrategy == null ? "" : usedStrategy) + " not found. Using LargeChunks instead");
96                        strategy = new de.uka.ipd.sdq.measurement.strategies.activeresource.hdd.ReadLargeChunksDemand();
97                }
98 
99                registerStrategy(calibrationPath, accuracy, processingRate, strategy, de.uka.ipd.sdq.measurement.strategies.activeresource.ResourceTypeEnum.HDD);
100        }
101 
102        private static void registerStrategy(String calibrationPath, DegreeOfAccuracyEnum accuracy, String processingRate, IDemandStrategy strategy, ResourceTypeEnum resourceType) {
103                double procRate = StackContext.evaluateStatic(processingRate, Double.class);
104                strategy.initializeStrategy(accuracy, procRate, calibrationPath);
105                
106                de.uka.ipd.sdq.prototype.framework.strategies.DemandConsumerStrategiesRegistry.singleton().registerStrategyFor(resourceType, strategy);
107        }
108        
109        /**
110         * Performs the "delay" resource demand.
111         * TODO: Does not really fit into this class. However, we didn't find a more suiting one.
112         * 
113         * @param delay                delay duration in ms
114         */
115        public static void performDelay(double delay) {
116                try {
117                        Thread.sleep(Math.round(delay));
118                } catch (InterruptedException e) {
119                        logger.error("Interrupted while performing a delay", e);
120                }
121        }
122}

[all classes][de.uka.ipd.sdq.prototype.framework]
EMMA 2.0.9414 (unsupported private build) (C) Vladimir Roubtsov