Merge "Add basic dumping to AppHibernationService" am: 8596c6e90e

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1597057

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I603e07b689562215c80fee47d68f9220f7da7396
This commit is contained in:
Rajeev Kumar
2021-02-28 17:03:07 +00:00
committed by Automerger Merge Worker
3 changed files with 56 additions and 0 deletions

View File

@@ -57,10 +57,13 @@ import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.SystemService; import com.android.server.SystemService;
import java.io.File; import java.io.File;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -511,6 +514,37 @@ public final class AppHibernationService extends SystemService {
return mIsServiceEnabled; return mIsServiceEnabled;
} }
private void dump(PrintWriter pw) {
// Check usage stats permission since hibernation indirectly informs usage.
if (!DumpUtils.checkDumpAndUsageStatsPermission(getContext(), TAG, pw)) return;
IndentingPrintWriter idpw = new IndentingPrintWriter(pw, " ");
synchronized (mLock) {
final int userCount = mUserStates.size();
for (int i = 0; i < userCount; i++) {
final int userId = mUserStates.keyAt(i);
idpw.print("User Level Hibernation States, ");
idpw.printPair("user", userId);
idpw.println();
Map<String, UserLevelState> stateMap = mUserStates.get(i);
idpw.increaseIndent();
for (UserLevelState state : stateMap.values()) {
idpw.print(state);
idpw.println();
}
idpw.decreaseIndent();
}
idpw.println();
idpw.print("Global Level Hibernation States");
idpw.println();
for (GlobalLevelState state : mGlobalHibernationStates.values()) {
idpw.print(state);
idpw.println();
}
}
}
private final AppHibernationServiceStub mServiceStub = new AppHibernationServiceStub(this); private final AppHibernationServiceStub mServiceStub = new AppHibernationServiceStub(this);
static final class AppHibernationServiceStub extends IAppHibernationService.Stub { static final class AppHibernationServiceStub extends IAppHibernationService.Stub {
@@ -547,6 +581,12 @@ public final class AppHibernationService extends SystemService {
new AppHibernationShellCommand(mService).exec(this, in, out, err, args, callback, new AppHibernationShellCommand(mService).exec(this, in, out, err, args, callback,
resultReceiver); resultReceiver);
} }
@Override
protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout,
@Nullable String[] args) {
mService.dump(fout);
}
} }
// Broadcast receiver for package add/removal events // Broadcast receiver for package add/removal events

View File

@@ -22,4 +22,12 @@ package com.android.server.apphibernation;
final class GlobalLevelState { final class GlobalLevelState {
public String packageName; public String packageName;
public boolean hibernated; public boolean hibernated;
@Override
public String toString() {
return "GlobalLevelState{"
+ "packageName='" + packageName + '\''
+ ", hibernated=" + hibernated
+ '}';
}
} }

View File

@@ -22,4 +22,12 @@ package com.android.server.apphibernation;
final class UserLevelState { final class UserLevelState {
public String packageName; public String packageName;
public boolean hibernated; public boolean hibernated;
@Override
public String toString() {
return "UserLevelState{"
+ "packageName='" + packageName + '\''
+ ", hibernated=" + hibernated
+ '}';
}
} }