| #!/bin/bash | 
 |  | 
 | # Copyright 2013 The Chromium Authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 | # Produce memory metrics for run_apply_test | 
 |  | 
 | source "$(dirname ${0})/stress_test_common" | 
 |  | 
 | compute_percentiles() { | 
 |   if [ -z "${1}" ]; then | 
 |     return; | 
 |   fi | 
 |   local pctls=".5 .9 1" | 
 |   local lines=$(cat ${1} | wc -l) | 
 |   for p in $pctls; do | 
 |     local count="$(echo "${lines} * $p" | bc -lq | cut -d. -f1)" | 
 |     local bytes=$(cat ${1} \ | 
 |       | cut -d' ' -f2 \ | 
 |       | sort -n \ | 
 |       | head -n$count \ | 
 |       | tail -n1) | 
 |     echo -n "$((bytes / 1000000))MB " | 
 |   done | 
 | } | 
 |  | 
 | main() { | 
 |   if [ $# -lt 1 ]; then | 
 |     cat <<EOF | 
 |  | 
 | USAGE: $(basename ${0}) dir | 
 |  | 
 | Produce memory metrics for run_apply_test.  This shows the percentiles | 
 | of the max heap size across all files. | 
 |  | 
 | EOF | 
 |     exit 1 | 
 |   fi | 
 |  | 
 |   local dir="${1}" | 
 |   if [ ! -d "${dir}" ]; then | 
 |     error "\"${dir}\" not found" exit 1 | 
 |   fi | 
 |  | 
 |   local metrics_dir="${dir}/metrics" | 
 |   local metrics="${dir}/mem_per_file.txt" | 
 |  | 
 |   if [ ! -f "${metrics}" ]; then | 
 |     local metrics_tmp="${metrics}.tmp" | 
 |     echo "computing usage percentiles for courgette.  this may take a while..." | 
 |     find "${metrics_dir}" \ | 
 |       | grep "\.apply_mem$" \ | 
 |       | while read i; do | 
 |       local apply_mem="${i}" | 
 |       local unbz2_mem="${apply_mem%.apply_mem}.unbz2_mem" | 
 |       local unxz_mem="${apply_mem%.apply_mem}.unxz_mem" | 
 |       echo -n "$apply_mem " | 
 |       cat "${apply_mem}" "${unbz2_mem}" "${unxz_mem}" \ | 
 |         | grep "mem_heap_B" \ | 
 |         | cut -d= -f2 \ | 
 |         | sort -nr \ | 
 |         | head -n1 | 
 |     done | sort -k2 -n > "${metrics_tmp}" | 
 |     mv "${metrics_tmp}" "${metrics}" | 
 |   fi | 
 |  | 
 |   echo "$(compute_percentiles ${metrics})max heap per file for Courgette" \ | 
 |     "(50th 90th 100th)" | 
 |  | 
 |   local metrics_bsdiff="${dir}/mem_per_file_bsdiff.txt" | 
 |  | 
 |   if [ ! -f "${metrics_bsdiff}" ]; then | 
 |     local metrics_bsdiff_tmp="${metrics_bsdiff}.tmp" | 
 |     echo "computing usage percentiles for bsdiff.  this may take a while..." | 
 |     find "${metrics_dir}" \ | 
 |       | grep "\.bsdiff_mem$" \ | 
 |       | while read i; do | 
 |       local bsdiff_mem="${i}" | 
 |       echo -n "$bsdiff_mem " | 
 |       cat $bsdiff_mem \ | 
 |         | grep "mem_heap_B" \ | 
 |         | cut -d= -f2 \ | 
 |         | sort -nr \ | 
 |         | head -n1 | 
 |     done | sort -k2 -n > "${metrics_bsdiff_tmp}" | 
 |     mv "${metrics_bsdiff_tmp}" "${metrics_bsdiff}" | 
 |   fi | 
 |  | 
 |   echo "$(compute_percentiles ${metrics_bsdiff})max heap per file for bsdiff" \ | 
 |     "(50th 90th 100th)" | 
 | } | 
 |  | 
 | main "${@}" |