// Copyright (C) 2025 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_base_license"],
}

android_test {
    name: "AppMemoryTestCases",
    team: "trendy_team_system_performance",
    srcs: ["src/**/*.java"],
    static_libs: [
        "androidx.test.rules",
        "androidx.test.core",
        "platform-test-annotations",
        "flag-junit",
        "androidx.test.uiautomator_uiautomator",
        "collector-device-lib",
    ],
    device_common_data: [
        ":AppMemoryTest_Helper",
    ],
    data: [
        "perfetto.textproto",
    ],
    platform_apis: true,
    test_suites: [
        "device-tests",
        "performance-tests",
    ],
    test_config: "AppMemoryTest.xml",
    certificate: "platform",
}

// Generate code to artificially bloat the test helper app.
// This is to add enough code to the app so that its size is representative of
// a real large app.
genrule {
    name: "AppMemoryTest_Helper_gen_sources",
    tool_files: ["generate_java_sources.sh"],
    cmd: "bash $(location generate_java_sources.sh) 5000 100 $(genDir) $(out)",
    out: ["generated_sources.srcjar"],
}

// Generate resources to artificially bloat the test helper app.
genrule {
    name: "AppMemoryTest_Helper_gen_resources",
    tool_files: ["generate_resources.sh"],
    cmd: "bash $(location generate_resources.sh) 100 1000 $(genDir) $(out)",
    out: ["generated_resources.zip"],
}

android_test_helper_app {
    name: "AppMemoryTest_Helper",
    manifest: "app/AndroidManifest.xml",
    srcs: [
        "app/src/**/*.java",
        ":AppMemoryTest_Helper_gen_sources",
    ],
    resource_zips: [":AppMemoryTest_Helper_gen_resources"],
    test_suites: ["general-tests"],
    certificate: "platform",
    dex_preopt: {
        enabled: false,
    },

    // Intentionally disable optimizations.
    // Otherwise the generated bloat will be stripped.
    optimize: {
        enabled: false,
    },

    // This prevents the use of dex version 041, which was introduced in API 35.
    // Until dex version 041, large programs would span multiple physical dex
    // files. This increased their static load in memory, for instance by
    // requiring the runtime to have multiple PathClassLoader instances and
    // multiple runtime dex caches.
    // This is the common behavior in apps in the market today, so we would like
    // to simulate it in our test load.
    min_sdk_version: "34",
}

filegroup {
    name: "appmemorytest_perfetto_config",
    srcs: ["perfetto.textproto"],
}

filegroup {
    name: "appmemorytest_metrics_artifacts",
    srcs: [
        "metrics/appmemorytest_binder_transactions.textproto",
        "metrics/appmemorytest_native_allocations.textproto",
    ],
}

prebuilt_etc {
    name: "appmemorytest_binder_transactions.textproto",
    src: "metrics/appmemorytest_binder_transactions.textproto",
}

prebuilt_etc {
    name: "appmemorytest_native_allocations.textproto",
    src: "metrics/appmemorytest_native_allocations.textproto",
}
