#!/bin/bash
# Copyright (C) 2019 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.

source $(dirname ${BASH_SOURCE[0]})/common.sh

# Save CI time by skipping runs on {UI,docs,infra}-only changes
if [[ $UI_DOCS_INFRA_ONLY_CHANGE == 1 ]]; then
echo "Detected non-code change, probably a UI-only change."
echo "skipping build + test runs"
exit 0
fi

# Run the emulator earlier so by the time we build it's booted.
# tools/run_android_test will perform a wait-for-device. This is just an
# optimization to remove bubbles in the pipeline.
tools/run_android_emulator --pid /tmp/emulator.pid -v &

tools/gn gen ${OUT_PATH} --args="${PERFETTO_TEST_GN_ARGS}" --check
tools/ninja -C ${OUT_PATH} ${PERFETTO_TEST_NINJA_ARGS}

# run_android_test takes long time to push the test_data files. Do that only
# once and avoid re-pushing for each type of test.
tools/run_android_test -n ${OUT_PATH} perfetto_unittests
tools/run_android_test -n -x ${OUT_PATH} perfetto_integrationtests
tools/run_android_test -n -x --env BENCHMARK_FUNCTIONAL_TEST_ONLY=true \
  ${OUT_PATH} perfetto_benchmarks

test -f /tmp/emulator.pid && kill -9 $(cat /tmp/emulator.pid); true
