/*******************************************************************************
* Copyright 2014 Analog Devices, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
********************************************************************************/
package com.analog.lyric.benchmarking;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.Properties;
public class BenchmarkCreator
{
private BenchmarkDataset _benchmarkDataset = new BenchmarkDataset();
public BenchmarkCreator(String label)
{
Properties properties = getBenchmarkDataset().getProperties();
properties.setProperty("label", label);
addJavaSystemProperty("java.class.path");
addJavaSystemProperty("java.vendor");
addJavaSystemProperty("java.version");
addJavaSystemProperty("os.arch");
addJavaSystemProperty("os.name");
addJavaSystemProperty("os.version");
addJavaSystemProperty("user.name");
Runtime runtime = Runtime.getRuntime();
properties.setProperty("java.memory.free",
String.valueOf(runtime.freeMemory()));
properties.setProperty("java.memory.total",
String.valueOf(runtime.totalMemory()));
properties.setProperty("java.memory.max",
String.valueOf(runtime.maxMemory()));
properties.setProperty("java.processors.available",
String.valueOf(runtime.availableProcessors()));
Date creationDate = new Date();
properties.setProperty("create.date", creationDate.toString());
properties.setProperty("create.date.milliseconds",
String.valueOf(creationDate.getTime()));
java.net.InetAddress localMachine;
try
{
localMachine = java.net.InetAddress.getLocalHost();
String hostName = localMachine.getHostName();
properties.setProperty("hostname", hostName);
}
catch (UnknownHostException e)
{
// ignore
}
}
public void doRun(String label, int warmupIterations, int iterations,
boolean doGC, IterationRunner runnable,
DataCollector... dataCollectors)
{
BenchmarkRun run = new BenchmarkRun();
getBenchmarkDataset().getBenchmarkRuns().add(run);
Properties runProperties = run.getProperties();
runProperties.setProperty("label", label);
runProperties.setProperty("warmupIterations",
String.valueOf(warmupIterations));
runProperties.setProperty("iterations", String.valueOf(iterations));
runProperties.setProperty("GC", String.valueOf(doGC));
Runtime.getRuntime().gc();
boolean abort = false;
for (int i = 0; !abort && i < warmupIterations; i++)
{
abort = runnable.run();
if (doGC)
{
Runtime.getRuntime().gc();
}
}
for (int i = 0; !abort && i < iterations; i++)
{
for (DataCollector dataCollector : dataCollectors)
{
dataCollector.startCollection();
}
abort = runnable.run();
for (DataCollector dataCollector : dataCollectors)
{
dataCollector.finishCollection();
}
BenchmarkRunIteration iteration = new BenchmarkRunIteration();
iteration.setIteration(i);
for (DataCollector dataCollector : dataCollectors)
{
dataCollector.postResults(iteration);
}
run.getIterations().add(iteration);
if (doGC)
{
Runtime.getRuntime().gc();
}
}
}
private void addJavaSystemProperty(String key)
{
getBenchmarkDataset().getProperties().setProperty(key,
System.getProperty(key));
}
public BenchmarkDataset getBenchmarkDataset()
{
return _benchmarkDataset;
}
}