/*
* Copyright (C) 2013 Anton Tychyna <anton.tychina@gmail.com>
*
* 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.google.caliper.maven;
import com.google.caliper.Benchmark;
import com.google.caliper.config.InvalidConfigurationException;
import com.google.caliper.runner.CaliperMain;
import com.google.caliper.runner.InvalidBenchmarkException;
import com.google.caliper.util.InvalidCommandException;
import com.google.common.collect.ObjectArrays;
import java.io.PrintWriter;
/**
* Wrapper around actual benchmark. This class is loaded using custom {@link BenchmarkClassLoader} which
* contains library dependencies (including Caliper) as Maven doesn't include libraries and project
* tests/classes in plugin classloader classpath.
*
* @see BenchmarkClassLoader
* @see CaliperBenchmark
*/
public class CaliperBenchmarkHarness {
public static final String BENCHMARK_CLASS_NAME = "com.google.caliper.Benchmark";
private Class<?> benchmarkClass;
private CaliperBenchmarkHarness(Class<?> clazz) {
benchmarkClass = clazz;
}
public void run(String[] args) throws InvalidConfigurationException, InvalidCommandException,
InvalidBenchmarkException {
PrintWriter stdout = new PrintWriter(System.out, true);
PrintWriter stderr = new PrintWriter(System.err, true);
CaliperMain.exitlessMain(ObjectArrays.concat(args, benchmarkClass.getName()), stdout, stderr);
}
public static CaliperBenchmarkHarness create(String benchmarkClassName) throws ClassNotFoundException {
Class<?> clazz = ClassLoaderUtils.loadClass(CaliperBenchmarkHarness.class.getClassLoader(),
benchmarkClassName, "Can't find benchmark class " + benchmarkClassName);
if (!Benchmark.class.isAssignableFrom(clazz)) {
throw new IllegalArgumentException("Class " + benchmarkClassName + " is not inherited from "
+ BENCHMARK_CLASS_NAME);
}
return new CaliperBenchmarkHarness(clazz);
}
public Class<?> getBenchmarkClass() {
return benchmarkClass;
}
@Override
public String toString() {
return benchmarkClass.getName();
}
}