Bash程序  |  160行  |  3.74 KB

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