-
Notifications
You must be signed in to change notification settings - Fork 4.7k
/
AdHocPerformanceScenario.kt
118 lines (109 loc) · 4.91 KB
/
AdHocPerformanceScenario.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package util
import common.Arch
import common.JvmVendor
import common.KillProcessMode.KILL_ALL_GRADLE_PROCESSES
import common.Os
import common.applyPerformanceTestSettings
import common.buildToolGradleParameters
import common.checkCleanM2AndAndroidUserHome
import common.gradleWrapper
import common.individualPerformanceTestArtifactRules
import common.killProcessStep
import common.performanceTestCommandLine
import common.removeSubstDirOnWindows
import common.substDirOnWindows
import jetbrains.buildServer.configs.kotlin.BuildType
import jetbrains.buildServer.configs.kotlin.ParameterDisplay
import jetbrains.buildServer.configs.kotlin.ParametrizedWithType
abstract class AdHocPerformanceScenario(os: Os, arch: Arch = Arch.AMD64) : BuildType({
val id = "Util_Performance_AdHocPerformanceScenario${os.asName()}${arch.asName()}"
name = "AdHoc Performance Scenario - ${os.asName()} ${arch.asName()}"
id(id)
applyPerformanceTestSettings(os = os, arch = arch, timeout = 420)
artifactRules = individualPerformanceTestArtifactRules
params {
text(
"performance.baselines",
"",
display = ParameterDisplay.PROMPT,
allowEmpty = true,
description = "The baselines you want to run performance tests against. Empty means default baseline."
)
text(
"testProject",
"",
display = ParameterDisplay.PROMPT,
allowEmpty = false,
description = "The test project to use. E.g. largeJavaMultiProject"
)
param("channel", "adhoc")
param("checks", "all")
text("runs", "40", display = ParameterDisplay.PROMPT, allowEmpty = false)
text("warmups", "10", display = ParameterDisplay.PROMPT, allowEmpty = false)
text(
"scenario",
"",
display = ParameterDisplay.PROMPT,
allowEmpty = false,
description = "Which performance test to run. Should be the fully qualified class name dot (unrolled) method name. E.g. org.gradle.performance.regression.java.JavaUpToDatePerformanceTest.up-to-date assemble (parallel true)"
)
text("testJavaVersion", "17", display = ParameterDisplay.PROMPT, allowEmpty = false, description = "The java version to run the performance tests, e.g. 8/11/17")
select(
"testJavaVendor",
JvmVendor.openjdk.name,
display = ParameterDisplay.PROMPT,
description = "The java vendor to run the performance tests",
options = JvmVendor.values().map { it.displayName to it.name }
)
when (os) {
Os.WINDOWS -> {
profilerParam("jprofiler")
param("env.JPROFILER_HOME", "C:\\Program Files\\jprofiler\\jprofiler11.1.4")
}
else -> {
profilerParam("async-profiler")
param("env.FG_HOME_DIR", "/opt/FlameGraph")
param("env.PATH", "%env.PATH%:/opt/swift/4.2.3/usr/bin:/opt/swift/4.2.4-RELEASE-ubuntu18.04/usr/bin")
param("env.HP_HOME_DIR", "/opt/honest-profiler")
}
}
param("env.PERFORMANCE_DB_PASSWORD_TCAGENT", "%performance.db.password.tcagent%")
param("additional.gradle.parameters", "")
}
val buildTypeThis = this
steps {
killProcessStep(buildTypeThis, KILL_ALL_GRADLE_PROCESSES, os)
substDirOnWindows(os)
gradleWrapper {
name = "GRADLE_RUNNER"
workingDir = os.perfTestWorkingDir
gradleParams = (
performanceTestCommandLine(
"clean performance:%testProject%PerformanceAdHocTest --tests \"%scenario%\"",
"%performance.baselines%",
"""--warmups %warmups% --runs %runs% --checks %checks% --channel %channel% --profiler %profiler% %additional.gradle.parameters%""",
os,
arch,
"%testJavaVersion%",
"%testJavaVendor%",
) + buildToolGradleParameters(isContinue = false)
).joinToString(separator = " ")
}
removeSubstDirOnWindows(os)
checkCleanM2AndAndroidUserHome(os)
}
})
private
fun ParametrizedWithType.profilerParam(defaultProfiler: String) {
text(
"profiler",
defaultProfiler,
display = ParameterDisplay.PROMPT,
allowEmpty = false,
description = "Command line option for the performance test task to enable profiling. For example `async-profiler`, `async-profiler-heap`, `async-profiler-all` or `jfr`. Use `none` for benchmarking only."
)
}
object AdHocPerformanceScenarioLinux : AdHocPerformanceScenario(Os.LINUX)
object AdHocPerformanceScenarioWindows : AdHocPerformanceScenario(Os.WINDOWS)
object AdHocPerformanceScenarioMacOS : AdHocPerformanceScenario(Os.MACOS, Arch.AMD64)
object AdHocPerformanceScenarioMacAppleSilicon : AdHocPerformanceScenario(Os.MACOS, Arch.AARCH64)