summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gavin Corkery <gavincorkery@google.com> 2020-04-17 00:56:38 +0100
committer Gavin Corkery <gavincorkery@google.com> 2020-04-17 14:41:21 +0100
commiteb52a694445a7fd5d9267d400995ebf2e53bbc67 (patch)
tree3691a62d62a1a7141d3a8007a10bbaff5bd13ef8
parentc0fe0ae29f7de3cfeaad22563cf1e501235b4693 (diff)
Ensure userspace reboot is supported before logging
Ensure that userspace reboot is supported before performing any actions. Any call into UserspaceRebootLogger in the case that userspace reboot is not supported should be a no-op. It is unexpected to call into this class on an unsupported device, so log with ASSERT priority in this case. Test: atest UserspaceRebootHostTest Bug: 153648276 Change-Id: Ic3041ff3abe0d2641d3d99fc8e816f1f5c491a34
-rw-r--r--services/core/java/com/android/server/UserspaceRebootLogger.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/UserspaceRebootLogger.java b/services/core/java/com/android/server/UserspaceRebootLogger.java
index 9a9374ce1822..2403b637581f 100644
--- a/services/core/java/com/android/server/UserspaceRebootLogger.java
+++ b/services/core/java/com/android/server/UserspaceRebootLogger.java
@@ -24,6 +24,7 @@ import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPOR
import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__USER_ENCRYPTION_STATE__LOCKED;
import static com.android.internal.util.FrameworkStatsLog.USERSPACE_REBOOT_REPORTED__USER_ENCRYPTION_STATE__UNLOCKED;
+import android.os.PowerManager;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.text.TextUtils;
@@ -53,8 +54,15 @@ public final class UserspaceRebootLogger {
/**
* Modifies internal state to note that {@code UserspaceRebootReported} atom needs to be
* logged on the next successful boot.
+ *
+ * <p>This call should only be made on devices supporting userspace reboot.
*/
public static void noteUserspaceRebootWasRequested() {
+ if (!PowerManager.isRebootingUserspaceSupportedImpl()) {
+ Slog.wtf(TAG, "Userspace reboot is not supported.");
+ return;
+ }
+
SystemProperties.set(USERSPACE_REBOOT_SHOULD_LOG_PROPERTY, "1");
SystemProperties.set(USERSPACE_REBOOT_LAST_STARTED_PROPERTY,
String.valueOf(SystemClock.elapsedRealtime()));
@@ -64,16 +72,30 @@ public final class UserspaceRebootLogger {
* Updates internal state on boot after successful userspace reboot.
*
* <p>Should be called right before framework sets {@code sys.boot_completed} property.
+ *
+ * <p>This call should only be made on devices supporting userspace reboot.
*/
public static void noteUserspaceRebootSuccess() {
+ if (!PowerManager.isRebootingUserspaceSupportedImpl()) {
+ Slog.wtf(TAG, "Userspace reboot is not supported.");
+ return;
+ }
+
SystemProperties.set(USERSPACE_REBOOT_LAST_FINISHED_PROPERTY,
String.valueOf(SystemClock.elapsedRealtime()));
}
/**
* Returns {@code true} if {@code UserspaceRebootReported} atom should be logged.
+ *
+ * <p>This call should only be made on devices supporting userspace reboot.
*/
public static boolean shouldLogUserspaceRebootEvent() {
+ if (!PowerManager.isRebootingUserspaceSupportedImpl()) {
+ Slog.wtf(TAG, "Userspace reboot is not supported.");
+ return false;
+ }
+
return SystemProperties.getBoolean(USERSPACE_REBOOT_SHOULD_LOG_PROPERTY, false);
}
@@ -83,8 +105,15 @@ public final class UserspaceRebootLogger {
* <p>Should be called in the end of {@link
* com.android.server.am.ActivityManagerService#finishBooting()} method, after framework have
* tried to proactivelly unlock storage of the primary user.
+ *
+ * <p>This call should only be made on devices supporting userspace reboot.
*/
public static void logEventAsync(boolean userUnlocked, Executor executor) {
+ if (!PowerManager.isRebootingUserspaceSupportedImpl()) {
+ Slog.wtf(TAG, "Userspace reboot is not supported.");
+ return;
+ }
+
final int outcome = computeOutcome();
final long durationMillis;
if (outcome == USERSPACE_REBOOT_REPORTED__OUTCOME__SUCCESS) {