xref: /third_party/node/deps/v8/tools/eval_gc_time.sh (revision 1cb0ef41)
1#!/bin/bash
2#
3# Copyright 2015 the V8 project authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7# Convenience Script used to rank GC NVP output.
8
9print_usage_and_die() {
10  echo "Usage: $0 [OPTIONS]"
11  echo ""
12  echo "OPTIONS"
13  echo  "  -r|--rank new-gen-rank|old-gen-rank    GC mode to profile"
14  echo  "                                         (default: old-gen-rank)"
15  echo  "  -s|--sort avg|max                      sorting mode (default: max)"
16  echo  "  -t|--top-level                         include top-level categories"
17  echo  "  -c|--csv                               provide csv output"
18  echo  "  -f|--file FILE                         profile input in a file"
19  echo  "                                         (default: stdin)"
20  echo  "  -p|--percentiles                       comma separated percentiles"
21  exit 1
22}
23
24OP=old-gen-rank
25RANK_MODE=max
26TOP_LEVEL=no
27CSV=""
28LOGFILE=/dev/stdin
29PERCENTILES=""
30
31while [[ $# -ge 1 ]]
32do
33  key="$1"
34  case $key in
35    -r|--rank)
36      case $2 in
37        new-gen-rank|old-gen-rank)
38          OP="$2"
39          ;;
40        *)
41          print_usage_and_die
42      esac
43      shift
44      ;;
45    -s|--sort)
46      case $2 in
47        max|avg)
48          RANK_MODE=$2
49          ;;
50        *)
51          print_usage_and_die
52      esac
53      shift
54      ;;
55    -t|--top-level)
56      TOP_LEVEL=yes
57      ;;
58    -c|--csv)
59      CSV=" --csv "
60      ;;
61    -f|--file)
62      LOGFILE=$2
63      shift
64      ;;
65    -p|--percentiles)
66      PERCENTILES="--percentiles=$2"
67      shift
68      ;;
69    *)
70      break
71      ;;
72  esac
73  shift
74done
75
76if [[ $# -ne 0 ]]; then
77  echo "Unknown option(s): $@"
78  echo ""
79  print_usage_and_die
80fi
81
82INTERESTING_NEW_GEN_KEYS="\
83  scavenge \
84  weak \
85  roots \
86  old_new \
87  semispace \
88"
89
90INTERESTING_OLD_GEN_KEYS="\
91  clear.dependent_code \
92  clear.global_handles \
93  clear.maps \
94  clear.slots_buffer \
95  clear.string_table \
96  clear.weak_collections \
97  clear.weak_lists \
98  evacuate.candidates \
99  evacuate.clean_up \
100  evacuate.copy \
101  evacuate.update_pointers \
102  evacuate.update_pointers.to_evacuated \
103  evacuate.update_pointers.to_new \
104  evacuate.update_pointers.weak \
105  external.mc_prologue \
106  external.mc_epilogue \
107  external.mc_incremental_prologue \
108  external.mc_incremental_epilogue \
109  external.weak_global_handles \
110  mark.finish_incremental \
111  mark.roots \
112  mark.weak_closure \
113  mark.weak_closure.ephemeral \
114  mark.weak_closure.weak_handles \
115  mark.weak_closure.weak_roots \
116  mark.weak_closure.harmony \
117  sweep.code \
118  sweep.map \
119  sweep.old \
120"
121
122if [[ "$TOP_LEVEL" = "yes" ]]; then
123  INTERESTING_OLD_GEN_KEYS="\
124    ${INTERESTING_OLD_GEN_KEYS} \
125    clear \
126    evacuate \
127    finish \
128    incremental_finalize \
129    mark \
130    pause
131    sweep \
132  "
133  INTERESTING_NEW_GEN_KEYS="\
134    ${INTERESTING_NEW_GEN_KEYS} \
135  "
136fi
137
138BASE_DIR=$(dirname $0)
139
140case $OP in
141  new-gen-rank)
142    cat $LOGFILE | grep "gc=s" \
143      | $BASE_DIR/eval_gc_nvp.py \
144      --no-histogram \
145      --rank $RANK_MODE \
146      $CSV \
147      $PERCENTILES \
148      ${INTERESTING_NEW_GEN_KEYS}
149    ;;
150  old-gen-rank)
151    cat $LOGFILE | grep "gc=ms" \
152      | $BASE_DIR/eval_gc_nvp.py \
153      --no-histogram \
154      --rank $RANK_MODE \
155      $CSV \
156      $PERCENTILES \
157      ${INTERESTING_OLD_GEN_KEYS}
158    ;;
159  *)
160    ;;
161esac
162