#!/bin/bash # # Copyright 2015 the V8 project authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Convenience Script used to rank GC NVP output. print_usage_and_die() { echo "Usage: $0 [OPTIONS]" echo "" echo "OPTIONS" echo " -r|--rank new-gen-rank|old-gen-rank GC mode to profile" echo " (default: old-gen-rank)" echo " -s|--sort avg|max sorting mode (default: max)" echo " -t|--top-level include top-level categories" echo " -c|--csv provide csv output" echo " -f|--file FILE profile input in a file" echo " (default: stdin)" echo " -p|--percentiles comma separated percentiles" exit 1 } OP=old-gen-rank RANK_MODE=max TOP_LEVEL=no CSV="" LOGFILE=/dev/stdin PERCENTILES="" while [[ $# -ge 1 ]] do key="$1" case $key in -r|--rank) case $2 in new-gen-rank|old-gen-rank) OP="$2" ;; *) print_usage_and_die esac shift ;; -s|--sort) case $2 in max|avg) RANK_MODE=$2 ;; *) print_usage_and_die esac shift ;; -t|--top-level) TOP_LEVEL=yes ;; -c|--csv) CSV=" --csv " ;; -f|--file) LOGFILE=$2 shift ;; -p|--percentiles) PERCENTILES="--percentiles=$2" shift ;; *) break ;; esac shift done if [[ $# -ne 0 ]]; then echo "Unknown option(s): $@" echo "" print_usage_and_die fi INTERESTING_NEW_GEN_KEYS="\ scavenge \ weak \ roots \ old_new \ semispace \ " INTERESTING_OLD_GEN_KEYS="\ clear.dependent_code \ clear.global_handles \ clear.maps \ clear.slots_buffer \ clear.store_buffer \ clear.string_table \ clear.weak_collections \ clear.weak_lists \ evacuate.candidates \ evacuate.clean_up \ evacuate.copy \ evacuate.update_pointers \ evacuate.update_pointers.to_evacuated \ evacuate.update_pointers.to_new \ evacuate.update_pointers.weak \ external.mc_prologue \ external.mc_epilogue \ external.mc_incremental_prologue \ external.mc_incremental_epilogue \ external.weak_global_handles \ mark.finish_incremental \ mark.roots \ mark.weak_closure \ mark.weak_closure.ephemeral \ mark.weak_closure.weak_handles \ mark.weak_closure.weak_roots \ mark.weak_closure.harmony \ sweep.code \ sweep.map \ sweep.old \ " if [[ "$TOP_LEVEL" = "yes" ]]; then INTERESTING_OLD_GEN_KEYS="\ ${INTERESTING_OLD_GEN_KEYS} \ clear \ evacuate \ finish \ incremental_finalize \ mark \ pause sweep \ " INTERESTING_NEW_GEN_KEYS="\ ${INTERESTING_NEW_GEN_KEYS} \ " fi BASE_DIR=$(dirname $0) case $OP in new-gen-rank) cat $LOGFILE | grep "gc=s" \ | $BASE_DIR/eval_gc_nvp.py \ --no-histogram \ --rank $RANK_MODE \ $CSV \ $PERCENTILES \ ${INTERESTING_NEW_GEN_KEYS} ;; old-gen-rank) cat $LOGFILE | grep "gc=ms" \ | $BASE_DIR/eval_gc_nvp.py \ --no-histogram \ --rank $RANK_MODE \ $CSV \ $PERCENTILES \ ${INTERESTING_OLD_GEN_KEYS} ;; *) ;; esac