From 062ab64ffbc3849c70cf18a22d9256ba61bba42f Mon Sep 17 00:00:00 2001 From: Kevin Han Date: Mon, 29 Mar 2021 22:08:11 -0700 Subject: [PATCH] Add last time unhibernated to dumped info Add the last time a package was unhibernated to app hibernation dump. This can be used in bug reports or dumps to know that an app was recently unhibernated. Bug: 183142988 Test: adb shell dumpsys app_hibernation Change-Id: I5bc1969d9385206b43e73b42d9d2067a66e9b609 --- .../server/apphibernation/AppHibernationService.java | 2 ++ .../server/apphibernation/GlobalLevelState.java | 12 +++++++++++- .../server/apphibernation/UserLevelState.java | 11 ++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java index 5a99e0e77a6ce..e8b3a24b751d8 100644 --- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java +++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java @@ -362,6 +362,7 @@ public final class AppHibernationService extends SystemService { UserLevelState pkgState) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "unhibernatePackage"); pkgState.hibernated = false; + pkgState.lastUnhibernatedMs = System.currentTimeMillis(); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } @@ -383,6 +384,7 @@ public final class AppHibernationService extends SystemService { private void unhibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "unhibernatePackageGlobally"); state.hibernated = false; + state.lastUnhibernatedMs = System.currentTimeMillis(); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } diff --git a/services/core/java/com/android/server/apphibernation/GlobalLevelState.java b/services/core/java/com/android/server/apphibernation/GlobalLevelState.java index baa84b7070ff3..f4433a7fa5f63 100644 --- a/services/core/java/com/android/server/apphibernation/GlobalLevelState.java +++ b/services/core/java/com/android/server/apphibernation/GlobalLevelState.java @@ -16,18 +16,28 @@ package com.android.server.apphibernation; +import android.annotation.CurrentTimeMillisLong; + +import java.text.SimpleDateFormat; + /** * Data class that contains global hibernation state for a package. */ final class GlobalLevelState { + // Only show day for privacy purposes. + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + public String packageName; public boolean hibernated; + @CurrentTimeMillisLong + public long lastUnhibernatedMs; @Override public String toString() { return "GlobalLevelState{" + "packageName='" + packageName + '\'' - + ", hibernated=" + hibernated + + ", hibernated=" + hibernated + '\'' + + ", lastUnhibernated=" + DATE_FORMAT.format(lastUnhibernatedMs) + '}'; } } diff --git a/services/core/java/com/android/server/apphibernation/UserLevelState.java b/services/core/java/com/android/server/apphibernation/UserLevelState.java index 272d3d1122a14..b75b19d8df744 100644 --- a/services/core/java/com/android/server/apphibernation/UserLevelState.java +++ b/services/core/java/com/android/server/apphibernation/UserLevelState.java @@ -16,18 +16,27 @@ package com.android.server.apphibernation; +import android.annotation.CurrentTimeMillisLong; + +import java.text.SimpleDateFormat; + /** * Data class that contains hibernation state info of a package for a user. */ final class UserLevelState { + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public String packageName; public boolean hibernated; + @CurrentTimeMillisLong + public long lastUnhibernatedMs; @Override public String toString() { return "UserLevelState{" + "packageName='" + packageName + '\'' - + ", hibernated=" + hibernated + + ", hibernated=" + hibernated + '\'' + + ", lastUnhibernated=" + DATE_FORMAT.format(lastUnhibernatedMs) + '}'; } }