1*13e8728fSAndroid Build Coastguard Worker#!/bin/bash 2*13e8728fSAndroid Build Coastguard Worker# Copyright (C) 2016 The Android Open Source Project 3*13e8728fSAndroid Build Coastguard Worker# 4*13e8728fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*13e8728fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*13e8728fSAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*13e8728fSAndroid Build Coastguard Worker# 8*13e8728fSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*13e8728fSAndroid Build Coastguard Worker# 10*13e8728fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*13e8728fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*13e8728fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*13e8728fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*13e8728fSAndroid Build Coastguard Worker# limitations under the License. 15*13e8728fSAndroid Build Coastguard Worker 16*13e8728fSAndroid Build Coastguard Worker# Include some functions from common.sh. 17*13e8728fSAndroid Build Coastguard WorkerSCRIPT_DIR="$(dirname "$(readlink -f "$0")")" 18*13e8728fSAndroid Build Coastguard Workersource ${SCRIPT_DIR}/common.sh 19*13e8728fSAndroid Build Coastguard Worker 20*13e8728fSAndroid Build Coastguard WorkerOUT_DATA_DIR="test_out" 21*13e8728fSAndroid Build Coastguard Worker 22*13e8728fSAndroid Build Coastguard Worker# Disable REMOTE for test on local 23*13e8728fSAndroid Build Coastguard WorkerREMOTE="--remote" 24*13e8728fSAndroid Build Coastguard Worker 25*13e8728fSAndroid Build Coastguard WorkerTEST_COUNT=10 26*13e8728fSAndroid Build Coastguard WorkerDEBUG=false 27*13e8728fSAndroid Build Coastguard Worker 28*13e8728fSAndroid Build Coastguard Worker 29*13e8728fSAndroid Build Coastguard Workerapply_overlay() { 30*13e8728fSAndroid Build Coastguard Worker local overaly="$1" 31*13e8728fSAndroid Build Coastguard Worker local base_dts="$2" 32*13e8728fSAndroid Build Coastguard Worker local overlay_dts="$3" 33*13e8728fSAndroid Build Coastguard Worker local merged_dts="$4" 34*13e8728fSAndroid Build Coastguard Worker 35*13e8728fSAndroid Build Coastguard Worker local summary=0 36*13e8728fSAndroid Build Coastguard Worker for i in $(seq 1 $TEST_COUNT); do 37*13e8728fSAndroid Build Coastguard Worker TIME=$(./apply_overlay.sh "--$overaly" $REMOTE \ 38*13e8728fSAndroid Build Coastguard Worker "$base_dts" "$overlay_dts" "$merged_dts" \ 39*13e8728fSAndroid Build Coastguard Worker | sed -E "s/.*took ([0-9]+\\.[0-9]+) secs/\\1/") 40*13e8728fSAndroid Build Coastguard Worker if $DEBUG; then 41*13e8728fSAndroid Build Coastguard Worker echo "time=$TIME" 42*13e8728fSAndroid Build Coastguard Worker fi 43*13e8728fSAndroid Build Coastguard Worker summary=$(echo "$summary + $TIME" | bc -l) 44*13e8728fSAndroid Build Coastguard Worker done 45*13e8728fSAndroid Build Coastguard Worker AVERAY=$(echo "scale=9; $summary/$TEST_COUNT" | bc -l) 46*13e8728fSAndroid Build Coastguard Worker printf "%10s Average time=%s\n" "($overaly)" "$AVERAY" 47*13e8728fSAndroid Build Coastguard Worker} 48*13e8728fSAndroid Build Coastguard Worker 49*13e8728fSAndroid Build Coastguard Workerrun_performance_test() { 50*13e8728fSAndroid Build Coastguard Worker # see ufdt_gen_test_dts.c for detail 51*13e8728fSAndroid Build Coastguard Worker local node_depth="$1" 52*13e8728fSAndroid Build Coastguard Worker local node_unused="$2" 53*13e8728fSAndroid Build Coastguard Worker local node_count="$3" 54*13e8728fSAndroid Build Coastguard Worker local append_count="$4" 55*13e8728fSAndroid Build Coastguard Worker local override_count="$5" 56*13e8728fSAndroid Build Coastguard Worker 57*13e8728fSAndroid Build Coastguard Worker mkdir -p "$OUT_DATA_DIR" >& /dev/null 58*13e8728fSAndroid Build Coastguard Worker 59*13e8728fSAndroid Build Coastguard Worker # 60*13e8728fSAndroid Build Coastguard Worker # Prepare dtb and dtbo files 61*13e8728fSAndroid Build Coastguard Worker # 62*13e8728fSAndroid Build Coastguard Worker local base_dts="${OUT_DATA_DIR}/base.dts" 63*13e8728fSAndroid Build Coastguard Worker echo " Base DT: depth=$node_depth unused=$node_unused nodes=$node_count" 64*13e8728fSAndroid Build Coastguard Worker ufdt_gen_test_dts -n $node_count -d $node_depth -u $node_unused \ 65*13e8728fSAndroid Build Coastguard Worker -o "$base_dts" 66*13e8728fSAndroid Build Coastguard Worker if $DEBUG; then 67*13e8728fSAndroid Build Coastguard Worker cat "$base_dts" 68*13e8728fSAndroid Build Coastguard Worker fi 69*13e8728fSAndroid Build Coastguard Worker 70*13e8728fSAndroid Build Coastguard Worker local overlay_dts="${OUT_DATA_DIR}/overlay.dts" 71*13e8728fSAndroid Build Coastguard Worker echo " Overlay DT: append=$append_count override=$override_count" 72*13e8728fSAndroid Build Coastguard Worker ufdt_gen_test_dts -p -a $append_count -w $override_count \ 73*13e8728fSAndroid Build Coastguard Worker -o "$overlay_dts" 74*13e8728fSAndroid Build Coastguard Worker if $DEBUG; then 75*13e8728fSAndroid Build Coastguard Worker cat "$overlay_dts" 76*13e8728fSAndroid Build Coastguard Worker fi 77*13e8728fSAndroid Build Coastguard Worker 78*13e8728fSAndroid Build Coastguard Worker local merged_dts="${OUT_DATA_DIR}/overlay_merged.dts" 79*13e8728fSAndroid Build Coastguard Worker apply_overlay fdt $base_dts $overlay_dts $merged_dts 80*13e8728fSAndroid Build Coastguard Worker apply_overlay ufdt $base_dts $overlay_dts $merged_dts 81*13e8728fSAndroid Build Coastguard Worker 82*13e8728fSAndroid Build Coastguard Worker rm -rf "$OUT_DATA_DIR" 83*13e8728fSAndroid Build Coastguard Worker} 84*13e8728fSAndroid Build Coastguard Worker 85*13e8728fSAndroid Build Coastguard Workermain() { 86*13e8728fSAndroid Build Coastguard Worker alert "========== Running Performance Tests ==========" 87*13e8728fSAndroid Build Coastguard Worker 88*13e8728fSAndroid Build Coastguard Worker if [ -z "$ANDROID_BUILD_TOP" ]; then 89*13e8728fSAndroid Build Coastguard Worker die "Run envsetup.sh / lunch yet?" 90*13e8728fSAndroid Build Coastguard Worker fi 91*13e8728fSAndroid Build Coastguard Worker 92*13e8728fSAndroid Build Coastguard Worker if ! command_exists ufdt_gen_test_dts || 93*13e8728fSAndroid Build Coastguard Worker ! command_exists dtc; then 94*13e8728fSAndroid Build Coastguard Worker die "Run mmma $(dirname $SCRIPT_DIR) yet?" 95*13e8728fSAndroid Build Coastguard Worker fi 96*13e8728fSAndroid Build Coastguard Worker 97*13e8728fSAndroid Build Coastguard Worker if [ "$REMOTE" == "--remote" ]; then 98*13e8728fSAndroid Build Coastguard Worker adb get-state > /dev/null 99*13e8728fSAndroid Build Coastguard Worker if [ "$?" -ne "0" ]; then 100*13e8728fSAndroid Build Coastguard Worker die "adb can not connect to device." 101*13e8728fSAndroid Build Coastguard Worker fi 102*13e8728fSAndroid Build Coastguard Worker fi 103*13e8728fSAndroid Build Coastguard Worker 104*13e8728fSAndroid Build Coastguard Worker # cd to ${SCRIPT_DIR} in a subshell because gen_test.sh uses relative 105*13e8728fSAndroid Build Coastguard Worker # paths for dependent files. 106*13e8728fSAndroid Build Coastguard Worker cd "${SCRIPT_DIR}" 107*13e8728fSAndroid Build Coastguard Worker 108*13e8728fSAndroid Build Coastguard Worker # 109*13e8728fSAndroid Build Coastguard Worker # run_performance_test 110*13e8728fSAndroid Build Coastguard Worker # <node_depth> <node_unused> <node_count> <append_count> <override_count> 111*13e8728fSAndroid Build Coastguard Worker 112*13e8728fSAndroid Build Coastguard Worker # Test case #1: node=x append=100 override=100 113*13e8728fSAndroid Build Coastguard Worker for t in $(seq 200 50 1000); do 114*13e8728fSAndroid Build Coastguard Worker run_performance_test 2 0 $t 100 100 115*13e8728fSAndroid Build Coastguard Worker done 116*13e8728fSAndroid Build Coastguard Worker # Test case #2: node=x append=100 override=100 117*13e8728fSAndroid Build Coastguard Worker for t in $(seq 200 50 1000); do 118*13e8728fSAndroid Build Coastguard Worker run_performance_test 2 $t $t 100 100 119*13e8728fSAndroid Build Coastguard Worker done 120*13e8728fSAndroid Build Coastguard Worker # Test case #3: node=2000 append=X 121*13e8728fSAndroid Build Coastguard Worker for t in $(seq 50 50 1000); do 122*13e8728fSAndroid Build Coastguard Worker run_performance_test 2 0 2000 $t 0 123*13e8728fSAndroid Build Coastguard Worker done 124*13e8728fSAndroid Build Coastguard Worker # Test case #4: node=2000 override=X 125*13e8728fSAndroid Build Coastguard Worker for t in $(seq 50 50 1000); do 126*13e8728fSAndroid Build Coastguard Worker run_performance_test 2 0 2000 0 $t 127*13e8728fSAndroid Build Coastguard Worker done 128*13e8728fSAndroid Build Coastguard Worker} 129*13e8728fSAndroid Build Coastguard Worker 130*13e8728fSAndroid Build Coastguard Workermain "$@" 131