Merge "Stress profile saving for gc-stress tests"
diff --git a/test/etc/run-test-jar b/test/etc/run-test-jar
index b8427f4..1184ced 100755
--- a/test/etc/run-test-jar
+++ b/test/etc/run-test-jar
@@ -75,6 +75,7 @@
 VDEX_FILTER=""
 PROFILE="n"
 RANDOM_PROFILE="n"
+SAVE_PROFILE="n"
 # The normal dex2oat timeout.
 DEX2OAT_TIMEOUT="300" # 5 mins
 # The *hard* timeout where we really start trying to kill the dex2oat.
@@ -364,6 +365,9 @@
     elif [ "x$1" = "x--random-profile" ]; then
         RANDOM_PROFILE="y"
         shift
+    elif [ "x$1" = "x--save-profile" ]; then
+        SAVE_PROFILE="y"
+        shift
     elif [ "x$1" = "x--set-stack-trace-dump-dir" ]; then
         SET_STACK_TRACE_DUMP_DIR="y"
         shift
@@ -680,6 +684,7 @@
     exit 1
 fi
 
+create_profile_cmdline="true"
 profman_cmdline="true"
 dex2oat_cmdline="true"
 vdex_cmdline="true"
@@ -688,6 +693,16 @@
 strip_cmdline="true"
 sync_cmdline="true"
 
+if [ "$SAVE_PROFILE" = "y" ]; then
+  profile_file="$DEX_LOCATION/$TEST_NAME.prof"
+  create_profile_cmdline="touch $DEX_LOCATION/$TEST_NAME.prof"
+  FLAGS="${FLAGS} -Xjitsaveprofilinginfo -Xps-profile-boot-class-path"
+  FLAGS="${FLAGS} -Xps-profile-path:${profile_file}"
+  # Use -Xjitinitialsize:32M to prevent profiling info creation failure.
+  # On debug build the code cache is too small.
+  FLAGS="${FLAGS} -Xjitinitialsize:32M"
+fi
+
 # PROFILE takes precedence over RANDOM_PROFILE, since PROFILE tests require a
 # specific profile to run properly.
 if [ "$PROFILE" = "y" ] || [ "$RANDOM_PROFILE" = "y" ]; then
@@ -801,6 +816,7 @@
 dm_cmdline=$(echo $dm_cmdline)
 vdex_cmdline=$(echo $vdex_cmdline)
 profman_cmdline=$(echo $profman_cmdline)
+create_profile_cmdline=$(echo $create_profile_cmdline)
 
 # Use an empty ASAN_OPTIONS to enable defaults.
 # Note: this is required as envsetup right now exports detect_leaks=0.
@@ -866,6 +882,7 @@
              mkdir -p ${mkdir_locations} && \
              export LD_LIBRARY_PATH=$LD_LIBRARY_PATH && \
              export PATH=$ANDROID_ROOT/bin:$PATH && \
+             $create_profile_cmdline && \
              $profman_cmdline && \
              $dex2oat_cmdline && \
              $dm_cmdline && \
@@ -962,6 +979,7 @@
     export ASAN_OPTIONS=$RUN_TEST_ASAN_OPTIONS
 
     mkdir -p ${mkdir_locations} || exit 1
+    $create_profile_cmdline || { echo "Failed to create profile." >&2 ; exit 2; }
     $profman_cmdline || { echo "Profman failed." >&2 ; exit 2; }
     $dex2oat_cmdline || { echo "Dex2oat failed." >&2 ; exit 2; }
     $dm_cmdline || { echo "Dex2oat failed." >&2 ; exit 2; }
diff --git a/test/run-test b/test/run-test
index 6bcb9cd..456349e 100755
--- a/test/run-test
+++ b/test/run-test
@@ -254,6 +254,9 @@
     elif [ "x$1" = "x--gcstress" ]; then
         basic_verify="true"
         gc_stress="true"
+        # Save profiles when stressing the GC.
+        # This will verify the interactions between profile saving and GC.
+        run_args="${run_args} --save-profile"
         shift
     elif [ "x$1" = "x--jvmti-step-stress" ]; then
         jvmti_step_stress="true"