Merge "Log storage savings info with the GlobalHibernatedApps atom" into sc-dev

This commit is contained in:
Zhen Zhang
2021-06-23 18:25:44 +00:00
committed by Android (Google) Code Review
6 changed files with 32 additions and 6 deletions

View File

@@ -39,4 +39,5 @@ message GlobalLevelHibernationStatesProto {
message GlobalLevelHibernationStateProto { message GlobalLevelHibernationStateProto {
optional string package_name = 1; optional string package_name = 1;
optional bool hibernated = 2; optional bool hibernated = 2;
optional int64 saved_byte = 3;
} }

View File

@@ -1151,6 +1151,8 @@ public abstract class PackageManagerInternal implements PackageSettingsSnapshotP
/** /**
* Deletes the OAT artifacts of a package. * Deletes the OAT artifacts of a package.
* @param packageName a specific package
* @return the number of freed bytes or -1 if there was an error in the process.
*/ */
public abstract void deleteOatArtifactsOfPackage(String packageName); public abstract long deleteOatArtifactsOfPackage(String packageName);
} }

View File

@@ -456,7 +456,9 @@ public final class AppHibernationService extends SystemService {
private void hibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) { private void hibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) {
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "hibernatePackageGlobally"); Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "hibernatePackageGlobally");
if (mOatArtifactDeletionEnabled) { if (mOatArtifactDeletionEnabled) {
mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName); state.savedByte = Math.max(
mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName),
0);
} }
state.hibernated = true; state.hibernated = true;
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
@@ -469,6 +471,7 @@ public final class AppHibernationService extends SystemService {
private void unhibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) { private void unhibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) {
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "unhibernatePackageGlobally"); Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "unhibernatePackageGlobally");
state.hibernated = false; state.hibernated = false;
state.savedByte = 0;
state.lastUnhibernatedMs = System.currentTimeMillis(); state.lastUnhibernatedMs = System.currentTimeMillis();
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
} }
@@ -943,6 +946,9 @@ public final class AppHibernationService extends SystemService {
} }
private final class StatsPullAtomCallbackImpl implements StatsPullAtomCallback { private final class StatsPullAtomCallbackImpl implements StatsPullAtomCallback {
private static final int MEGABYTE_IN_BYTES = 1000000;
@Override @Override
public int onPullAtom(int atomTag, @NonNull List<StatsEvent> data) { public int onPullAtom(int atomTag, @NonNull List<StatsEvent> data) {
if (!isAppHibernationEnabled() if (!isAppHibernationEnabled()
@@ -969,12 +975,21 @@ public final class AppHibernationService extends SystemService {
break; break;
case FrameworkStatsLog.GLOBAL_HIBERNATED_APPS: case FrameworkStatsLog.GLOBAL_HIBERNATED_APPS:
int hibernatedAppCount = 0; int hibernatedAppCount = 0;
long storage_saved_byte = 0;
synchronized (mLock) { synchronized (mLock) {
for (GlobalLevelState state : mGlobalHibernationStates.values()) { for (GlobalLevelState state : mGlobalHibernationStates.values()) {
if (state.hibernated) hibernatedAppCount++; if (state.hibernated) {
hibernatedAppCount++;
storage_saved_byte += state.savedByte;
}
} }
} }
data.add(FrameworkStatsLog.buildStatsEvent(atomTag, hibernatedAppCount)); data.add(
FrameworkStatsLog.buildStatsEvent(
atomTag,
hibernatedAppCount,
storage_saved_byte / MEGABYTE_IN_BYTES)
);
break; break;
default: default:
return StatsManager.PULL_SKIP; return StatsManager.PULL_SKIP;

View File

@@ -41,6 +41,7 @@ final class GlobalLevelHibernationProto implements ProtoReadWriter<List<GlobalLe
GlobalLevelState state = data.get(i); GlobalLevelState state = data.get(i);
stream.write(GlobalLevelHibernationStateProto.PACKAGE_NAME, state.packageName); stream.write(GlobalLevelHibernationStateProto.PACKAGE_NAME, state.packageName);
stream.write(GlobalLevelHibernationStateProto.HIBERNATED, state.hibernated); stream.write(GlobalLevelHibernationStateProto.HIBERNATED, state.hibernated);
stream.write(GlobalLevelHibernationStateProto.SAVED_BYTE, state.savedByte);
stream.end(token); stream.end(token);
} }
} }
@@ -66,6 +67,10 @@ final class GlobalLevelHibernationProto implements ProtoReadWriter<List<GlobalLe
state.hibernated = state.hibernated =
stream.readBoolean(GlobalLevelHibernationStateProto.HIBERNATED); stream.readBoolean(GlobalLevelHibernationStateProto.HIBERNATED);
break; break;
case (int) GlobalLevelHibernationStateProto.SAVED_BYTE:
state.savedByte =
stream.readLong(GlobalLevelHibernationStateProto.SAVED_BYTE);
break;
default: default:
Slog.w(TAG, "Undefined field in proto: " + stream.getFieldNumber()); Slog.w(TAG, "Undefined field in proto: " + stream.getFieldNumber());
} }

View File

@@ -29,6 +29,8 @@ final class GlobalLevelState {
public String packageName; public String packageName;
public boolean hibernated; public boolean hibernated;
// The number of saved bytes from the current hibernation. It will be 0 if not in hibernation.
public long savedByte;
@CurrentTimeMillisLong @CurrentTimeMillisLong
public long lastUnhibernatedMs; public long lastUnhibernatedMs;
@@ -37,6 +39,7 @@ final class GlobalLevelState {
return "GlobalLevelState{" return "GlobalLevelState{"
+ "packageName='" + packageName + '\'' + "packageName='" + packageName + '\''
+ ", hibernated=" + hibernated + '\'' + ", hibernated=" + hibernated + '\''
+ ", savedByte=" + savedByte + '\''
+ ", lastUnhibernated=" + DATE_FORMAT.format(lastUnhibernatedMs) + ", lastUnhibernated=" + DATE_FORMAT.format(lastUnhibernatedMs)
+ '}'; + '}';
} }

View File

@@ -28148,8 +28148,8 @@ public class PackageManagerService extends IPackageManager.Stub
} }
@Override @Override
public void deleteOatArtifactsOfPackage(String packageName) { public long deleteOatArtifactsOfPackage(String packageName) {
PackageManagerService.this.deleteOatArtifactsOfPackage(packageName); return PackageManagerService.this.deleteOatArtifactsOfPackage(packageName);
} }
@Override @Override