/* * Copyright 2016 the original author or authors. * * 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 org.gradle.testing; import org.gradle.api.internal.tasks.options.Option; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.Optional; import java.io.File; /** * A test that checks execution time and memory consumption. */ public class PerformanceTest extends DistributionTest { private String baselines; private String warmups; private String runs; private String checks; private String channel; private File debugArtifactsDirectory = new File(getProject().getBuildDir(), getName()); @Option(option = "scenarios", description = "A semicolon-separated list of performance test scenario ids to run.") public void setScenarios(String scenarios) { systemProperty("org.gradle.performance.scenarios", scenarios); } @Option(option = "baselines", description = "A comma or semicolon separated list of Gradle versions to be used as baselines for comparing.") public void setBaselines(String baselines) { this.baselines = baselines; systemProperty("org.gradle.performance.baselines", baselines); } @Input @Optional public String getBaselines() { return baselines; } @Option(option = "warmups", description = "Number of warmups before measurements") public void setWarmups(String warmups) { this.warmups = warmups; systemProperty("org.gradle.performance.execution.warmups", warmups); } @Input @Optional public String getWarmups() { return warmups; } @Option(option = "runs", description = "Number of iterations of measurements") public void setRuns(String runs) { this.runs = runs; systemProperty("org.gradle.performance.execution.runs", runs); } @Input @Optional public String getRuns() { return runs; } @Option(option = "checks", description = "Tells which regressions to check. One of [none, speed, all]") public void setChecks(String checks) { this.checks = checks; systemProperty("org.gradle.performance.execution.checks", checks); } @Input @Optional public String getChecks() { return checks; } @Input @Optional public String getChannel() { return channel; } @Option(option = "channel", description = "Channel to use when running the performance test. By default, 'commits'.") public void setChannel(String channel) { this.channel = channel; systemProperty("org.gradle.performance.execution.channel", channel); } @OutputDirectory public File getDebugArtifactsDirectory() { return debugArtifactsDirectory; } public void setDebugArtifactsDirectory(File debugArtifactsDirectory) { this.debugArtifactsDirectory = debugArtifactsDirectory; } @Option(option = "flamegraphs", description = "If set to 'true', activates flamegraphs and stores them into the 'flames' directory name under the debug artifacts directory.") public void setFlamegraphs(String flamegraphs) { if ("true".equals(flamegraphs)) { File artifactsDirectory = new File(getDebugArtifactsDirectory(), "flames"); systemProperty("org.gradle.performance.honestprofiler", artifactsDirectory.getAbsolutePath()); } } @Option(option = "sampling-interval", description = "How many ms to wait between two samples when profiling") public void setSamplingInterval(String samplingInterval) { systemProperty("org.gradle.performance.samplinginterval", samplingInterval); } }