#!/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 new-gen-rank|old-gen-rank max|avg logfile"
  exit 1
}

if [ $# -ne 3 ]; then
  print_usage_and_die
fi

case $1 in
  new-gen-rank|old-gen-rank)
    OP=$1
    ;;
  *)
    print_usage_and_die
esac

case $2 in 
  max|avg)
    RANK_MODE=$2
    ;;
  *)
    print_usage_and_die
esac

LOGFILE=$3

GENERAL_INTERESTING_KEYS="\
  pause \
"

INTERESTING_NEW_GEN_KEYS="\
  ${GENERAL_INTERESTING_KEYS} \
  scavenge \
  weak \
  roots \
  old_new \
  code \
  semispace \
  object_groups \
"

INTERESTING_OLD_GEN_KEYS="\
  ${GENERAL_INTERESTING_KEYS} \
  external \
  clear \
  clear.code_flush \
  clear.dependent_code \
  clear.global_handles \
  clear.maps \
  clear.slots_buffer \
  clear.store_buffer \
  clear.string_table \
  clear.weak_cells \
  clear.weak_collections \
  clear.weak_lists \
  finish \
  evacuate \
  evacuate.candidates \
  evacuate.clean_up \
  evacuate.new_space \
  evacuate.update_pointers \
  evacuate.update_pointers.between_evacuated \
  evacuate.update_pointers.to_evacuated \
  evacuate.update_pointers.to_new \
  evacuate.update_pointers.weak \
  mark \
  mark.finish_incremental \
  mark.prepare_code_flush \
  mark.roots \
  mark.weak_closure \
  sweep \
  sweep.code \
  sweep.map \
  sweep.old \
  incremental_finalize \
"

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 \
      ${INTERESTING_NEW_GEN_KEYS}
    ;;
  old-gen-rank)
    cat $LOGFILE | grep "gc=ms" | grep "reduce_memory=0" | grep -v "steps=0" \
      | $BASE_DIR/eval_gc_nvp.py \
      --no-histogram \
      --rank $RANK_MODE \
      ${INTERESTING_OLD_GEN_KEYS}
    ;;
  *)
    ;;
esac