# This configuration is written in python and used by app_profiler.py.

import os
import os.path

# The name of the android package, like com.example.android.
app_package_name = "com.example.android"


# Path of android studio project. It is used to find debug version of native shared libraries.
# Set to "" if not available.
android_studio_project_dir = ""


# Path to find debug version of native shared libraries.
native_lib_dir = ""

if android_studio_project_dir and not native_lib_dir:
    tmp_dir = os.path.join(android_studio_project_dir,
        "app/build/intermediates/binaries/debug".replace('/', os.sep))
    if os.path.isdir(tmp_dir):
        native_lib_dir = tmp_dir


# The path of the apk file. It is used when we need to reinstall the app to
# fully compile dalvik bytecode into native instructions.
# Set to "" if not available.
apk_file_path = ""


# To profile java code, we need to compile dalvik bytecode into native binaries
# with debug information. Set to False if there is no need to do so (For example,
# when the app has been recompiled.).
recompile_app = True


# If launch_activity is specified, we use `am start -n [app_package_name]/[launch_activity]` to start the app.
launch_activity = '.MainActivity'

# If launch_activity is not set, and launch_inst_test is, we launch an instrumentation test:
# `am instrument -e class [launch_inst_test] [app_package_name]/android.support.test.runner.AndroidJUnitRunner`
# Generally, will be of the form 'com.example.MyTestClass#myTestMethod'
launch_inst_test = ''


if recompile_app and not launch_activity and not launch_inst_test:
    raise Exception('one of [launch_activity or launch_inst_test] is'
        + 'needed for [recompile_app] to take effect.')


# Profiling record options that will be passed directly to `simpleperf record` command on device.
# As we can't stop profiling by Ctrl-C, we need to set how long to profile using "--duration".
record_options = "-e cpu-cycles:u -f 4000 -g --duration 10"


# The path to store generated perf.data on host.
perf_data_path = "perf.data"


# The path of adb.
adb_path = "adb"


# The path of readelf, used to read build id of files in binary cache.
# Set to "" if not available.
readelf_path = "readelf"


# binary_cache_dir is used to cache binaries pulled from device. To report precisely, we pull each
# binary hit by perf.data on host.
binary_cache_dir = "binary_cache"
