#!/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 [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