Merge "Log storage savings info with the GlobalHibernatedApps atom" into sc-dev
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
+ '}';
|
+ '}';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user