/*
 * Copyright (C) 2020 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.
 */

import static androidx.build.dependencies.DependenciesKt.*
import androidx.build.LibraryGroups
import androidx.build.Publish
import androidx.build.SupportConfigKt

plugins {
    id("AndroidXPlugin")
    id("com.android.library")
    id("kotlin-android")
}

android {
    defaultConfig {
        // 18 needed for UI automator. While 28 is a theoretical minimum for Perfetto, we
        // currently leave this lower currently to enable optional usage.
        minSdkVersion 18
    }
    sourceSets {
        main.assets.srcDirs += new File(
                SupportConfigKt.getPrebuiltsRoot(project),
                "androidx/traceprocessor/trace_processor_shell"
        )
    }
}

dependencies {
    api(JUNIT)
    api(KOTLIN_STDLIB)
    api("androidx.annotation:annotation:1.1.0")

    implementation(project(":benchmark:benchmark-common"))
    implementation(ANDROIDX_TEST_CORE)
    implementation(ANDROIDX_TEST_UIAUTOMATOR)
    implementation(ANDROIDX_TEST_RULES)

    androidTestImplementation(project(":internal-testutils-ktx"))
    androidTestImplementation(project(":tracing:tracing-ktx"))
    androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
    androidTestImplementation(ANDROIDX_TEST_RUNNER)
    androidTestImplementation(KOTLIN_TEST)
}

androidx {
    name = "Android Benchmark - Macrobenchmark"
    publish = Publish.SNAPSHOT_ONLY
    mavenGroup = LibraryGroups.BENCHMARK
    inceptionYear = "2020"
    description = "Android Benchmark - Macrobenchmark"
}

// Define a task dependency so the app is installed before we run macro benchmarks.
tasks.getByPath(":benchmark:benchmark-macro-junit4:connectedCheck")
        .dependsOn(
                tasks.getByPath(
                        ":benchmark:integration-tests:macrobenchmark-target:installRelease"
                )
        )