Merge "Prune unused static shared libraries"
This commit is contained in:
@@ -725,6 +725,9 @@ final class DeletePackageHelper {
|
||||
Log.i(TAG, "Observer no longer exists.");
|
||||
} //end catch
|
||||
notifyPackageChangeObserversOnDelete(packageName, versionCode);
|
||||
|
||||
// Prune unused static shared libraries which have been cached a period of time
|
||||
mPm.schedulePruneUnusedStaticSharedLibraries(true /* delay */);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -3183,6 +3183,9 @@ final class InstallPackageHelper {
|
||||
mPm.notifyInstallObserver(res, installObserver);
|
||||
}
|
||||
|
||||
// Prune unused static shared libraries which have been cached a period of time
|
||||
mPm.schedulePruneUnusedStaticSharedLibraries(true /* delay */);
|
||||
|
||||
// Log tracing if needed
|
||||
if (installArgs.mTraceMethod != null) {
|
||||
Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, installArgs.mTraceMethod,
|
||||
|
||||
@@ -21,6 +21,7 @@ import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
|
||||
import static com.android.server.pm.PackageManagerService.CHECK_PENDING_INTEGRITY_VERIFICATION;
|
||||
import static com.android.server.pm.PackageManagerService.CHECK_PENDING_VERIFICATION;
|
||||
import static com.android.server.pm.PackageManagerService.DEBUG_INSTALL;
|
||||
import static com.android.server.pm.PackageManagerService.DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD;
|
||||
import static com.android.server.pm.PackageManagerService.DEFAULT_VERIFICATION_RESPONSE;
|
||||
import static com.android.server.pm.PackageManagerService.DEFERRED_NO_KILL_INSTALL_OBSERVER;
|
||||
import static com.android.server.pm.PackageManagerService.DEFERRED_NO_KILL_POST_DELETE;
|
||||
@@ -32,6 +33,7 @@ import static com.android.server.pm.PackageManagerService.INSTANT_APP_RESOLUTION
|
||||
import static com.android.server.pm.PackageManagerService.INTEGRITY_VERIFICATION_COMPLETE;
|
||||
import static com.android.server.pm.PackageManagerService.PACKAGE_VERIFIED;
|
||||
import static com.android.server.pm.PackageManagerService.POST_INSTALL;
|
||||
import static com.android.server.pm.PackageManagerService.PRUNE_UNUSED_STATIC_SHARED_LIBRARIES;
|
||||
import static com.android.server.pm.PackageManagerService.SEND_PENDING_BROADCAST;
|
||||
import static com.android.server.pm.PackageManagerService.SNAPSHOT_UNCORK;
|
||||
import static com.android.server.pm.PackageManagerService.TAG;
|
||||
@@ -53,9 +55,12 @@ import android.os.Process;
|
||||
import android.os.Trace;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.util.Slog;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Part of PackageManagerService that handles events.
|
||||
*/
|
||||
@@ -376,6 +381,18 @@ final class PackageHandler extends Handler {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PRUNE_UNUSED_STATIC_SHARED_LIBRARIES: {
|
||||
try {
|
||||
mPm.pruneUnusedStaticSharedLibraries(Long.MAX_VALUE,
|
||||
Settings.Global.getLong(mPm.mContext.getContentResolver(),
|
||||
Settings.Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
|
||||
DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD));
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Failed to prune unused static shared libraries :"
|
||||
+ e.getMessage());
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -303,6 +303,7 @@ import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.BiConsumer;
|
||||
@@ -918,6 +919,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
static final int CHECK_PENDING_INTEGRITY_VERIFICATION = 26;
|
||||
static final int DOMAIN_VERIFICATION = 27;
|
||||
static final int SNAPSHOT_UNCORK = 28;
|
||||
static final int PRUNE_UNUSED_STATIC_SHARED_LIBRARIES = 29;
|
||||
|
||||
static final int DEFERRED_NO_KILL_POST_DELETE_DELAY_MS = 3 * 1000;
|
||||
private static final int DEFERRED_NO_KILL_INSTALL_OBSERVER_DELAY_MS = 500;
|
||||
@@ -927,11 +929,16 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
private static final long BROADCAST_DELAY_DURING_STARTUP = 10 * 1000L; // 10 seconds (in millis)
|
||||
private static final long BROADCAST_DELAY = 1 * 1000L; // 1 second (in millis)
|
||||
|
||||
private static final long PRUNE_UNUSED_STATIC_SHARED_LIBRARIES_DELAY =
|
||||
TimeUnit.MINUTES.toMillis(3); // 3 minutes
|
||||
|
||||
// When the service constructor finished plus a delay (used for broadcast delay computation)
|
||||
private long mServiceStartWithDelay;
|
||||
|
||||
private static final long DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD =
|
||||
2 * 60 * 60 * 1000L; /* two hours */
|
||||
private static final long FREE_STORAGE_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD =
|
||||
TimeUnit.HOURS.toMillis(2); /* two hours */
|
||||
static final long DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD =
|
||||
TimeUnit.DAYS.toMillis(7); /* 7 days */
|
||||
|
||||
final UserManagerService mUserManager;
|
||||
|
||||
@@ -1255,6 +1262,12 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mHandler.sendMessageDelayed(message, DEFERRED_NO_KILL_POST_DELETE_DELAY_MS);
|
||||
}
|
||||
|
||||
void schedulePruneUnusedStaticSharedLibraries(boolean delay) {
|
||||
mHandler.removeMessages(PRUNE_UNUSED_STATIC_SHARED_LIBRARIES);
|
||||
mHandler.sendEmptyMessageDelayed(PRUNE_UNUSED_STATIC_SHARED_LIBRARIES,
|
||||
delay ? PRUNE_UNUSED_STATIC_SHARED_LIBRARIES_DELAY : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void requestChecksums(@NonNull String packageName, boolean includeSplits,
|
||||
@Checksum.TypeMask int optional,
|
||||
@@ -2913,7 +2926,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
if (internalVolume && pruneUnusedStaticSharedLibraries(bytes,
|
||||
android.provider.Settings.Global.getLong(mContext.getContentResolver(),
|
||||
Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
|
||||
DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD))) {
|
||||
FREE_STORAGE_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD))) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2968,7 +2981,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
throw new IOException("Failed to free " + bytes + " on storage device at " + file);
|
||||
}
|
||||
|
||||
private boolean pruneUnusedStaticSharedLibraries(long neededSpace, long maxCachePeriod)
|
||||
boolean pruneUnusedStaticSharedLibraries(long neededSpace, long maxCachePeriod)
|
||||
throws IOException {
|
||||
final StorageManager storage = mInjector.getSystemService(StorageManager.class);
|
||||
final File volume = storage.findPathForUuid(StorageManager.UUID_PRIVATE_INTERNAL);
|
||||
@@ -8464,6 +8477,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
});
|
||||
|
||||
mBackgroundDexOptService.systemReady();
|
||||
|
||||
// Prune unused static shared libraries which have been cached a period of time
|
||||
schedulePruneUnusedStaticSharedLibraries(false /* delay */);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user