/******************************************************************************* * Copyright (c) 2009, 2010 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation ******************************************************************************/ package org.eclipse.ocl.examples.impactanalyzer.benchmark.execution.measurements; import java.util.ArrayList; import java.util.HashMap; public class BenchmarkMeasurements { static int aggregateCounter = 0; private static HashMap<String, ArrayList<Measurement>> measurementList = new HashMap<String, ArrayList<Measurement>>(); public static Measurement createNewMeasurement(String measurePointId) { Measurement measure = new MicroMeasurement(); if (getMeasurementList().containsKey(measurePointId)) { getMeasurementList().get(measurePointId).add(measure); } else { getMeasurementList().put(measurePointId, new ArrayList<Measurement>()); getMeasurementList().get(measurePointId).add(measure); } return measure; } public static Measurement createNewAdditiveMeasurement(String measurePointId) { Measurement measure = new AdditiveMeasurement(); if (getMeasurementList().containsKey(measurePointId)) { getMeasurementList().get(measurePointId).add(measure); } else { getMeasurementList().put(measurePointId, new ArrayList<Measurement>()); getMeasurementList().get(measurePointId).add(measure); } return measure; } public static Measurement createSubMeasurement(String id, String subId){ MicroMeasurement measure = new MicroMeasurement(); ArrayList<Measurement> allMeasuresForId = getMeasurementList().get(id); Measurement parent = allMeasuresForId.get(allMeasuresForId.size() - 1); parent.addSubMeasurement(subId, measure); return measure; } public static HashMap<String, ArrayList<Measurement>> getMeasurementList() { return measurementList; } public static void reset(){ measurementList = new HashMap<String, ArrayList<Measurement>>(); aggregateCounter = 0; } public static void aggregate(){ for(String key : measurementList.keySet()){ ArrayList<Measurement> value = measurementList.get(key); ArrayList<Measurement> newValue = new ArrayList<Measurement>(); if(value.size() > (aggregateCounter + 1)){ for(int i = 0; i < aggregateCounter; i++){ newValue.add(value.get(i)); } AdditiveMeasurement additiveMeasure = new AdditiveMeasurement(); for(int i = aggregateCounter; i < value.size(); i++){ additiveMeasure.addMeasurement(value.get(i)); } newValue.add(additiveMeasure); } measurementList.put(key, newValue); } aggregateCounter++; } }