callstats-from-telemetry.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #1/bin/env bash
  2. set -e
  3. usage() {
  4. cat << EOF
  5. usage: $0 OPTIONS RESULTS_DIR | TRACE_JSON
  6. Convert telemetry json trace result to callstats.html compatible
  7. versions ot ./out.json
  8. OPTIONS:
  9. -h Show this message.
  10. RESULTS_DIR tools/perf/artifacts/run_XXX
  11. TRACE_JSON .json trace files
  12. EOF
  13. }
  14. while getopts ":h" OPTION ; do
  15. case $OPTION in
  16. h) usage
  17. exit 0
  18. ;;
  19. ?) echo "Illegal option: -$OPTARG"
  20. usage
  21. exit 1
  22. ;;
  23. esac
  24. done
  25. # =======================================================================
  26. if [[ "$1" == *.json ]]; then
  27. echo "Converting json files"
  28. JSON=$1
  29. elif [[ -e "$1" ]]; then
  30. echo "Converting reults dir"
  31. RESULTS_DIR=$1
  32. else
  33. echo "RESULTS_DIR '$RESULTS_DIR' not found";
  34. usage;
  35. exit 1;
  36. fi
  37. OUT=out.json
  38. if [[ -e $OUT ]]; then
  39. echo "# Creating backup for $OUT"
  40. cp $OUT $OUT.bak
  41. fi
  42. echo "# Writing to $OUT"
  43. function convert {
  44. NAME=$1
  45. JSON=$2
  46. # Check if any json file exists:
  47. if ls $JSON 1> /dev/null 2>&1; then
  48. du -sh $JSON;
  49. echo "Converting NAME=$NAME";
  50. echo "," >> $OUT;
  51. echo "\"$NAME\": " >> $OUT;
  52. jq '[.traceEvents[].args | select(."runtime-call-stats" != null) | ."runtime-call-stats"]' $JSON >> $OUT;
  53. fi
  54. }
  55. echo '{ "telemetry-results": { "placeholder":{}' > $OUT
  56. if [[ $RESULTS_DIR ]]; then
  57. for PAGE_DIR in $RESULTS_DIR/*_1; do
  58. NAME=`basename $PAGE_DIR`;
  59. JSON="$PAGE_DIR/trace/traceEvents/*_converted.json";
  60. convert $NAME $JSON
  61. done
  62. else
  63. for JSON in $@; do
  64. convert $JSON $JSON
  65. done
  66. fi
  67. echo '}}' >> $OUT