Merge "Add Intelligence rc" into main
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 @@
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/camera/lyric.mk b/camera/lyric.mk
index 0ec1d6d..adffb74 100644
--- a/camera/lyric.mk
+++ b/camera/lyric.mk
@@ -49,10 +49,6 @@
vendor/google/camera/google_3a/libs_v4/gAF \
vendor/google/camera/google_3a/libs_v4/gafd \
vendor/google/camera/google_3a/libs_v4/gHAWB/native_coverage
-
-# Calibration tool for debug builds
-PRODUCT_PACKAGES_DEBUG += tarasque_test
-PRODUCT_PACKAGES_DEBUG += ProtoCalibGenerator
endif # BUILD_LYRIC_FROM_SOURCE
# Init-time log settings for Google 3A
@@ -73,3 +69,7 @@
# sepolicy dir is added in dump.mk.
# Make doesn't deduplicate sepolicy dirs, so including it here causes build errors.
+
+# Calibration tools for debug builds
+PRODUCT_PACKAGES_DEBUG += tarasque_test
+PRODUCT_PACKAGES_DEBUG += ProtoCalibGenerator
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