diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml deleted file mode 100644 index 31b274d7f2..0000000000 --- a/.github/workflows/Build.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: Benchmark on Emulator - -on: - workflow_dispatch: - -jobs: - benchmark-android: - uses: Frozen-Bytes/actions/.github/workflows/android-macrobenchmark-gradle.yml@main - with: - api-level: 31 - target: google_apis - arch: x86_64 - force-avd-creation: true - emulator-options: -no-snapshot -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -memory 4096 - disable-animations: true - gradle-cache-readonly: false - instrument-args: "-e class com.google.samples.apps.nowinandroid.startup.StartupBenchmark#startupPrecompiledWithBaselineProfile" diff --git a/.github/workflows/NightlyBaselineProfiles.yaml b/.github/workflows/NightlyBaselineProfiles.yaml deleted file mode 100644 index 120833b248..0000000000 --- a/.github/workflows/NightlyBaselineProfiles.yaml +++ /dev/null @@ -1,66 +0,0 @@ -name: NightlyBaselineProfiles - -on: - workflow_dispatch: - # schedule: - # - cron: '42 4 * * *' - -jobs: - baseline_profiles: - name: "Generate Baseline Profiles" - if: github.repository == 'android/nowinandroid' - runs-on: ubuntu-latest - - permissions: - contents: write - - timeout-minutes: 60 - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Enable KVM group perms - run: | - echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules - sudo udevadm control --reload-rules - sudo udevadm trigger --name-match=kvm - ls /dev/kvm - - - name: Copy CI gradle.properties - run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - - - name: Set up JDK 17 - uses: actions/setup-java@v5 - with: - distribution: 'zulu' - java-version: 17 - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - with: - cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} - build-scan-publish: true - build-scan-terms-of-use-url: "https://gradle.com/terms-of-service" - build-scan-terms-of-use-agree: "yes" - - - name: Setup Android SDK - uses: android-actions/setup-android@v3 - - - name: Accept licenses - run: yes | sdkmanager --licenses || true - - - name: Check build-logic - run: ./gradlew :build-logic:convention:check - - - name: Setup GMD - run: ./gradlew :benchmarks:pixel6Api33Setup - --info - -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true - -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" - - - name: Build all build type and flavor permutations including baseline profiles - run: ./gradlew :app:assemble - -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=baselineprofile - -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" - -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml deleted file mode 100644 index e890bb5a70..0000000000 --- a/.github/workflows/Release.yml +++ /dev/null @@ -1,82 +0,0 @@ -name: GitHub Release with APKs - -on: - workflow_dispatch: - push: - tags: - - 'v*' - -jobs: - build: - if: github.repository == 'android/nowinandroid' - runs-on: ubuntu-latest - timeout-minutes: 120 - - steps: - - name: Enable KVM group perms - run: | - echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules - sudo udevadm control --reload-rules - sudo udevadm trigger --name-match=kvm - ls /dev/kvm - - - name: Checkout - - uses: actions/checkout@v4 - - - name: Copy CI gradle.properties - run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - - - name: Set up JDK 17 - uses: actions/setup-java@v5 - with: - distribution: 'zulu' - java-version: 17 - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - with: - cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} - build-scan-publish: true - build-scan-terms-of-use-url: "https://gradle.com/terms-of-service" - build-scan-terms-of-use-agree: "yes" - - - name: Setup Android SDK - uses: android-actions/setup-android@v3 - - - name: Accept licenses - run: yes | sdkmanager --licenses || true - - - name: Setup GMD - run: ./gradlew :benchmarks:pixel6Api33Setup - --info - -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true - -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" - - - name: Build release variant including baseline profile generation - run: ./gradlew :app:assembleDemoRelease - -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile - -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" - -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true - -Pandroid.experimental.androidTest.numManagedDeviceShards=1 - -Pandroid.experimental.testOptions.managedDevices.maxConcurrentDevices=1 - - name: Create Release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: ${{ github.ref }} - draft: true - prerelease: false - - - name: Upload app - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: app/build/outputs/apk/demo/release/app-demo-release.apk - asset_name: app-demo-release.apk - asset_content_type: application/vnd.android.package-archive diff --git a/.github/workflows/performance-check.yaml b/.github/workflows/performance-check.yaml new file mode 100644 index 0000000000..3b4ce7cf37 --- /dev/null +++ b/.github/workflows/performance-check.yaml @@ -0,0 +1,53 @@ +name: Performance Check + +on: + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + +jobs: + benchmark-android: + uses: Frozen-Bytes/actions/.github/workflows/android-macrobenchmark-gradle.yml@v3 + strategy: + fail-fast: false + matrix: + include: + - name: "Pixel" + profile: "pixel" + - name: "Nexus_6" + profile: "Nexus 6" + name: ${{ matrix.name }} + with: + api-level: 34 + target: google_apis + arch: x86_64 + profile: "${{ matrix.profile }}" + gradle-cache-readonly: false + baseline-branch: "main" + candidate-branch: "${{ github.head_ref }}" + instrument-args: "-e package com.google.samples.apps.nowinandroid.Generator" + artifact-name: "benchcomp-${{ matrix.name }}.json" + artifact-macrobenchmark-name: "${{ matrix.name }}-raw-macrobenchmark" + device-alias: "${{ matrix.name }}" + + publish-report: + runs-on: ubuntu-latest + needs: benchmark-android + permissions: + pull-requests: write + contents: read + + steps: + - name: Create Bot Token + id: app-token + uses: actions/create-github-app-token@v3 + with: + client-id: ${{ vars.GH_APP_CLIENT_ID }} + private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} + + - name: Publish Report + uses: Frozen-Bytes/actions/publish-report@v3 + with: + github-token: ${{ steps.app-token.outputs.token }} + artifact-prefix: "benchcomp-" + comment-on-pr: ${{ github.event_name == 'pull_request' && 'true' || 'false' }} diff --git a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt index e899829a66..c528816007 100644 --- a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt @@ -47,7 +47,7 @@ class ScrollForYouFeedBenchmark { packageName = PACKAGE_NAME, metrics = listOf(FrameTimingMetric()), compilationMode = compilationMode, - iterations = 5, + iterations = 2, startupMode = StartupMode.WARM, setupBlock = { // Start the app @@ -68,7 +68,7 @@ class ScrollForYouFeedBenchmark { packageName = PACKAGE_NAME, metrics = listOf(MemoryUsageMetric(MemoryUsageMetric.Mode.Max)), compilationMode = compilationMode, - iterations = 5, + iterations = 2, startupMode = StartupMode.WARM, setupBlock = { // Start the app diff --git a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt index 4be72783ba..f2c29f6d6e 100644 --- a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt @@ -42,7 +42,7 @@ class ScrollTopicListBenchmark { packageName = PACKAGE_NAME, metrics = listOf(FrameTimingMetric()), compilationMode = compilationMode, - iterations = 5, + iterations = 2, startupMode = StartupMode.WARM, setupBlock = { // Start the app diff --git a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt index 43b2ecec1c..aea22bb2b5 100644 --- a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt @@ -42,7 +42,7 @@ class TopicsScreenRecompositionBenchmark { packageName = PACKAGE_NAME, metrics = listOf(FrameTimingMetric()), compilationMode = compilationMode, - iterations = 5, + iterations = 2, startupMode = StartupMode.WARM, setupBlock = { // Start the app diff --git a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt index c979beeba0..73e9d745a3 100644 --- a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt @@ -61,7 +61,7 @@ class StartupBenchmark { metrics = BaselineProfileMetrics.allMetrics, compilationMode = compilationMode, // More iterations result in higher statistical significance. - iterations = 5, + iterations = 2, startupMode = COLD, setupBlock = { pressHome()