blob: 6f2f24cba9dca7780b72ae6bdd90da719f0e7907 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* 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 vogar.target;
import com.google.caliper.runner.BenchmarkClassChecker;
import com.google.caliper.util.InvalidCommandException;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
import vogar.monitor.TargetMonitor;
/**
* Supports treating a class as a Caliper benchmark.
*/
public class CaliperRunnerFactory implements RunnerFactory {
@Nullable
private final BenchmarkClassChecker benchmarkClassChecker;
public CaliperRunnerFactory(List<String> argsList) {
BenchmarkClassChecker benchmarkClassChecker;
try {
// Command line arguments can affect the set of available instruments so pass that
// information on to the checker. Unfortunately, at this point we do not know whether
// the arguments are actually valid for Caliper, if they are not then this will fail.
// If that happens then we simply have to assume that the classes being tested are not
// Caliper benchmarks.
benchmarkClassChecker = BenchmarkClassChecker.create(argsList);
} catch (InvalidCommandException e) {
// The arguments are invalid for Caliper.
System.out.println("Warning: Arguments are invalid for Caliper: " + e.getMessage());
benchmarkClassChecker = null;
}
this.benchmarkClassChecker = benchmarkClassChecker;
}
@Override @Nullable
public TargetRunner newRunner(TargetMonitor monitor, String qualification,
Class<?> klass, AtomicReference<String> skipPastReference,
TestEnvironment testEnvironment, int timeoutSeconds, boolean profile,
String[] args) {
if (benchmarkClassChecker != null && benchmarkClassChecker.isBenchmark(klass)) {
return new CaliperTargetRunner(monitor, profile, klass, args);
} else {
return null;
}
}
}