From ed6231e4ef5aa079ac85d974146339795eef4712 Mon Sep 17 00:00:00 2001 From: Lee George Thomas Date: Sat, 8 Jul 2023 00:28:03 +0000 Subject: [PATCH] Signal lmkd to start psi monitoring after boot. To save CPU cycles during boot for low resource device a new configuration is added to delay registration of psi monitoring until boot is complete. ActivityManagerService will send an lmkd message to start psi monitoring after boot. Bug: 288566858 Test: Build, boot and verified boot logs to confirm the behavior. (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:9c63a06ddc00747d0f5901e4fb29025c9b1acdee) Merged-In: Iee5cecdae54304b092c6a1801f3814e13a919be2 Change-Id: Iee5cecdae54304b092c6a1801f3814e13a919be2 --- .../com/android/server/am/ActivityManagerService.java | 3 +++ .../core/java/com/android/server/am/ProcessList.java | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index a5662ed6f7fab..b837688a29b2f 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -5176,6 +5176,9 @@ public class ActivityManagerService extends IActivityManager.Stub // Tell anyone interested that we are done booting! SystemProperties.set("sys.boot_completed", "1"); + // Start PSI monitoring in LMKD if it was skipped earlier. + ProcessList.startPsiMonitoringAfterBoot(); + // And trigger dev.bootcomplete if we are not showing encryption progress if (!"trigger_restart_min_framework".equals(VoldProperties.decrypt().orElse("")) || "".equals(VoldProperties.encrypt_progress().orElse(""))) { diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 2d6b875c1e3fc..bce31734d0648 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -350,6 +350,7 @@ public final class ProcessList { static final byte LMK_UPDATE_PROPS = 7; static final byte LMK_KILL_OCCURRED = 8; // Msg to subscribed clients on kill occurred event static final byte LMK_STATE_CHANGED = 9; // Msg to subscribed clients on state changed + static final byte LMK_START_MONITORING = 9; // Start monitoring if delayed earlier // Low Memory Killer Daemon command codes. // These must be kept in sync with async_event_type definitions in lmkd.h @@ -1483,6 +1484,15 @@ public final class ProcessList { return true; } + /** + * {@hide} + */ + public static void startPsiMonitoringAfterBoot() { + ByteBuffer buf = ByteBuffer.allocate(4); + buf.putInt(LMK_START_MONITORING); + writeLmkd(buf, null); + } + private static boolean writeLmkd(ByteBuffer buf, ByteBuffer repl) { if (!sLmkdConnection.isConnected()) { // try to connect immediately and then keep retrying