diff --git a/aoc/aoc.mk b/aoc/aoc.mk index 9ee4517..13d849c 100644 --- a/aoc/aoc.mk +++ b/aoc/aoc.mk @@ -13,6 +13,11 @@ PRODUCT_COPY_FILES += \ device/google/gs-common/aoc/conf/init.aoc.daemon.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.aoc.rc endif +ifneq ($(wildcard vendor/google/whitechapel/aoc/aocx/aidl/aocx/framework_compatibility_matrix.xml),) +DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE += \ + vendor/google/whitechapel/aoc/aocx/aidl/aocx/framework_compatibility_matrix.xml +endif + # AoC debug support PRODUCT_PACKAGES_DEBUG += \ aocdump \ diff --git a/aoc/sepolicy/service_contexts b/aoc/sepolicy/service_contexts index de31e51..80346c8 100644 --- a/aoc/sepolicy/service_contexts +++ b/aoc/sepolicy/service_contexts @@ -1 +1 @@ -aocx.IAocx u:object_r:aocx:s0 +aocx.IAocx/default u:object_r:aocx:s0 diff --git a/performance/experiments/Android.bp b/performance/experiments/Android.bp new file mode 100644 index 0000000..a2f7ebe --- /dev/null +++ b/performance/experiments/Android.bp @@ -0,0 +1,10 @@ +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +sh_binary { + name: "pixel-experiments-recovery.sh", + src: "pixel-experiments-recovery.sh", + vendor: true, + init_rc: ["pixel-experiments-recovery.rc"], +} diff --git a/performance/experiments/experiments.mk b/performance/experiments/experiments.mk new file mode 100644 index 0000000..191332d --- /dev/null +++ b/performance/experiments/experiments.mk @@ -0,0 +1,5 @@ +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/performance/experiments/sepolicy + +PRODUCT_PACKAGES += pixel-experiments-recovery.sh + +include device/google/gs-common/performance/experiments/kswapd/kswapd.mk diff --git a/performance/experiments/kswapd/Android.bp b/performance/experiments/kswapd/Android.bp new file mode 100644 index 0000000..23af711 --- /dev/null +++ b/performance/experiments/kswapd/Android.bp @@ -0,0 +1,10 @@ +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +prebuilt_etc { + name: "pixel-kswapd-experiment.rc", + src: "pixel-kswapd-experiment.rc", + vendor: true, + sub_dir: "init", +} diff --git a/performance/experiments/kswapd/kswapd.mk b/performance/experiments/kswapd/kswapd.mk new file mode 100644 index 0000000..15d762f --- /dev/null +++ b/performance/experiments/kswapd/kswapd.mk @@ -0,0 +1 @@ +PRODUCT_PACKAGES += pixel-kswapd-experiment.rc diff --git a/performance/experiments/kswapd/pixel-kswapd-experiment.rc b/performance/experiments/kswapd/pixel-kswapd-experiment.rc new file mode 100644 index 0000000..36dcac3 --- /dev/null +++ b/performance/experiments/kswapd/pixel-kswapd-experiment.rc @@ -0,0 +1,28 @@ +# Kswapd experiment - allow kswapd to run on all cores. We only target zuma and +# zumapro because these are the only platforms where kswapd avoids big cores by +# default. + +on property:vendor.perf.allow_experiments=1 \ + && property:ro.board.platform=zuma \ + && property:vendor.pixel.system.phenotype.Perf__kswapd_experiment=true + write /sys/kernel/vendor_mm/kswapd_cpu_affinity 1ff + +on property:vendor.perf.allow_experiments=1 \ + && property:ro.board.platform=zumapro \ + && property:vendor.pixel.system.phenotype.Perf__kswapd_experiment=true + write /sys/kernel/vendor_mm/kswapd_cpu_affinity ff + + +# Kswapd experiment rampdown - restore CPU affinity to the default. + +on property:vendor.perf.allow_experiments=1 \ + && property:ro.board.platform=zuma \ + && property:vendor.pixel.system.phenotype.Perf__kswapd_experiment="" + # Value is from device/google/zuma/conf/init.zuma.rc + write /sys/kernel/vendor_mm/kswapd_cpu_affinity ff + +on property:vendor.perf.allow_experiments=1 \ + && property:ro.board.platform=zumapro \ + && property:vendor.pixel.system.phenotype.Perf__kswapd_experiment="" + # Value is from device/google/zumapro/conf/init.zumapro.soc.rc + write /sys/kernel/vendor_mm/kswapd_cpu_affinity 7f diff --git a/performance/experiments/pixel-experiments-recovery.rc b/performance/experiments/pixel-experiments-recovery.rc new file mode 100644 index 0000000..a8247c3 --- /dev/null +++ b/performance/experiments/pixel-experiments-recovery.rc @@ -0,0 +1,17 @@ +# pixel-experiments-recovery.sh waits Perf__experiments_delay_seconds and sets +# vendor.perf.allow_experiments=1, triggering experiments. +service pixel-experiments-recovery /vendor/bin/pixel-experiments-recovery.sh \ + ${vendor.pixel.system.phenotype.Perf__experiments_delay_seconds} + class main + user root + group root system + oneshot + disabled + +# vendor.pixel.system.phenotype.Perf__xxx properties are set sometime after the +# device is unlocked for the first time. The check for sys.boot_completed is not +# strictly needed, but will prevent surprises if for some reason the property +# is set early. +on property:sys.boot_completed=1 && \ + property:vendor.pixel.system.phenotype.Perf__experiments_delay_seconds=* + restart pixel-experiments-recovery diff --git a/performance/experiments/pixel-experiments-recovery.sh b/performance/experiments/pixel-experiments-recovery.sh new file mode 100755 index 0000000..188222e --- /dev/null +++ b/performance/experiments/pixel-experiments-recovery.sh @@ -0,0 +1,15 @@ +#!/vendor/bin/sh + +# This script delays experiments by the specified amount of seconds. The delay is not needed for +# the normal operation, but becomes essential for the rare case (which "should not happen") where +# an experiment causes really bad issues (e.g. crashes the kernel). In such case the delay gives +# GMSCore an opportunity to fetch fresh experiments snapshot (with the bad experiment disabled). +# +# See go/pixel-perf-experiment-whatif for more info. + +delay_seconds="$1" + +if [ -n "$delay_seconds" ]; then + sleep "$delay_seconds" + /vendor/bin/setprop vendor.perf.allow_experiments 1 +fi diff --git a/performance/experiments/sepolicy/file_contexts b/performance/experiments/sepolicy/file_contexts new file mode 100644 index 0000000..7364807 --- /dev/null +++ b/performance/experiments/sepolicy/file_contexts @@ -0,0 +1 @@ +/vendor/bin/pixel-experiments-recovery\.sh u:object_r:pixel-experiments-recovery-sh_exec:s0 diff --git a/performance/experiments/sepolicy/pixel-experiments-recovery.sh.te b/performance/experiments/sepolicy/pixel-experiments-recovery.sh.te new file mode 100644 index 0000000..2da555b --- /dev/null +++ b/performance/experiments/sepolicy/pixel-experiments-recovery.sh.te @@ -0,0 +1,10 @@ +# Rules for pixel-experiments-recovery.sh + +type pixel-experiments-recovery-sh, domain; +type pixel-experiments-recovery-sh_exec, exec_type, vendor_file_type, file_type; + +init_daemon_domain(pixel-experiments-recovery-sh) + +# Allow "setprop vendor.perf.allow_experiments". +allow pixel-experiments-recovery-sh vendor_toolbox_exec:file { execute_no_trans }; +set_prop(pixel-experiments-recovery-sh, vendor_perf_allow_experiments_prop) diff --git a/performance/experiments/sepolicy/property.te b/performance/experiments/sepolicy/property.te new file mode 100644 index 0000000..e43312c --- /dev/null +++ b/performance/experiments/sepolicy/property.te @@ -0,0 +1,3 @@ +# Properties shared between experiments. + +vendor_internal_prop(vendor_perf_allow_experiments_prop) diff --git a/performance/experiments/sepolicy/property_contexts b/performance/experiments/sepolicy/property_contexts new file mode 100644 index 0000000..50de9c1 --- /dev/null +++ b/performance/experiments/sepolicy/property_contexts @@ -0,0 +1 @@ +vendor.perf.allow_experiments u:object_r:vendor_perf_allow_experiments_prop:s0