@@ -2,6 +2,7 @@ package kotlinx.benchmark.gradle
2
2
3
3
import kotlinx.benchmark.gradle.internal.KotlinxBenchmarkPluginInternalApi
4
4
import org.gradle.api.*
5
+ import org.gradle.api.tasks.TaskProvider
5
6
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
6
7
import java.io.InputStream
7
8
import java.util.*
@@ -14,18 +15,18 @@ fun Project.processAndroidCompilation(target: KotlinJvmAndroidCompilation) {
14
15
println (" processAndroidCompilation: ${target.name} " )
15
16
val compilation = target.target.compilations.names.let (::println)
16
17
17
- tasks.register(" processAndroid${target.name.capitalize(Locale .getDefault())} Compilation" , DefaultTask ::class .java) {
18
+ val generateSourcesTask = tasks.register(" processAndroid${target.name.capitalize(Locale .getDefault())} Compilation" , DefaultTask ::class .java) {
18
19
it.group = " benchmark"
19
20
it.description = " Processes the Android compilation '${target.name} ' for benchmarks"
20
21
it.dependsOn(" bundle${target.name.capitalize(Locale .getDefault())} Aar" )
21
22
it.doLast {
22
23
unpackAndProcessAar(target) { classDescriptors ->
23
24
generateBenchmarkSourceFiles(classDescriptors)
24
25
}
25
- detectAndroidDevice()
26
- createAndroidBenchmarkExecTask()
27
26
}
28
27
}
28
+
29
+ createAndroidBenchmarkExecTask(target, generateSourcesTask)
29
30
}
30
31
31
32
fun Project.detectAndroidDevice () {
@@ -47,38 +48,47 @@ fun Project.detectAndroidDevice() {
47
48
48
49
49
50
// Use shell command to execute separate project gradle task
50
- fun Project.createAndroidBenchmarkExecTask () {
51
- // TODO: Project path needs to execute benchmark task
52
- val executeBenchmarkPath = " E:/Android/AndroidProjects/kotlin-qualification-task"
53
- // Using ./gradlew on Windows shows error:
54
- // CreateProcess error=193, %1 is not a valid Win32 application
55
- val osName = System .getProperty(" os.name" ).toLowerCase(Locale .ROOT )
56
- val gradlewPath = " $executeBenchmarkPath /gradlew" + if (osName.contains(" win" )) " .bat" else " "
57
- val args = listOf (" -p" , executeBenchmarkPath, " connectedAndroidTest" )
51
+ fun Project.createAndroidBenchmarkExecTask (target : KotlinJvmAndroidCompilation , generateSourcesTask : TaskProvider <* >) {
52
+ tasks.register(" android${target.name.capitalize(Locale .getDefault())} Benchmark" , DefaultTask ::class .java) {
53
+ it.group = " benchmark"
54
+ it.description = " Processes the Android compilation '${target.name} ' for benchmarks"
55
+ it.dependsOn(generateSourcesTask)
56
+ it.doLast {
57
+ detectAndroidDevice()
58
58
59
- try {
60
- println (" Running command: $gradlewPath ${args.joinToString(" " )} " )
59
+ // TODO: Project path needs to execute benchmark task
60
+ val executeBenchmarkPath = " /Users/abduqodiri.qurbonzoda_1/AndroidStudioProjects/kotlin-qualification-task"
61
+ // Using ./gradlew on Windows shows error:
62
+ // CreateProcess error=193, %1 is not a valid Win32 application
63
+ val osName = System .getProperty(" os.name" ).toLowerCase(Locale .ROOT )
64
+ val gradlewPath = " $executeBenchmarkPath /gradlew" + if (osName.contains(" win" )) " .bat" else " "
65
+ val args = listOf (" -p" , executeBenchmarkPath, " connectedAndroidTest" )
61
66
62
- val process = ProcessBuilder (gradlewPath, * args.toTypedArray())
63
- .redirectOutput(ProcessBuilder .Redirect .PIPE )
64
- .redirectError(ProcessBuilder .Redirect .PIPE )
65
- .start()
67
+ try {
68
+ println (" Running command: $gradlewPath ${args.joinToString(" " )} " )
66
69
67
- val outputGobbler = StreamGobbler (process.inputStream) { println (it) }
68
- val errorGobbler = StreamGobbler (process.errorStream) { System .err.println (it) }
70
+ val process = ProcessBuilder (gradlewPath, * args.toTypedArray())
71
+ .redirectOutput(ProcessBuilder .Redirect .PIPE )
72
+ .redirectError(ProcessBuilder .Redirect .PIPE )
73
+ .start()
69
74
70
- outputGobbler.start()
71
- errorGobbler.start()
75
+ val outputGobbler = StreamGobbler (process.inputStream) { println (it) }
76
+ val errorGobbler = StreamGobbler (process.errorStream) { System .err. println (it) }
72
77
73
- val exitCode = process.waitFor(10 , TimeUnit .MINUTES )
74
- if (! exitCode || process.exitValue() != 0 ) {
75
- println (" Android benchmark task failed with exit code ${process.exitValue()} " )
76
- } else {
77
- println (" Benchmark for Android target finished." )
78
+ outputGobbler.start()
79
+ errorGobbler.start()
80
+
81
+ val exitCode = process.waitFor(10 , TimeUnit .MINUTES )
82
+ if (! exitCode || process.exitValue() != 0 ) {
83
+ println (" Android benchmark task failed with exit code ${process.exitValue()} " )
84
+ } else {
85
+ println (" Benchmark for Android target finished." )
86
+ }
87
+ } catch (e: Exception ) {
88
+ e.printStackTrace()
89
+ throw GradleException (" Failed to execute benchmark task" , e)
90
+ }
78
91
}
79
- } catch (e: Exception ) {
80
- e.printStackTrace()
81
- throw GradleException (" Failed to execute benchmark task" , e)
82
92
}
83
93
}
84
94
0 commit comments