dexopt: Add listeners when packages are updated by bg-dexopt

The plan is to use it for iorap to purge its traces when a package
is updated.

Bug: 150640692
Test: adb shell cmd package bg-dexopt-job com.google.android.GoogleCamera
Change-Id: I45f4dacc1630c4afd7cf2321371a04f79ef18d9e
This commit is contained in:
Igor Murashkin
2020-04-02 13:54:43 -07:00
parent fcbe6c4359
commit 87776bdcf0
2 changed files with 48 additions and 0 deletions

View File

@@ -34,18 +34,21 @@ import android.os.Parcel;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
import android.util.ArraySet;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.IoThread;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.pm.BackgroundDexOptService;
import com.android.server.wm.ActivityMetricsLaunchObserver;
import com.android.server.wm.ActivityMetricsLaunchObserver.ActivityRecordProto;
import com.android.server.wm.ActivityMetricsLaunchObserver.Temperature;
import com.android.server.wm.ActivityMetricsLaunchObserverRegistry;
import com.android.server.wm.ActivityTaskManagerInternal;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import java.util.HashMap;
@@ -286,6 +289,7 @@ public class IorapForwardingService extends SystemService {
private final AppLaunchObserver mAppLaunchObserver = new AppLaunchObserver();
private final EventSequenceValidator mEventSequenceValidator = new EventSequenceValidator();
private final DexOptPackagesUpdated mDexOptPackagesUpdated = new DexOptPackagesUpdated();
private boolean mRegisteredListeners = false;
private void registerInProcessListenersLocked() {
@@ -308,9 +312,22 @@ public class IorapForwardingService extends SystemService {
launchObserverRegistry.registerLaunchObserver(mAppLaunchObserver);
launchObserverRegistry.registerLaunchObserver(mEventSequenceValidator);
BackgroundDexOptService.addPackagesUpdatedListener(mDexOptPackagesUpdated);
mRegisteredListeners = true;
}
private class DexOptPackagesUpdated implements BackgroundDexOptService.PackagesUpdatedListener {
@Override
public void onPackagesUpdated(ArraySet<String> updatedPackages) {
String[] updated = updatedPackages.toArray(new String[0]);
for (String packageName : updated) {
Log.d(TAG, "onPackagesUpdated: " + packageName);
}
}
}
private class AppLaunchObserver implements ActivityMetricsLaunchObserver {
// We add a synthetic sequence ID here to make it easier to differentiate new
// launch sequences on the native side.