blob: b8c1584193d603503a3b9ae38367695b1922473c [file] [log] [blame]
#!/bin/bash
#
# Copyright (C) 2017 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.
#
# usage: usbtuner-test.sh <test_case> [channel]
#
# To test repeated channel change, run:
#
# ./usbtuner-test.sh <1 or 3>
#
# To test watching a fixed channel, run:
#
# ./usbtuner-test.sh 2
#
# Case 2 uses the last-viewed channel by TV app. Give a channel number
# as a 2nd parameter if you want to use the channel for testing, like below:
#
# ./usbtuner-test.sh 2 6-1
#
# The script assumes that:
# 1) Browsing by keydown event circulates among the USB input channels only
# 2) When started, TV app should tune to one of the channels provided by the USB input
#
# The test result is logged in the doc: https://goo.gl/MsPBf7
function start_tv {
disable_analytics_report
adb shell am force-stop com.android.tv
adb shell am start -n com.android.tv/.MainActivity > /dev/null
sleep 5
}
function log_begin {
adb shell dumpsys meminfo -d --package com.android.tv.tuner > meminfo-begin.txt
}
function tune {
adb shell input text $1
adb shell input keyevent KEYCODE_DPAD_CENTER
sleep 5 # Wait enough for tuning
}
function browse {
for i in {1..50}; do
adb shell input keyevent DPAD_DOWN
sleep 10 # Tune and watch the channel for a while
done;
}
function browse_heavily {
for i in {1..60}; do
echo "$(date '+%x %X') ======== Test #$i of 60 ========"
clear_logcat
for j in {1..60}; do
adb shell input keyevent DPAD_DOWN
sleep $(( $RANDOM % 3 )) # Sleep for 0 - 2 seconds
done;
measure_tuning_time
done;
}
function clear_logcat {
adb logcat -c
}
function measure_tuning_time {
timeout 1 adb logcat -s TvInputSessionImpl | awk -f $(dirname $0)/measure-tuning-time.awk
}
function log_end {
adb shell dumpsys meminfo -d --package com.android.tv.tuner > meminfo-end.txt
}
function stop_tv {
# Stop TV by running other app (Settings)
adb shell am start com.android.tv.settings/com.android.tv.settings.MainSettings
restore_analytics_setting
}
function output {
echo "Cut and paste this"
sed -n 33,46p meminfo-begin.txt | cut -f 2 -d ":" -s | awk '{print $1}'
sed -n 33,46p meminfo-end.txt | cut -f 2 -d ":" -s | awk '{print $1}'
}
function disable_analytics_report {
tracker=$(adb shell getprop tv_use_tracker | tr -d '[[:space:]]')
adb shell setprop tv_use_tracker false
}
function restore_analytics_setting {
if [ "${tracker}" == "" ]; then
adb shell setprop tv_use_tracker ""
else
adb shell setprop tv_use_tracker ${tracker}
fi
}
function control_c {
restore_analytics_setting
echo "Exiting..."
exit 1
}
# Entry point
trap control_c SIGINT
case "$1" in
1)
echo "Runing test 1"
start_tv
log_begin
clear_logcat
browse # Repeat channel change for about 10 minutes
measure_tuning_time
log_end
stop_tv
output
;;
2)
echo "Runing test 2"
start_tv
log_begin
if [ "$2" != "" ]; then
tune $2
fi
sleep 600 # 10 minutes
log_end
stop_tv
output
;;
3)
echo "Runing test 3"
start_tv
log_begin
browse_heavily # Repeat channel change for about 3 hours
log_end
stop_tv
output
;;
*)
echo "usage: usbtuner-test.sh <1|2|3> [channel]"
exit 1
;;
esac