Skip to content

Commit

Permalink
Configure baseline profiles in the baselineProfile lambda (#1060)
Browse files Browse the repository at this point in the history
* Configure baseline profiles in the baselineProfile lambda

* This is the correct and easiest way to set up baseline profiles correctly.
  * See b/313428246 for more context.
* Handle empty topics during baseline profile generation
* Revert to API 33 GMD and fail empty screen tests
* Rename withChildren to noChildren for better legibility
* Remove unused log tags
* Update benchmark and metrics versions
* 🤖 Updates baselines for Dependency Guard

---------

Co-authored-by: Tomáš Mlynarič <mlykotom@google.com>
Co-authored-by: Jaehwa Noh <shwoghk14@gmail.com>
  • Loading branch information
3 people authored Apr 23, 2024
1 parent 0ba430e commit 7980c1d
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 12 deletions.
2 changes: 1 addition & 1 deletion app-nia-catalog/dependencies/releaseRuntimeClasspath.txt
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0
androidx.lifecycle:lifecycle-viewmodel:2.7.0
androidx.loader:loader:1.0.0
androidx.metrics:metrics-performance:1.0.0-alpha04
androidx.metrics:metrics-performance:1.0.0-beta01
androidx.profileinstaller:profileinstaller:1.3.1
androidx.savedstate:savedstate-ktx:1.2.1
androidx.savedstate:savedstate:1.2.1
Expand Down
18 changes: 15 additions & 3 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,7 @@ android {
// To publish on the Play store a private signing key is required, but to allow anyone
// who clones the code to sign and run the release variant, use the debug signing key.
// TODO: Abstract the signing configuration to a separate file to avoid hardcoding this.
signingConfig = signingConfigs.named("debug").get()
// Ensure Baseline Profile is fresh for release builds.
baselineProfile.automaticGenerationDuringBuild = true
signingConfig = signingConfigs.getByName("debug")
}
}

Expand All @@ -71,6 +69,20 @@ android {
namespace = "com.google.samples.apps.nowinandroid"
}

baselineProfile {
saveInSrc = false
// Don't build on every iteration of a full assemble.
// Instead enable generation directly for the release build variant.
automaticGenerationDuringBuild = false
mergeIntoMain = true
variants {
create("release") {
// Ensure Baseline Profile is fresh for release builds.
automaticGenerationDuringBuild = true
}
}
}

dependencies {
implementation(projects.feature.interests)
implementation(projects.feature.foryou)
Expand Down
2 changes: 1 addition & 1 deletion app/dependencies/prodReleaseRuntimeClasspath.txt
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.0-alpha04
androidx.lifecycle:lifecycle-viewmodel:2.8.0-alpha04
androidx.loader:loader:1.0.0
androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
androidx.metrics:metrics-performance:1.0.0-alpha04
androidx.metrics:metrics-performance:1.0.0-beta01
androidx.navigation:navigation-common-ktx:2.7.4
androidx.navigation:navigation-common:2.7.4
androidx.navigation:navigation-compose:2.7.4
Expand Down
Binary file modified app/src/testDemo/screenshots/snackbar_expanded_expanded.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion benchmarks/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.android.build.api.dsl.ManagedVirtualDevice
import com.google.samples.apps.nowinandroid.configureFlavors

plugins {
Expand Down Expand Up @@ -46,7 +47,7 @@ android {
}

testOptions.managedDevices.devices {
create<com.android.build.api.dsl.ManagedVirtualDevice>("pixel6Api33") {
create<ManagedVirtualDevice>("pixel6Api33") {
device = "Pixel 6"
apiLevel = 33
systemImageSource = "aosp"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ fun MacrobenchmarkScope.forYouWaitForContent() {
*/
fun MacrobenchmarkScope.forYouSelectTopics(recheckTopicsIfChecked: Boolean = false) {
val topics = device.findObject(By.res("forYou:topicSelection"))
val noChildren = topics.childCount == 0
if (noChildren) {
// TODO: Ensure ForYou has topics.
fail("No topics found, can't scroll for baseline profile generation.")
}

// Set gesture margin from sides not to trigger system gesture navigation
val horizontalMargin = 10 * topics.visibleBounds.width() / 100
Expand All @@ -51,9 +56,6 @@ fun MacrobenchmarkScope.forYouSelectTopics(recheckTopicsIfChecked: Boolean = fal
var visited = 0

while (visited < 3) {
if (topics.childCount == 0) {
fail("No topics found, can't generate profile for ForYou page.")
}
// Selecting some topics, which will populate items in the feed.
val topic = topics.children[index % topics.childCount]
// Find the checkable element to figure out whether it's checked or not
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import androidx.test.uiautomator.By
import androidx.test.uiautomator.Until
import com.google.samples.apps.nowinandroid.flingElementDownUp
import com.google.samples.apps.nowinandroid.waitForObjectOnTopAppBar
import org.junit.Assert.fail

fun MacrobenchmarkScope.goToInterestsScreen() {
device.findObject(By.text("Interests")).click()
Expand All @@ -35,7 +36,12 @@ fun MacrobenchmarkScope.goToInterestsScreen() {
fun MacrobenchmarkScope.interestsScrollTopicsDownUp() {
device.wait(Until.hasObject(By.res("interests:topics")), 5_000)
val topicsList = device.findObject(By.res("interests:topics"))
device.flingElementDownUp(topicsList)
if (topicsList != null) {
// TODO: Ensure topics are availble.
device.flingElementDownUp(topicsList)
} else {
fail("No topics found, can't scroll during baseline profile generation.")
}
}

fun MacrobenchmarkScope.interestsWaitForTopics() {
Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ androidxDataStore = "1.0.0"
androidxEspresso = "3.5.1"
androidxHiltNavigationCompose = "1.2.0"
androidxLifecycle = "2.7.0"
androidxMacroBenchmark = "1.2.2"
androidxMetrics = "1.0.0-alpha04"
androidxMacroBenchmark = "1.2.4"
androidxMetrics = "1.0.0-beta01"
androidxNavigation = "2.7.4"
androidxProfileinstaller = "1.3.1"
androidxTestCore = "1.5.0"
Expand Down

0 comments on commit 7980c1d

Please sign in to comment.