Status Update
Comments
ra...@google.com <ra...@google.com>
ap...@google.com <ap...@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
}
}
}
cc...@google.com <cc...@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
ra...@google.com <ra...@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.
cc...@google.com <cc...@google.com> #5
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.benchmark:benchmark-baseline-profile-gradle-plugin:1.4.0-alpha04
ap...@google.com <ap...@google.com> #6
Since release signing config is used by default instead of debug
is not mentioned in release notes - maybe this is a bug?
Cause the last time I found it mentioned in the release notes was in version 1.1
signingConfig.debug is used as the default signing config (
) b/153583269
So, if the switch to the release one indeed happened - maybe it's an issue?
an...@google.com <an...@google.com> #8
Chris suggested I share some feedback from my recent try to have method tracing for the macro bench run. I was running a compose TrivialListScrollBenchmark I added
android {
defaultConfig {
testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = 'MethodTracing'
}
}
Into gradle and made a run. Each iteration created two files:
- perfetto-trace which only contains the manually added traces (as if MethodTracing wasn't enabled)
- method.trace files. a file for the 0th iteration contains some trace which I can open in studio or
https://profiler.firefox.com , but I don't understand what part of the execution was tested. it shows a trace for a one Choreographer.doFrame where we composed a new item, but the whole run includes many frames for multiple flings and I am not sure what frame it chose. another interesting part is that method.trace files for each other iteration are just zero sized files Attaching those files
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit b545c369ec7d8d6a019616c2dff67a4819c655c8
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Wed Aug 23 13:24:01 2023
Make method tracing in Macrobenchmark more resilient.
* Use `--streaming`. Otherwise method traces stop at ~ the 1 sec mark.
* Use `--start-profiler` only when the process is not already alive.
* Tracing is always stopped at an iteration boundary to avoid confusion.
* Only iterations that involve `cold` starts are now accompanied with a method trace and therefore we avoid `0 byte` file captures.
Test: Tested locally.
Bug:
Change-Id: I66670cc981f371359767588c0374b1a909972b6c
M benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkScopeTest.kt
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt
ra...@google.com <ra...@google.com> #10
I landed this change to make this more consistent.
--
In general, MethodTracing
when enabled captures the time between a cold start to the point where the iteration is complete.
We only turn on method tracing for iterations that involve cold starts. You will therefore not see a 1-1 mapping between the number of iterations and the number of method traces given you might be measuring HOT starts for e.g.
I fixed the issue where you were seeing 0
byte method trace files as well. Let me know if you have other questions.
cc...@google.com <cc...@google.com> #11
I'm going to do one more pass on the behavior here to make it match micro more closely for the final 1.2 version:
- One method tracing pass at the end, after measurements, with measurements disabled (may want to still throw if no metrics captured, though)
- Document behavior surprises for micro vs macro
- Starts in first startActivityAndWait for now
- Add warning to output about why missing in living process case
ap...@google.com <ap...@google.com> #12
Branch: androidx-main
commit 98cd86539257998d458a86d2b689e3911687a4fd
Author: Chris Craik <ccraik@google.com>
Date: Mon Sep 11 15:50:57 2023
Fix method tracing file labels/paths
Test: TrivialStartupBenchmark # w/ method tracing enabled
Bug: 285912360
Relnote: "(Macrobenchmark) Clarified method tracing label in Studio
display, and fixed method tracing filenames to be unique on
device/host, so they won't be overwritten when more than one benchmark
is run."
Method tracing still has some issues, such as only capturing one
iteration when process isn't killed each iteration, and not running as
a separate phase, but those are larger changes, for a later release.
Also, removes unused MethodTracing.kt
Change-Id: I08e65d3fe8ab77614b5a3cbc241fb7901ba57135
M benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkScopeTest.kt
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt
D benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MethodTracing.kt
cc...@google.com <cc...@google.com> #13
With the above fix, macrobench method tracing is in a good enough/experimental state to ship with 1.2, so punting further work to 1.3
Remaining issues / gaps between method tracing in micro vs macro:
- Method trace should be done in separate measurement phase, more like microbench
- Method tracing can only start for an iteration if process is launched cold, so only one occurs frequently, e.g. when measuring warm start (CL in
adds warning about this)#comment12 - Method trace not embedded into perfetto trace
ap...@google.com <ap...@google.com> #14
Branch: androidx-main
commit 7a0dc4138dd47a207c94dead3653e4db2c36b1d9
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Mon Nov 06 15:12:10 2023
Use a consistent naming scheme for generated method traces in Macrobenchmarks.
Test: Updated existing tests.
Bug: 285912360
Change-Id: I5367d4fad0ec62a761ed9272340638d0020cfd75
M benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkScopeTest.kt
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt
cc...@google.com <cc...@google.com>
bu...@google.com <bu...@google.com> #16
bu...@google.com <bu...@google.com>
ra...@google.com <ra...@google.com>
cc...@google.com <cc...@google.com> #17
Last thing here should be to not capture metrics (or at least label metrics separately) for method tracing iterations.
ra...@google.com <ra...@google.com>
ap...@google.com <ap...@google.com> #18
Branch: androidx-main
commit 2d1785e9837b97c6d64878413efb96d873895cd0
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Wed Apr 24 16:57:02 2024
Move method tracing to a separate phase.
* Method tracing now runs as a separate phase, without interfering with metrics.
Fixes: 285912360
Fixes: 336588271
Test: Existing unit tests.
Change-Id: If9a504a7bce7228840339b34294ba3fdf98aceeb
Relnote: Method tracing runs as a seperate phase during a Macrobenchmark, and it no longer affects measurements.
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
A benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkPhase.kt
pr...@google.com <pr...@google.com> #19
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.benchmark:benchmark-macro:1.3.0-alpha05
Description
Filing a bug to track (late) comments on macrobench tracing CL:https://android-review.git.corp.google.com/c/platform/frameworks/support/+/2594692
Can punt this out of 1.2, but put there for minimal fix of config options