Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a27fecd authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge changes I10c6ed68,I14d6defe am: 8dee71f1 am: 84817b55 am: b130dbcc"

parents a09312df 890301de
Loading
Loading
Loading
Loading
+90 −13
Original line number Diff line number Diff line
@@ -172,14 +172,42 @@ function check_no_zygote_gc_runtime_option {
  done
}

# test_android_runtime_flag FLAG VALUE GC_RUNTIME_OPTION
# ------------------------------------------------------
# Test device configuration FLAG with VALUE. Check that GC_RUNTIME_OPTION is
# passed as GC Runtime option by the zygote.
# check_android_runtime_message CONTEXT MESSAGE
# ---------------------------------------------
# Return whether AndroidRuntime generated MESSAGE in logcat. Use CONTEXT in
# logging.
function check_android_runtime_message {
  local context=$1
  local message=$2

  say "[$context] Check that AndroidRuntime generated expected message in logcat..."
  adb logcat -d -s AndroidRuntime | grep -F -q "$message" \
    || fail "Found no message \"$message\" generated by AndroidRuntime"
}

# check_no_android_runtime_message CONTEXT MESSAGE
# ------------------------------------------------
# Return whether AndroidRuntime did not generate MESSAGE in logcat. Use CONTEXT
# in logging.
function check_no_android_runtime_message {
  local context=$1
  local message=$2

  say "[$context] Check that AndroidRuntime did not generate unexpected message in logcat..."
  adb logcat -d -s AndroidRuntime | grep -F -q -v "$message" \
    || fail "Found message \"$message\" generated by AndroidRuntime"
}

# test_android_runtime_flag FLAG VALUE CHECK_EFFECT CHECK_NO_EFFECT
# -----------------------------------------------------------------
# Test device configuration FLAG with VALUE. CHECK_EFFECT and CHECK_NO_EFFECT
# are functions that are passed a context as sole argument and that respectively
# check the effect or the absence of effect of the flag.
function test_android_runtime_flag {
  local flag=$1
  local value=$2
  local gc_runtime_option=$3
  local check_effect=$3
  local check_no_effect=$4

  # Persistent system property (set after a reboot) associated with the device
  # configuration flag.
@@ -193,26 +221,26 @@ function test_android_runtime_flag {
  sleep 3

  # Check that both the device configuration flag and the associated system
  # property are set, but that the zygote hasn't had the flag passed to it as a
  # GC runtime option (as we haven't rebooted yet).
  # property are set, but that flag has not produced an effect on the system (as
  # we haven't rebooted yet).
  local context="Flag set, before reboot"
  check_device_config_flag "$context" "$flag" "$value"
  check_system_property "$context" "$prop" "$value"
  check_no_zygote_gc_runtime_option "$context" "$gc_runtime_option"
  $check_no_effect "$context"

  # Reboot device for the flag value to take effect.
  reboot_and_wait_for_device
  context="Flag set, after 1st reboot"
  check_device_config_flag "$context" "$flag" "$value"
  check_system_property "$context" "$prop" "$value"
  check_zygote_gc_runtime_option "$context" "$gc_runtime_option"
  $check_effect "$context"

  # Reboot device a second time and check that the state has persisted.
  reboot_and_wait_for_device
  context="Flag set, after 2nd reboot"
  check_device_config_flag "$context" "$flag" "$value"
  check_system_property "$context" "$prop" "$value"
  check_zygote_gc_runtime_option "$context" "$gc_runtime_option"
  $check_effect "$context"

  say "Unsetting device configuration flag..."
  adb shell device_config delete "$namespace" "$flag" >/dev/null
@@ -224,9 +252,13 @@ function test_android_runtime_flag {
  context="Flag unset, after 3rd reboot"
  check_no_device_config_flag "$context" "$flag"
  check_no_system_property "$context" "$prop"
  check_no_zygote_gc_runtime_option "$context" "$gc_runtime_option"
  $check_no_effect "$context"
}


# Pre-test actions.
# =================

# Enumerate Zygote processes.
case $(adb shell getprop ro.zygote) in
  (zygote32) zygotes="zygote";;
@@ -235,8 +267,53 @@ case $(adb shell getprop ro.zygote) in
esac

# Test "enable_generational_cc" flag values.
test_android_runtime_flag enable_generational_cc false nogenerational_cc
test_android_runtime_flag enable_generational_cc true generational_cc
# ==========================================

function check_nogenerational_cc {
  check_zygote_gc_runtime_option "$1" nogenerational_cc
}
function check_no_nogenerational_cc {
  check_no_zygote_gc_runtime_option "$1" nogenerational_cc
}

function check_generational_cc {
  check_zygote_gc_runtime_option "$1" generational_cc
}
function check_no_generational_cc {
  check_no_zygote_gc_runtime_option "$1" generational_cc
}

test_android_runtime_flag \
  enable_generational_cc false check_nogenerational_cc check_no_nogenerational_cc
test_android_runtime_flag \
  enable_generational_cc true check_generational_cc check_no_generational_cc

# Test "enable_apex_image" flag values.
# =====================================

default_boot_image_message="Using default boot image"
function check_default_boot_image {
  check_android_runtime_message "$1" "$default_boot_image_message"
}
function check_no_default_boot_image {
  check_no_android_runtime_message "$1" "$default_boot_image_message"
}

apex_boot_image_message="Using Apex boot image: '-Ximage:/system/framework/apex.art'"
function check_apex_boot_image {
  check_android_runtime_message "$1" "$apex_boot_image_message"
}
function check_no_apex_boot_image {
  check_no_android_runtime_message "$1" "$apex_boot_image_message"
}

test_android_runtime_flag \
  enable_apex_image false check_default_boot_image check_no_default_boot_image
test_android_runtime_flag \
  enable_apex_image true check_apex_boot_image check_no_apex_boot_image

# Post-test actions.
# ==================

if [[ "$exit_status" -eq 0 ]]; then
  banner "All tests passed."