Status Update
Comments
cc...@google.com <cc...@google.com> #2
Thanks for your detailed post.
However, benchmark build type is under configured: at least isProfileable is not set to true for existing build type, probably there's more.
We should set isProfileable = true
by default when overriding an existing benchmark build type.
This issue is not about some specific configuration flag, but the general approach of dealing with external configuration. As a developer adopting baseline profiles, it seems extremely risky to me using a custom configuration due to how it's applied under the hood and the fact it may break default configuration.
I agree that is not great but this is a little tricky to do. For custom baseline profile build types we override all the properties. For benchmark I left it open to configure but it's mostly about these 2 properties:
isMinifyEnabled
isShrinkResources
I don't have a way to see if the user is setting them before overriding, so for this reason, I'd prefer not to. I agree with you that some other properties could be set by default to make this easier, i.e.:
isJniDebuggable = false
isDebuggable = false
isProfileable = true
The reason why I mentioned the release signing config in the beginning is because I want to use debug signing config.
In the specific of your issue, i.e. using a debug certificate can you override the benchmark and baseline profile setting? You should be able to do something like:
android {
buildTypes {
release { ... }
debug { ... }
benchmarkRelease {
...
signingConfig signingConfigs.debug
}
nonMinifiedRelease {
...
signingConfig signingConfigs.debug
}
}
}
du...@google.com <du...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
Author: Marcello Albano <
Link:
Added override for debuggable and profileable for benchmark builds in bpgp
Expand for full commit details
Added override for debuggable and profileable for benchmark builds in bpgp
Test: ./gradlew :benchmark:benchmark-baseline-profile-gradle-plugin:test
Bug: 369213505
Relnote: "isProfileable is always overridden in benchmark builds,
and isDebuggable is also now always overridden in both benchmark and
nonMinified (baseline profile capture) builds."
Change-Id: I487fa71083921682173f04fcbb477be5baf165f8
Files:
- M
benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/apptarget/BaselineProfileAppTargetPlugin.kt
- M
benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/apptarget/BaselineProfileAppTargetPluginTest.kt
Hash: 1906bbe52ba7ccb9ca0e1c1d6de33e7c91b5c6f0
Date: Fri Oct 11 10:07:06 2024
ap...@google.com <ap...@google.com> #4
I've landed a change that will set the following properties also when the benchmark build type already exists:
isJniDebuggable = false
isDebuggable = false
isProfileable = true
As well as the following for agp 8.0:
isDebuggable = false
I'm going ahead and closing this - if you've further questions please answer here and will reopen. Thanks.
Description
```
@RunWith(Parameterized::class)
class Benchmark(val size: Long) {
companion object {
@JvmStatic
@Parameterized.Parameters(name = "size={0}")
fun data(): Array<Long> {
return arrayOf(10, 100, 1000);
}
}
@get:Rule
val benchmarkRule = BenchmarkRule()
@Test
fun myBenchmark() {
benchmarkRule.measureRepeated {
for(i in 0 until size) {
// Do work
}
}
}
}
```
The output will look something like this
```
{ "results": [
{
"name": "myBenchmark[size=10]",
"classname": "com.test.benchmark.Benchmark",
"nanos": 279000,
"warmupIterations": 652,
"repeatIterations": 1,
"runs": [ ... ]
}
}
```
While it is possible to parse the parameterized parameter from the `name` String it is annoying to have to do so. It would be much easier for further post-processing of the results if these parameters had their own block, something like:
```
// Figuring out that the parameter is named `size` would be awesome, but probably not straight forward
{ "results": [
{
"name": "myBenchmark[size=10]",
"params": {
size: 10
}
"classname": "com.test.benchmark.Benchmark",
"nanos": 279000,
"warmupIterations": 652,
"repeatIterations": 1,
"runs": [ ... ]
}
}
// This kind of output would still be easier to parse programmatically and is similar to how the parameterized runner approaches it.
{ "results": [
{
"name": "myBenchmark[size=10]",
"params": [10], // Create a parameter array that uses the `{x}` indexes from JUnit.
"classname": "com.test.benchmark.Benchmark",
"nanos": 279000,
"warmupIterations": 652,
"repeatIterations": 1,
"runs": [ ... ]
}
}
```