1*90c8c64dSAndroid Build Coastguard Worker#!/bin/bash 2*90c8c64dSAndroid Build Coastguard Worker 3*90c8c64dSAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project 4*90c8c64dSAndroid Build Coastguard Worker# 5*90c8c64dSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*90c8c64dSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*90c8c64dSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*90c8c64dSAndroid Build Coastguard Worker# 9*90c8c64dSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*90c8c64dSAndroid Build Coastguard Worker# 11*90c8c64dSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*90c8c64dSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*90c8c64dSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*90c8c64dSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*90c8c64dSAndroid Build Coastguard Worker# limitations under the License. 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Workerset -e 18*90c8c64dSAndroid Build Coastguard Worker. "${0%/*}"/bash_util.bash 19*90c8c64dSAndroid Build Coastguard Worker 20*90c8c64dSAndroid Build Coastguard Workerfunction usage() { 21*90c8c64dSAndroid Build Coastguard Worker cat 1>&2 <<"EOF" 22*90c8c64dSAndroid Build Coastguard Worker 23*90c8c64dSAndroid Build Coastguard Worker $script_name: Get heapdump from a process and open in ahat. 24*90c8c64dSAndroid Build Coastguard Worker 25*90c8c64dSAndroid Build Coastguard Worker Usage: $script_name PID_OR_PROCESS_NAME 26*90c8c64dSAndroid Build Coastguard Worker 27*90c8c64dSAndroid Build Coastguard WorkerEOF 28*90c8c64dSAndroid Build Coastguard Worker exit 1 29*90c8c64dSAndroid Build Coastguard Worker} 30*90c8c64dSAndroid Build Coastguard Worker 31*90c8c64dSAndroid Build Coastguard Workerpid="$(resolve_pid "$1" || usage)" 32*90c8c64dSAndroid Build Coastguard Worker 33*90c8c64dSAndroid Build Coastguard Workerdev_file=/data/local/tmp/heapdump.prof 34*90c8c64dSAndroid Build Coastguard Workerlocal_file="$(make_temp_file .prof)" 35*90c8c64dSAndroid Build Coastguard Worker 36*90c8c64dSAndroid Build Coastguard Worker 37*90c8c64dSAndroid Build Coastguard Workerinfo "Getting heap dump from $pid ..." 38*90c8c64dSAndroid Build Coastguard Workerdo_adb shell am dumpheap -g "$pid" "$dev_file" 39*90c8c64dSAndroid Build Coastguard Worker 40*90c8c64dSAndroid Build Coastguard Worker 41*90c8c64dSAndroid Build Coastguard Workerinfo "Pulling the dump file to $local_file ..." 42*90c8c64dSAndroid Build Coastguard Workerdo_adb pull "$dev_file" "$local_file" 43*90c8c64dSAndroid Build Coastguard Worker 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Workerinfo "Looking for available port ..." 46*90c8c64dSAndroid Build Coastguard Workerport=$(find_open_port 11000) 47*90c8c64dSAndroid Build Coastguard Workerinfo "Using port $port" 48*90c8c64dSAndroid Build Coastguard Worker 49*90c8c64dSAndroid Build Coastguard Worker( 50*90c8c64dSAndroid Build Coastguard Worker sleep 2 51*90c8c64dSAndroid Build Coastguard Worker info "Starting the browser ..." 52*90c8c64dSAndroid Build Coastguard Worker setsid "${AHAT_BROWSER:-google-chrome}" http://localhost:$port 53*90c8c64dSAndroid Build Coastguard Worker) & 54*90c8c64dSAndroid Build Coastguard Worker 55*90c8c64dSAndroid Build Coastguard Worker 56*90c8c64dSAndroid Build Coastguard Workerinfo "Opening $local_file with ahat ..." 57*90c8c64dSAndroid Build Coastguard Workerahat -p $port "$local_file"