#!/bin/bash
#
# Copyright (C) 2017 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Enable lock contention logging.
if [[ "x$ART_DEFAULT_GC_TYPE" = xGSS ]]; then
  # NonMovingAlloc operations fail an assertion with the Generational
  # Semi-Space (GSS) collector (see b/72738921); disable them for now
  # by explicitly assigning frequencies to operations when the GSS
  # collector is used.
  #
  # Note: The trick to use command substitution to have comments within
  # a multi-line command is from https://stackoverflow.com/a/12797512.
  ${RUN} --runtime-option -Xlockprofthreshold:10 "${@}" Main \
    -oom:0.005           `#   1/200` \
    -sigquit:0.095       `#  19/200` \
    -alloc:0.225         `#  45/200` \
    -largealloc:0.05     `#  10/200` \
    -nonmovingalloc:0.0  `#   0/200` \
    -stacktrace:0.1      `#  20/200` \
    -exit:0.225          `#  45/200` \
    -sleep:0.125         `#  25/200` \
    -timedwait:0.05      `#  10/200` \
    -wait:0.075          `#  15/200` \
    -queuedwait:0.05     `#  10/200`
else
  ${RUN} --runtime-option -Xlockprofthreshold:10 "${@}"
fi
return_status1=$?

# Run locks-only mode with stack-dump lock profiling. Reduce the number of total operations from
# the default 1000 to 100.
${RUN} --runtime-option -Xlockprofthreshold:10 --runtime-option -Xstackdumplockprofthreshold:20 \
  "${@}" Main --locks-only -o 100
return_status2=$?

# Make sure we don't silently ignore an early failure.
(exit $return_status1) && (exit $return_status2)