blob: fb957e2007828557adba7f32a5b95245ed7adb9a [file] [log] [blame]
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Android Multiple Workloads - complex example\n",
"\n",
"This complex example shows multiple workloads being executed in multiple configurations.\n",
"\n",
"Please check the notebooks in **examples/android/benchmarks/** and **examples/android/workloads/** to get more details on each of the possible workloads and how you can visualise their results."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2016-12-09 17:56:46,425 INFO : root : Using LISA logging configuration:\n",
"2016-12-09 17:56:46,426 INFO : root : /home/vagrant/lisa/logging.conf\n"
]
}
],
"source": [
"import logging\n",
"from conf import LisaLogging\n",
"LisaLogging.setup()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline\n",
"\n",
"import collections\n",
"import copy\n",
"import json\n",
"import os\n",
"from time import sleep\n",
"\n",
"# Support to access the remote target\n",
"import devlib\n",
"from env import TestEnv\n",
"\n",
"# from devlib.utils.android import adb_command\n",
"\n",
"# Import support for Android devices\n",
"from android import Screen, Workload, System\n",
"\n",
"# Support for trace events analysis\n",
"from trace import Trace\n",
"\n",
"# Suport for FTrace events parsing and visualization\n",
"import trappy\n",
"\n",
"import datetime"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Support Functions"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def set_performance():\n",
" target.cpufreq.set_all_governors('performance')\n",
"\n",
"def set_powersave():\n",
" target.cpufreq.set_all_governors('powersave')\n",
"\n",
"def set_interactive():\n",
" target.cpufreq.set_all_governors('interactive')\n",
"\n",
"def set_sched():\n",
" target.cpufreq.set_all_governors('sched')\n",
"\n",
"def set_ondemand():\n",
" target.cpufreq.set_all_governors('ondemand')\n",
" \n",
" for cpu in target.list_online_cpus():\n",
" tunables = target.cpufreq.get_governor_tunables(cpu)\n",
" target.cpufreq.set_governor_tunables(\n",
" cpu,\n",
" 'ondemand',\n",
" **{'sampling_rate' : tunables['sampling_rate_min']}\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def experiment(wl, res_dir, conf_name, wload_name, collect=''):\n",
" \n",
" ##################################\n",
" # Initial setup\n",
"\n",
" # Load workload params\n",
" wload_kind = wload_name.split()[0]\n",
" iterations = int(wload_name.split()[1])\n",
" wload_tag = wload_name.split()[2]\\\n",
" .replace('https://youtu.be/', '')\\\n",
" .replace('?t=', '_')\n",
" \n",
" # Check for workload being available\n",
" wload = Workload.get(te, wload_kind)\n",
" if not wload:\n",
" return {}\n",
" \n",
" # Setup test results folder\n",
" exp_dir = os.path.join(res_dir, conf_name, \"{}_{}\".format(wload_kind, wload_tag))\n",
" os.system('mkdir -p {}'.format(exp_dir));\n",
"\n",
" # Configure governor\n",
" confs[conf_name]['set']()\n",
" \n",
" # Unlock device screen (assume no password required)\n",
" target.execute('input keyevent 82')\n",
" # Configure screen to max brightness and no dimming\n",
" Screen.set_brightness(target, percent=100)\n",
" Screen.set_dim(target, auto=False)\n",
" Screen.set_timeout(target, 60*60*10) # 10 hours should be enought for an experiment\n",
" \n",
" ####################################\n",
" # Start the required tracing command\n",
" \n",
" if 'ftrace' in collect:\n",
" # Start FTrace and Energy monitoring\n",
" te.ftrace.start()\n",
" elif 'systrace' in collect:\n",
" # Get the systrace time\n",
" match = re.search(r'systrace_([0-9]+)', collect)\n",
" if match:\n",
" systrace_time = match.group(1)\n",
" else:\n",
" logging.warning(\"Systrace time NOT defined, tracing for 10[s]\")\n",
" systrace_time = 10\n",
" # Start systrace\n",
" trace_file = os.path.join(te.res_dir, 'trace.html')\n",
" systrace_output = System.systrace_start(te, trace_file, systrace_time)\n",
" \n",
" \n",
" ###########################\n",
" # Run the required workload\n",
" \n",
" # Jankbench\n",
" if 'Jankbench' in wload_name:\n",
" db_file, nrg_report = wload.run(exp_dir, wload_tag, iterations, collect)\n",
"\n",
" # UiBench\n",
" elif 'UiBench' in wload_name:\n",
" test_name = wload_name.split()[2]\n",
" duration_s = int(wload_name.split()[3])\n",
" db_file, nrg_report = wload.run(exp_dir, test_name, duration_s)\n",
"\n",
" # YouTube\n",
" elif 'YouTube' in wload_name:\n",
" video_url = wload_name.split()[2]\n",
" video_duration_s = int(wload_name.split()[3])\n",
" db_file, nrg_report = wload.run(exp_dir, video_url, video_duration_s)\n",
"\n",
" # RTApp based workloads\n",
" elif 'RTApp' in wload_name:\n",
" rtapp_kind = wload_name.replace('RTApp ', '')\n",
" db_file, nrg_report = rtapp_run(rtapp_kind)\n",
"\n",
" \n",
" ###########################\n",
" # Reset and return results\n",
"\n",
" # Stop the required trace command\n",
" if 'ftrace' in collect:\n",
" te.ftrace.stop()\n",
" # Collect and keep track of the trace\n",
" trace_file = os.path.join(exp_dir, 'trace.dat')\n",
" te.ftrace.get_trace(trace_file)\n",
" elif 'systrace' in collect:\n",
" if systrace_output:\n",
" logging.info('Waiting systrace report [%s]...', trace_file)\n",
" systrace_output.wait()\n",
" else:\n",
" logging.warning('Systrace is not running!')\n",
"\n",
" # Reset screen brightness and auto dimming\n",
" Screen.set_defaults(target)\n",
" \n",
" # Dump platform descriptor\n",
" te.platform_dump(exp_dir)\n",
"\n",
" # return all the experiment data\n",
" if 'trace' in collect:\n",
" return {\n",
" 'dir' : exp_dir,\n",
" 'db_file' : db_file,\n",
" 'nrg_report' : nrg_report,\n",
" 'trace_file' : trace_file,\n",
" }\n",
" else:\n",
" return {\n",
" 'dir' : exp_dir,\n",
" 'db_file' : db_file,\n",
" 'nrg_report' : nrg_report,\n",
" 'nrg_file' : nrg_file,\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def run_experiments(test_confs, wloads, confs, verbose=False):\n",
"\n",
" # Make sure we have a list of configuraitons to test\n",
" if not isinstance(test_confs, list):\n",
" test_confs = [test_confs]\n",
"\n",
" # Intialize Workloads for this test environment\n",
" wl = Workload(te)\n",
"\n",
" # Change to info once the notebook runs ok\n",
" if verbose:\n",
" LisaLogging.setup(level=logging.DEBUG)\n",
" else:\n",
" LisaLogging.setup(level=logging.INFO)\n",
"\n",
" # The set of results for each comparison test\n",
" results = collections.defaultdict(dict)\n",
"\n",
" # Run the benchmark in all the configured configurations\n",
" for conf_name in test_confs:\n",
"\n",
" # Setup data to be collected\n",
" try:\n",
" collect = confs[conf_name]['collect']\n",
" logging.info(\"Enabling collection of: %s\", collect)\n",
" except:\n",
" collect = ''\n",
"\n",
" # Enable energy collection only if an emeter has been configured\n",
" if 'energy' in collect:\n",
" if 'emeter' not in my_conf or not te.emeter:\n",
" logging.warning('Disabling ENERGY collection')\n",
" logging.info('EMeter not configured or not available')\n",
" collect = collect.replace('energy', '')\n",
" else:\n",
" logging.debug('Enabling ENERGY collection')\n",
"\n",
" # Run each workload\n",
" idx = 0\n",
" for wload_name in wloads:\n",
" \n",
" # Skip workload if not enabled by the configuration\n",
" try:\n",
" enabled = False\n",
" enabled_workloads = confs[conf_name]['wloads']\n",
" for wload in enabled_workloads:\n",
" if wload in wload_name:\n",
" enabled = True\n",
" break\n",
" if not enabled:\n",
" logging.debug('Workload [%s] disabled',\n",
" wload_name)\n",
" continue\n",
" except:\n",
" # No workload filters defined, execute all workloads\n",
" logging.debug('All workloads enabled')\n",
" pass\n",
"\n",
" # Log test being executed\n",
" idx = idx + 1\n",
" wload_kind = wload_name.split()[0]\n",
" logging.info('------------------------')\n",
" logging.info('Test %d: %s in %s configuration',\n",
" idx, wload_kind.upper(), conf_name.upper())\n",
" logging.info(' %s', wload_name)\n",
" \n",
" res = experiment(wl, te.res_dir, conf_name, wload_name, collect)\n",
" results[conf_name][wload_name] = copy.deepcopy(res)\n",
"\n",
" # Save collected results\n",
" res_file = os.path.join(te.res_dir, conf_name, 'results.json')\n",
" with open(res_file, 'w') as fh:\n",
" json.dump(results[conf_name], fh, indent=4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test environment setup\n",
"For more details on this please check out **examples/utils/testenv_example.ipynb**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**devlib** requires the ANDROID_HOME environment variable configured to point to your local installation of the Android SDK. If you have not this variable configured in the shell used to start the notebook server, you need to run a cell to define where your Android SDK is installed or specify the ANDROID_HOME in your target configuration."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In case more than one Android device are conencted to the host, you must specify the ID of the device you want to target in **my_target_conf**. Run **adb devices** on your host to get the ID."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Setup target configuration\n",
"my_conf = {\n",
"\n",
" # Target platform and board\n",
" \"platform\" : 'android',\n",
" \"device\" : \"HT6670300102\",\n",
" \"ANDROID_HOME\" : '/home/vagrant/lisa/tools/android-sdk-linux/',\n",
"\n",
" # Folder where all the results will be collected\n",
" \"results_dir\" : \"Android_Multiple_Workloads\",\n",
"\n",
" # Define devlib modules to load\n",
" \"modules\" : [\n",
" 'cpufreq' # enable CPUFreq support\n",
" ],\n",
"\n",
" # FTrace events to collect for all the tests configuration which have\n",
" # the \"ftrace\" flag enabled\n",
" \"ftrace\" : {\n",
" \"events\" : [\n",
" \"sched_switch\",\n",
" \"sched_overutilized\",\n",
" \"sched_contrib_scale_f\",\n",
" \"sched_load_avg_cpu\",\n",
" \"sched_load_avg_task\",\n",
" \"sched_tune_tasks_update\",\n",
" \"sched_boost_cpu\",\n",
" \"sched_boost_task\",\n",
" \"sched_energy_diff\",\n",
" \"cpu_frequency\",\n",
" \"cpu_idle\",\n",
" \"cpu_capacity\",\n",
" ],\n",
" \"buffsize\" : 10 * 1024,\n",
" },\n",
"\n",
" # Tools required by the experiments\n",
" \"tools\" : [ 'trace-cmd' ],\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# List of possible workloads to run, each workload consists of a workload name\n",
"# followed by a list of workload specific parameters\n",
"test_wloads = [\n",
"# YouTube workload:\n",
"# Params:\n",
"# - iterations: number of read/write operations to execute\n",
"# - URL: link to the video to use (with optional start time)\n",
"# - duration: playback time in [s]\n",
" 'YouTube 1 https://youtu.be/XSGBVzeBUbk?t=45s 60',\n",
"\n",
"# Jankbench workload:\n",
"# Params:\n",
"# - iterations: number of read/write operations to execute\n",
"# - id: benchmakr to run\n",
" 'Jankbench 1 list_view',\n",
" 'Jankbench 1 image_list_view',\n",
" 'Jankbench 1 shadow_grid',\n",
" 'Jankbench 1 low_hitrate_text',\n",
" 'Jankbench 1 high_hitrate_text',\n",
" 'Jankbench 1 edit_text',\n",
" \n",
" # Multi iterations\n",
" 'Jankbench 3 list_view',\n",
" 'Jankbench 3 image_list_view',\n",
" 'Jankbench 3 shadow_grid',\n",
" 'Jankbench 3 low_hitrate_text',\n",
" 'Jankbench 3 high_hitrate_text',\n",
" 'Jankbench 3 edit_text',\n",
"\n",
"# UiBench workload:\n",
"# Params:\n",
"# - test_name: The name of the test to start\n",
"# - duration: playback time in [s]\n",
" 'UiBench 1 TrivialAnimation 10',\n",
"\n",
"# RT-App workload:\n",
"# Params:\n",
"# - configration: tasks configuration to run\n",
"# - [configuration specific parameters]\n",
" 'RTApp STAccount 6',\n",
" 'RTApp RAMP',\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Available test configurations\n",
"# 'set' : a setup function to be called before starting the test\n",
"# 'collect' defines what we want to collect as a list of strings.\n",
"# Supported values are\n",
"# energy - Use the my_conf's defined emeter to measure energy consumption across experiments\n",
"# ftrace - Collect an execution trace using trace-cmd\n",
"# systrace - Collect an execution trace using Systrace/Atrace\n",
"# NOTE: energy is automatically enabled in case an \"emeter\" configuration is defined in my_conf\n",
"\n",
"confs = {\n",
" 'std' : {\n",
" 'set' : set_interactive,\n",
" 'wloads' : ['Jankbench 1 list_view'],\n",
" 'collect' : 'ftrace',\n",
" },\n",
" 'eas' : {\n",
" 'set' : set_sched,\n",
" 'wloads' : ['Jankbench 1 list_view'],\n",
" 'collect' : 'ftrace',\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# List of experiments to run\n",
"experiments = ['std', 'eas']"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2016-12-09 17:56:54,280 INFO : TestEnv : Using base path: /home/vagrant/lisa\n",
"2016-12-09 17:56:54,282 INFO : TestEnv : Loading custom (inline) target configuration\n",
"2016-12-09 17:56:54,283 INFO : TestEnv : External tools using:\n",
"2016-12-09 17:56:54,284 INFO : TestEnv : ANDROID_HOME: /home/vagrant/lisa/tools/android-sdk-linux/\n",
"2016-12-09 17:56:54,284 INFO : TestEnv : CATAPULT_HOME: /home/vagrant/lisa/tools/catapult\n",
"2016-12-09 17:56:54,284 INFO : TestEnv : Devlib modules to load: ['cpufreq']\n",
"2016-12-09 17:56:54,285 INFO : TestEnv : Connecting Android target [HT6670300102]\n",
"2016-12-09 17:56:54,285 INFO : TestEnv : Connection settings:\n",
"2016-12-09 17:56:54,286 INFO : TestEnv : {'device': 'HT6670300102'}\n",
"2016-12-09 17:56:54,468 INFO : android : ls command is set to ls -1\n",
"2016-12-09 17:56:55,511 INFO : TestEnv : Initializing target workdir:\n",
"2016-12-09 17:56:55,513 INFO : TestEnv : /data/local/tmp/devlib-target\n",
"2016-12-09 17:56:58,803 INFO : TestEnv : Topology:\n",
"2016-12-09 17:56:58,806 INFO : TestEnv : [[0, 1], [2, 3]]\n",
"2016-12-09 17:56:59,847 INFO : TestEnv : Enabled tracepoints:\n",
"2016-12-09 17:56:59,848 INFO : TestEnv : sched_switch\n",
"2016-12-09 17:56:59,848 INFO : TestEnv : sched_overutilized\n",
"2016-12-09 17:56:59,848 INFO : TestEnv : sched_contrib_scale_f\n",
"2016-12-09 17:56:59,849 INFO : TestEnv : sched_load_avg_cpu\n",
"2016-12-09 17:56:59,849 INFO : TestEnv : sched_load_avg_task\n",
"2016-12-09 17:56:59,850 INFO : TestEnv : sched_tune_tasks_update\n",
"2016-12-09 17:56:59,850 INFO : TestEnv : sched_boost_cpu\n",
"2016-12-09 17:56:59,850 INFO : TestEnv : sched_boost_task\n",
"2016-12-09 17:56:59,851 INFO : TestEnv : sched_energy_diff\n",
"2016-12-09 17:56:59,852 INFO : TestEnv : cpu_frequency\n",
"2016-12-09 17:56:59,854 INFO : TestEnv : cpu_idle\n",
"2016-12-09 17:56:59,855 INFO : TestEnv : cpu_capacity\n",
"2016-12-09 17:56:59,856 INFO : TestEnv : Set results folder to:\n",
"2016-12-09 17:56:59,856 INFO : TestEnv : /home/vagrant/lisa/results/Android_Multiple_Workloads\n",
"2016-12-09 17:56:59,857 INFO : TestEnv : Experiment results available also in:\n",
"2016-12-09 17:56:59,857 INFO : TestEnv : /home/vagrant/lisa/results_latest\n"
]
}
],
"source": [
"# Initialize a test environment using:\n",
"te = TestEnv(my_conf, wipe=False)\n",
"target = te.target"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Workloads Execution and Data Collection"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2016-12-09 17:57:12,090 INFO : Workload : Workloads available on target:\n",
"2016-12-09 17:57:12,093 INFO : Workload : ['YouTube', 'Jankbench', 'UiBench']\n",
"2016-12-09 17:57:12,098 INFO : root : Using LISA logging configuration:\n",
"2016-12-09 17:57:12,099 INFO : root : /home/vagrant/lisa/logging.conf\n",
"2016-12-09 17:57:12,101 INFO : root : Enabling collection of: ftrace\n",
"2016-12-09 17:57:12,102 DEBUG : root : Workload [YouTube 1 https://youtu.be/XSGBVzeBUbk?t=45s 60] disabled\n",
"2016-12-09 17:57:12,103 INFO : root : ------------------------\n",
"2016-12-09 17:57:12,104 INFO : root : Test 1: JANKBENCH in STD configuration\n",
"2016-12-09 17:57:12,104 INFO : root : Jankbench 1 list_view\n",
"2016-12-09 17:57:12,105 DEBUG : Jankbench : Workload created\n",
"2016-12-09 17:57:13,628 INFO : Screen : Set brightness: 100%\n",
"2016-12-09 17:57:14,052 INFO : Screen : Dim screen mode: OFF\n",
"2016-12-09 17:57:14,495 INFO : Screen : Screen timeout: 36000 [s]\n",
"2016-12-09 17:57:18,243 INFO : Screen : Force manual orientation\n",
"2016-12-09 17:57:18,245 INFO : Screen : Set orientation: PORTRAIT\n",
"2016-12-09 17:57:19,220 DEBUG : Jankbench : Start Jank Benchmark [0:list_view]\n",
"2016-12-09 17:57:19,222 INFO : Jankbench : am start -n \"com.android.benchmark/.app.RunLocalBenchmarksActivity\" --eia \"com.android.benchmark.EXTRA_ENABLED_BENCHMARK_IDS\" 0 --ei \"com.android.benchmark.EXTRA_RUN_COUNT\" 1\n",
"2016-12-09 17:57:19,672 INFO : Jankbench : adb -s HT6670300102 logcat ActivityManager:* System.out:I *:S BENCH:*\n",
"2016-12-09 17:57:19,673 DEBUG : Jankbench : Iterations:\n",
"2016-12-09 17:57:19,763 DEBUG : Jankbench : Benchmark started!\n",
"2016-12-09 17:57:20,781 DEBUG : Jankbench : Iteration 1:\n",
"2016-12-09 17:57:54,518 INFO : Jankbench : Mean: 54.182 JankP: 0.061 StdDev: 0.000 Count Bad: 1 Count Jank: 1\n",
"2016-12-09 17:57:55,554 DEBUG : Jankbench : Benchmark done!\n",
"2016-12-09 17:57:57,168 INFO : Screen : Set orientation: AUTO\n",
"2016-12-09 17:58:08,777 INFO : Screen : Set orientation: AUTO\n",
"2016-12-09 17:58:10,025 INFO : Screen : Set brightness: AUTO\n",
"2016-12-09 17:58:10,439 INFO : Screen : Dim screen mode: ON\n",
"2016-12-09 17:58:10,869 INFO : Screen : Screen timeout: 30 [s]\n",
"2016-12-09 17:58:10,871 DEBUG : root : Workload [Jankbench 1 image_list_view] disabled\n",
"2016-12-09 17:58:10,871 DEBUG : root : Workload [Jankbench 1 shadow_grid] disabled\n",
"2016-12-09 17:58:10,872 DEBUG : root : Workload [Jankbench 1 low_hitrate_text] disabled\n",
"2016-12-09 17:58:10,873 DEBUG : root : Workload [Jankbench 1 high_hitrate_text] disabled\n",
"2016-12-09 17:58:10,873 DEBUG : root : Workload [Jankbench 1 edit_text] disabled\n",
"2016-12-09 17:58:10,874 DEBUG : root : Workload [Jankbench 3 list_view] disabled\n",
"2016-12-09 17:58:10,875 DEBUG : root : Workload [Jankbench 3 image_list_view] disabled\n",
"2016-12-09 17:58:10,875 DEBUG : root : Workload [Jankbench 3 shadow_grid] disabled\n",
"2016-12-09 17:58:10,876 DEBUG : root : Workload [Jankbench 3 low_hitrate_text] disabled\n",
"2016-12-09 17:58:10,877 DEBUG : root : Workload [Jankbench 3 high_hitrate_text] disabled\n",
"2016-12-09 17:58:10,877 DEBUG : root : Workload [Jankbench 3 edit_text] disabled\n",
"2016-12-09 17:58:10,878 DEBUG : root : Workload [UiBench 1 TrivialAnimation 10] disabled\n",
"2016-12-09 17:58:10,879 DEBUG : root : Workload [RTApp STAccount 6] disabled\n",
"2016-12-09 17:58:10,879 DEBUG : root : Workload [RTApp RAMP] disabled\n",
"2016-12-09 17:58:10,880 INFO : root : Enabling collection of: ftrace\n",
"2016-12-09 17:58:10,880 DEBUG : root : Workload [YouTube 1 https://youtu.be/XSGBVzeBUbk?t=45s 60] disabled\n",
"2016-12-09 17:58:10,881 INFO : root : ------------------------\n",
"2016-12-09 17:58:10,881 INFO : root : Test 1: JANKBENCH in EAS configuration\n",
"2016-12-09 17:58:10,881 INFO : root : Jankbench 1 list_view\n",
"2016-12-09 17:58:10,882 DEBUG : Jankbench : Workload created\n",
"2016-12-09 17:58:12,286 INFO : Screen : Set brightness: 100%\n",
"2016-12-09 17:58:12,701 INFO : Screen : Dim screen mode: OFF\n",
"2016-12-09 17:58:13,566 INFO : Screen : Screen timeout: 36000 [s]\n",
"2016-12-09 17:58:21,439 INFO : Screen : Force manual orientation\n",
"2016-12-09 17:58:21,440 INFO : Screen : Set orientation: PORTRAIT\n",
"2016-12-09 17:58:22,871 DEBUG : Jankbench : Start Jank Benchmark [0:list_view]\n",
"2016-12-09 17:58:22,874 INFO : Jankbench : am start -n \"com.android.benchmark/.app.RunLocalBenchmarksActivity\" --eia \"com.android.benchmark.EXTRA_ENABLED_BENCHMARK_IDS\" 0 --ei \"com.android.benchmark.EXTRA_RUN_COUNT\" 1\n",
"2016-12-09 17:58:23,476 INFO : Jankbench : adb -s HT6670300102 logcat ActivityManager:* System.out:I *:S BENCH:*\n",
"2016-12-09 17:58:23,477 DEBUG : Jankbench : Iterations:\n",
"2016-12-09 17:58:23,574 DEBUG : Jankbench : Benchmark started!\n",
"2016-12-09 17:58:24,622 DEBUG : Jankbench : Iteration 1:\n",
"2016-12-09 17:58:58,616 INFO : Jankbench : Mean: 40.867 JankP: 0.061 StdDev: 47.953 Count Bad: 3 Count Jank: 1\n",
"2016-12-09 17:58:59,668 DEBUG : Jankbench : Benchmark done!\n",
"2016-12-09 17:59:01,499 INFO : Screen : Set orientation: AUTO\n",
"2016-12-09 17:59:20,392 INFO : Screen : Set orientation: AUTO\n",
"2016-12-09 17:59:22,002 INFO : Screen : Set brightness: AUTO\n",
"2016-12-09 17:59:22,484 INFO : Screen : Dim screen mode: ON\n",
"2016-12-09 17:59:23,025 INFO : Screen : Screen timeout: 30 [s]\n",
"2016-12-09 17:59:23,026 DEBUG : root : Workload [Jankbench 1 image_list_view] disabled\n",
"2016-12-09 17:59:23,027 DEBUG : root : Workload [Jankbench 1 shadow_grid] disabled\n",
"2016-12-09 17:59:23,029 DEBUG : root : Workload [Jankbench 1 low_hitrate_text] disabled\n",
"2016-12-09 17:59:23,031 DEBUG : root : Workload [Jankbench 1 high_hitrate_text] disabled\n",
"2016-12-09 17:59:23,032 DEBUG : root : Workload [Jankbench 1 edit_text] disabled\n",
"2016-12-09 17:59:23,034 DEBUG : root : Workload [Jankbench 3 list_view] disabled\n",
"2016-12-09 17:59:23,035 DEBUG : root : Workload [Jankbench 3 image_list_view] disabled\n",
"2016-12-09 17:59:23,035 DEBUG : root : Workload [Jankbench 3 shadow_grid] disabled\n",
"2016-12-09 17:59:23,036 DEBUG : root : Workload [Jankbench 3 low_hitrate_text] disabled\n",
"2016-12-09 17:59:23,036 DEBUG : root : Workload [Jankbench 3 high_hitrate_text] disabled\n",
"2016-12-09 17:59:23,036 DEBUG : root : Workload [Jankbench 3 edit_text] disabled\n",
"2016-12-09 17:59:23,037 DEBUG : root : Workload [UiBench 1 TrivialAnimation 10] disabled\n",
"2016-12-09 17:59:23,037 DEBUG : root : Workload [RTApp STAccount 6] disabled\n",
"2016-12-09 17:59:23,037 DEBUG : root : Workload [RTApp RAMP] disabled\n"
]
}
],
"source": [
"run_experiments(experiments, test_wloads, confs, True)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/home/vagrant/lisa/results/Android_Multiple_Workloads\r\n",
"├── eas\r\n",
"│   ├── Jankbench_list_view\r\n",
"│   │   ├── BenchmarkResults\r\n",
"│   │   ├── platform.json\r\n",
"│   │   └── trace.dat\r\n",
"│   └── results.json\r\n",
"└── std\r\n",
" ├── Jankbench_list_view\r\n",
" │   ├── BenchmarkResults\r\n",
" │   ├── platform.json\r\n",
" │   └── trace.dat\r\n",
" └── results.json\r\n",
"\r\n",
"4 directories, 8 files\r\n"
]
}
],
"source": [
"!tree {te.res_dir}"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
},
"toc": {
"toc_cell": false,
"toc_number_sections": true,
"toc_threshold": 6,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 0
}