From 3bcababcef48aaea4b7048c338dedaf09e645e63 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 23 Aug 2024 14:54:05 +0900 Subject: [PATCH 01/12] Create Project.relativeToRootProject extension. Change-Id: I746648d1b11c029a0dcdbac8ca0b8b6487542b0f --- .../samples/apps/nowinandroid/ProjectExtensions.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt index e45d7f2e1..dfb55a6b0 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt @@ -19,7 +19,16 @@ package com.google.samples.apps.nowinandroid import org.gradle.api.Project import org.gradle.api.artifacts.VersionCatalog import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.api.file.Directory +import org.gradle.api.provider.Provider import org.gradle.kotlin.dsl.getByType val Project.libs get(): VersionCatalog = extensions.getByType().named("libs") + +/** + * Create new Directory by [dir] name in the root build directory. + */ +internal fun Project.relativeToRootProject(dir: String): Provider = + rootProject.layout.buildDirectory.dir(projectDir.toRelativeString(rootDir)) + .map { it.dir(dir) } From ddffc459ca74e6abd607aecfc7a2fe2a9c1a1c4a Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 23 Aug 2024 15:00:25 +0900 Subject: [PATCH 02/12] Integrate compose-metrics and compose-reports in one property "enableComposeCompilerReportsAndMetrics". Change-Id: Iaa78284fae1532e728c5f4546ac825b7509e450f --- .../apps/nowinandroid/AndroidCompose.kt | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index f16a8051a..ec9238a6a 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -18,7 +18,6 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.dsl.CommonExtension import org.gradle.api.Project -import org.gradle.api.provider.Provider import org.gradle.kotlin.dsl.assign import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies @@ -52,21 +51,14 @@ internal fun Project.configureAndroidCompose( } extensions.configure { - fun Provider.onlyIfTrue() = flatMap { provider { it.takeIf(String::toBoolean) } } - fun Provider<*>.relativeToRootProject(dir: String) = flatMap { - rootProject.layout.buildDirectory.dir(projectDir.toRelativeString(rootDir)) - }.map { it.dir(dir) } - - project.providers.gradleProperty("enableComposeCompilerMetrics").onlyIfTrue() - .relativeToRootProject("compose-metrics") - .let(metricsDestination::set) + if (project.hasProperty("enableComposeCompilerReportsAndMetrics")) { + metricsDestination = relativeToRootProject("compose-metrics") + reportsDestination = relativeToRootProject("compose-reports") + } - project.providers.gradleProperty("enableComposeCompilerReports").onlyIfTrue() - .relativeToRootProject("compose-reports") - .let(reportsDestination::set) + stabilityConfigurationFile = + rootProject.layout.projectDirectory.file("compose_compiler_config.conf") - stabilityConfigurationFile = rootProject.layout.projectDirectory.file("compose_compiler_config.conf") - enableStrongSkippingMode = true } } From 3a71f267cc3c8539768020d9be12e299f1a76329 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 23 Aug 2024 15:04:17 +0900 Subject: [PATCH 03/12] Edit Compose compiler section README. Change-Id: I19409913690df600eee80b6ca98f6ad9dd59f0a0 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1f5270323..14efcff3b 100644 --- a/README.md +++ b/README.md @@ -190,11 +190,11 @@ Then copy the resulting baseline profile from the emulator to [`app/src/main/bas Run the following command to get and analyse compose compiler metrics: ```bash -./gradlew assembleRelease -PenableComposeCompilerMetrics=true -PenableComposeCompilerReports=true +./gradlew assembleRelease -PenableComposeCompilerReportsAndMetrics=true --rerun-tasks ``` -The reports files will be added to [build/compose-reports](build/compose-reports). The metrics files will also be -added to [build/compose-metrics](build/compose-metrics). +The reports files will be added to ***build/module-name/compose-reports***. The metrics files will also be +added to ***build/module-name/compose-metrics***. For more information on Compose compiler metrics, see [this blog post](https://medium.com/androiddevelopers/jetpack-compose-stability-explained-79c10db270c8). From 96f4b50b6ae660d73ae509efd11c7934f04aaab6 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 23 Aug 2024 18:53:01 +0900 Subject: [PATCH 04/12] Create Project.isPropertyValueIsTrue extension. Change-Id: I550739d630b82c252add80a277fe1248e7577d74 --- .../google/samples/apps/nowinandroid/ProjectExtensions.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt index dfb55a6b0..1756cb52b 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt @@ -32,3 +32,9 @@ val Project.libs internal fun Project.relativeToRootProject(dir: String): Provider = rootProject.layout.buildDirectory.dir(projectDir.toRelativeString(rootDir)) .map { it.dir(dir) } + +/** + * Check a [propertyName]'s property value is true. + */ +internal fun Project.isPropertyValueIsTrue(propertyName: String): Boolean = + properties[propertyName].toString().toBoolean() From 15cc78f763e004d5c5481d73b898864959b1058c Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 23 Aug 2024 18:53:26 +0900 Subject: [PATCH 05/12] Check the property value is true. Change-Id: Idbde833767c13f73a46533bf8dc320fc1926a620 --- .../com/google/samples/apps/nowinandroid/AndroidCompose.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index ec9238a6a..c4f5d3d0b 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -51,7 +51,7 @@ internal fun Project.configureAndroidCompose( } extensions.configure { - if (project.hasProperty("enableComposeCompilerReportsAndMetrics")) { + if (isPropertyValueIsTrue("enableComposeCompilerReportsAndMetrics")) { metricsDestination = relativeToRootProject("compose-metrics") reportsDestination = relativeToRootProject("compose-reports") } From e35324f69aa8fe72e0e51940c8f2a89e1597ddec Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 20 Dec 2024 22:43:53 +0900 Subject: [PATCH 06/12] Move extensions into AndroidCompose.kt private function. Change-Id: I06ad3d172310307307f681fb985a9e0b25c0d89c --- .../samples/apps/nowinandroid/AndroidCompose.kt | 15 +++++++++++++++ .../apps/nowinandroid/ProjectExtensions.kt | 15 --------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 74688ba75..d2b15b324 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -18,6 +18,8 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.dsl.CommonExtension import org.gradle.api.Project +import org.gradle.api.file.Directory +import org.gradle.api.provider.Provider import org.gradle.kotlin.dsl.assign import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies @@ -60,3 +62,16 @@ internal fun Project.configureAndroidCompose( rootProject.layout.projectDirectory.file("compose_compiler_config.conf") } } + +/** + * Checking a value of [propertyName] is true. + */ +private fun Project.isPropertyValueIsTrue(propertyName: String): Boolean = + providers.gradleProperty(propertyName).orNull.toBoolean() + +/** + * Creating a path where the [dir] will be created in. + */ +private fun Project.createPerModulePath(dir: String): Provider = provider { + isolated.rootProject.projectDirectory.dir("build/${projectDir.toRelativeString(rootDir)}/$dir") +} diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt index 1756cb52b..e45d7f2e1 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt @@ -19,22 +19,7 @@ package com.google.samples.apps.nowinandroid import org.gradle.api.Project import org.gradle.api.artifacts.VersionCatalog import org.gradle.api.artifacts.VersionCatalogsExtension -import org.gradle.api.file.Directory -import org.gradle.api.provider.Provider import org.gradle.kotlin.dsl.getByType val Project.libs get(): VersionCatalog = extensions.getByType().named("libs") - -/** - * Create new Directory by [dir] name in the root build directory. - */ -internal fun Project.relativeToRootProject(dir: String): Provider = - rootProject.layout.buildDirectory.dir(projectDir.toRelativeString(rootDir)) - .map { it.dir(dir) } - -/** - * Check a [propertyName]'s property value is true. - */ -internal fun Project.isPropertyValueIsTrue(propertyName: String): Boolean = - properties[propertyName].toString().toBoolean() From 42be7c7717ecc7fd26d64aee62d54e5ac3c47914 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 20 Dec 2024 22:44:13 +0900 Subject: [PATCH 07/12] Apply createPerModulePath method. Change-Id: Id398829fe7cef18a40fd8af81f865e2457ebb125 --- .../com/google/samples/apps/nowinandroid/AndroidCompose.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index d2b15b324..c9ea51d42 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -54,8 +54,8 @@ internal fun Project.configureAndroidCompose( extensions.configure { if (isPropertyValueIsTrue("enableComposeCompilerReportsAndMetrics")) { - metricsDestination = relativeToRootProject("compose-metrics") - reportsDestination = relativeToRootProject("compose-reports") + metricsDestination = createPerModulePath("compose-metrics") + reportsDestination = createPerModulePath("compose-reports") } stabilityConfigurationFile = From df2b6a3e9fd9cf1a813e0d61095adeab8c0fc451 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sat, 21 Dec 2024 17:19:28 +0900 Subject: [PATCH 08/12] Remove extensions and place in an inline function. Change-Id: Ib7b8ade051985dd6a3e698d562d420a67ca5e9c4 --- .../apps/nowinandroid/AndroidCompose.kt | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index e9ad2e922..0b8fdf33e 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -53,25 +53,21 @@ internal fun Project.configureAndroidCompose( } extensions.configure { - if (isPropertyValueIsTrue("enableComposeCompilerReportsAndMetrics")) { - metricsDestination = createPerModulePath("compose-metrics") - reportsDestination = createPerModulePath("compose-reports") + + val isComposeCompilerReportsAndMetricsEnabled = providers.gradleProperty("enableComposeCompilerReportsAndMetrics").orNull.toBoolean() + if (isComposeCompilerReportsAndMetricsEnabled) { + /** + * Set path where the `compose-metrics` and `compose-reports` + * being written up to the build/***modules-name***/[dir] location. + */ + fun setComposeMetricsAndReportLocation(dir: String) = + isolated.rootProject.projectDirectory.dir("build").dir(projectDir.toRelativeString(rootDir)).dir(dir) + + metricsDestination = setComposeMetricsAndReportLocation("compose-metrics") + reportsDestination = setComposeMetricsAndReportLocation("compose-reports") } stabilityConfigurationFiles .add(isolated.rootProject.projectDirectory.file("compose_compiler_config.conf")) } } - -/** - * Checking a value of [propertyName] is true. - */ -private fun Project.isPropertyValueIsTrue(propertyName: String): Boolean = - providers.gradleProperty(propertyName).orNull.toBoolean() - -/** - * Creating a path where the [dir] will be created in. - */ -private fun Project.createPerModulePath(dir: String): Provider = provider { - isolated.rootProject.projectDirectory.dir("build/${projectDir.toRelativeString(rootDir)}/$dir") -} From 3f271db2c5e3384bc0d8b9918eb554f089df03b1 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sat, 21 Dec 2024 17:26:41 +0900 Subject: [PATCH 09/12] Adjust save location path. Change-Id: I3bd98543d424f51493b4cc99c8bd677af61df787 --- .../com/google/samples/apps/nowinandroid/AndroidCompose.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 0b8fdf33e..131e76e7b 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -61,7 +61,7 @@ internal fun Project.configureAndroidCompose( * being written up to the build/***modules-name***/[dir] location. */ fun setComposeMetricsAndReportLocation(dir: String) = - isolated.rootProject.projectDirectory.dir("build").dir(projectDir.toRelativeString(rootDir)).dir(dir) + isolated.rootProject.projectDirectory.dir("build/${projectDir.toRelativeString(rootDir)}/$dir") metricsDestination = setComposeMetricsAndReportLocation("compose-metrics") reportsDestination = setComposeMetricsAndReportLocation("compose-reports") From 82a065ea1618d542ef51809117a66f13dfbb5edc Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sat, 21 Dec 2024 18:03:52 +0900 Subject: [PATCH 10/12] Remove unused import. Change-Id: I7394985e72fbd33636be2a6947802075e0a1a9c0 --- .../com/google/samples/apps/nowinandroid/AndroidCompose.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 131e76e7b..1aa4845f0 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -18,8 +18,6 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.dsl.CommonExtension import org.gradle.api.Project -import org.gradle.api.file.Directory -import org.gradle.api.provider.Provider import org.gradle.kotlin.dsl.assign import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies From d1877c003dd9087b0e1bbe2390fb234713d41777 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sat, 21 Dec 2024 18:15:02 +0900 Subject: [PATCH 11/12] Make location as `code block`. --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 2786efa6a..1c3cafad6 100644 --- a/README.md +++ b/README.md @@ -196,8 +196,7 @@ Run the following command to get and analyse compose compiler metrics: ./gradlew assembleRelease -PenableComposeCompilerReportsAndMetrics=true --rerun-tasks ``` -The reports files will be added to ***build/module-name/compose-reports***. The metrics files will also be -added to ***build/module-name/compose-metrics***. +The reports files will be added to `build/module-name/compose-reports`, and the metrics files will also be added to `build/module-name/compose-metrics`. For more information on Compose compiler metrics, see [this blog post](https://medium.com/androiddevelopers/jetpack-compose-stability-explained-79c10db270c8). From d679b2e60dbbe1fbeb963cb5fe68abd954029d13 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sun, 5 Jan 2025 12:33:46 +0900 Subject: [PATCH 12/12] Change function to `String` extension function. Change-Id: If5e6ecaac44dd065c6fbdabe8e7c7f9b0dea8ee5 --- .../samples/apps/nowinandroid/AndroidCompose.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 1aa4845f0..72981ce83 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -55,14 +55,14 @@ internal fun Project.configureAndroidCompose( val isComposeCompilerReportsAndMetricsEnabled = providers.gradleProperty("enableComposeCompilerReportsAndMetrics").orNull.toBoolean() if (isComposeCompilerReportsAndMetricsEnabled) { /** - * Set path where the `compose-metrics` and `compose-reports` - * being written up to the build/***modules-name***/[dir] location. + * Transform a [String] into a Directory where the `compose-metrics` and `compose-reports` + * being written, such as `build/modules-name/String`. */ - fun setComposeMetricsAndReportLocation(dir: String) = - isolated.rootProject.projectDirectory.dir("build/${projectDir.toRelativeString(rootDir)}/$dir") + fun String.toRelativeDirectoryForMetricsAndReport() = + isolated.rootProject.projectDirectory.dir("build/${projectDir.toRelativeString(rootDir)}/$this") - metricsDestination = setComposeMetricsAndReportLocation("compose-metrics") - reportsDestination = setComposeMetricsAndReportLocation("compose-reports") + metricsDestination = "compose-metrics".toRelativeDirectoryForMetricsAndReport() + reportsDestination = "compose-reports".toRelativeDirectoryForMetricsAndReport() } stabilityConfigurationFiles