Merge "dexopt: Add listeners when packages are updated by bg-dexopt" into rvc-dev am: 9b2931e973 am: 42e6558150
Change-Id: Id948e2c1f7422294d3a3c3ab866f5c001f115f37
This commit is contained in:
@@ -46,6 +46,7 @@ import com.android.server.pm.dex.DexoptOptions;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@@ -106,6 +107,8 @@ public class BackgroundDexOptService extends JobService {
|
|||||||
private static final long mDowngradeUnusedAppsThresholdInMillis =
|
private static final long mDowngradeUnusedAppsThresholdInMillis =
|
||||||
getDowngradeUnusedAppsThresholdInMillis();
|
getDowngradeUnusedAppsThresholdInMillis();
|
||||||
|
|
||||||
|
private static List<PackagesUpdatedListener> sPackagesUpdatedListeners = new ArrayList<>();
|
||||||
|
|
||||||
public static void schedule(Context context) {
|
public static void schedule(Context context) {
|
||||||
if (isBackgroundDexoptDisabled()) {
|
if (isBackgroundDexoptDisabled()) {
|
||||||
return;
|
return;
|
||||||
@@ -244,6 +247,7 @@ public class BackgroundDexOptService extends JobService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
notifyPinService(updatedPackages);
|
notifyPinService(updatedPackages);
|
||||||
|
notifyPackagesUpdated(updatedPackages);
|
||||||
// Ran to completion, so we abandon our timeslice and do not reschedule.
|
// Ran to completion, so we abandon our timeslice and do not reschedule.
|
||||||
jobFinished(jobParams, /* reschedule */ false);
|
jobFinished(jobParams, /* reschedule */ false);
|
||||||
}
|
}
|
||||||
@@ -391,6 +395,7 @@ public class BackgroundDexOptService extends JobService {
|
|||||||
} finally {
|
} finally {
|
||||||
// Always let the pinner service know about changes.
|
// Always let the pinner service know about changes.
|
||||||
notifyPinService(updatedPackages);
|
notifyPinService(updatedPackages);
|
||||||
|
notifyPackagesUpdated(updatedPackages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -642,6 +647,32 @@ public class BackgroundDexOptService extends JobService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static interface PackagesUpdatedListener {
|
||||||
|
/** Callback when packages have been updated by the bg-dexopt service. */
|
||||||
|
public void onPackagesUpdated(ArraySet<String> updatedPackages);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addPackagesUpdatedListener(PackagesUpdatedListener listener) {
|
||||||
|
synchronized (sPackagesUpdatedListeners) {
|
||||||
|
sPackagesUpdatedListeners.add(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removePackagesUpdatedListener(PackagesUpdatedListener listener) {
|
||||||
|
synchronized (sPackagesUpdatedListeners) {
|
||||||
|
sPackagesUpdatedListeners.remove(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Notify all listeners (#addPackagesUpdatedListener) that packages have been updated. */
|
||||||
|
private void notifyPackagesUpdated(ArraySet<String> updatedPackages) {
|
||||||
|
synchronized (sPackagesUpdatedListeners) {
|
||||||
|
for (PackagesUpdatedListener listener : sPackagesUpdatedListeners) {
|
||||||
|
listener.onPackagesUpdated(updatedPackages);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static long getDowngradeUnusedAppsThresholdInMillis() {
|
private static long getDowngradeUnusedAppsThresholdInMillis() {
|
||||||
final String sysPropKey = "pm.dexopt.downgrade_after_inactive_days";
|
final String sysPropKey = "pm.dexopt.downgrade_after_inactive_days";
|
||||||
String sysPropValue = SystemProperties.get(sysPropKey);
|
String sysPropValue = SystemProperties.get(sysPropKey);
|
||||||
|
|||||||
@@ -34,18 +34,21 @@ import android.os.Parcel;
|
|||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
import android.os.SystemProperties;
|
import android.os.SystemProperties;
|
||||||
|
import android.util.ArraySet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.server.IoThread;
|
import com.android.server.IoThread;
|
||||||
import com.android.server.LocalServices;
|
import com.android.server.LocalServices;
|
||||||
import com.android.server.SystemService;
|
import com.android.server.SystemService;
|
||||||
|
import com.android.server.pm.BackgroundDexOptService;
|
||||||
import com.android.server.wm.ActivityMetricsLaunchObserver;
|
import com.android.server.wm.ActivityMetricsLaunchObserver;
|
||||||
import com.android.server.wm.ActivityMetricsLaunchObserver.ActivityRecordProto;
|
import com.android.server.wm.ActivityMetricsLaunchObserver.ActivityRecordProto;
|
||||||
import com.android.server.wm.ActivityMetricsLaunchObserver.Temperature;
|
import com.android.server.wm.ActivityMetricsLaunchObserver.Temperature;
|
||||||
import com.android.server.wm.ActivityMetricsLaunchObserverRegistry;
|
import com.android.server.wm.ActivityMetricsLaunchObserverRegistry;
|
||||||
import com.android.server.wm.ActivityTaskManagerInternal;
|
import com.android.server.wm.ActivityTaskManagerInternal;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
@@ -286,6 +289,7 @@ public class IorapForwardingService extends SystemService {
|
|||||||
|
|
||||||
private final AppLaunchObserver mAppLaunchObserver = new AppLaunchObserver();
|
private final AppLaunchObserver mAppLaunchObserver = new AppLaunchObserver();
|
||||||
private final EventSequenceValidator mEventSequenceValidator = new EventSequenceValidator();
|
private final EventSequenceValidator mEventSequenceValidator = new EventSequenceValidator();
|
||||||
|
private final DexOptPackagesUpdated mDexOptPackagesUpdated = new DexOptPackagesUpdated();
|
||||||
private boolean mRegisteredListeners = false;
|
private boolean mRegisteredListeners = false;
|
||||||
|
|
||||||
private void registerInProcessListenersLocked() {
|
private void registerInProcessListenersLocked() {
|
||||||
@@ -308,9 +312,22 @@ public class IorapForwardingService extends SystemService {
|
|||||||
launchObserverRegistry.registerLaunchObserver(mAppLaunchObserver);
|
launchObserverRegistry.registerLaunchObserver(mAppLaunchObserver);
|
||||||
launchObserverRegistry.registerLaunchObserver(mEventSequenceValidator);
|
launchObserverRegistry.registerLaunchObserver(mEventSequenceValidator);
|
||||||
|
|
||||||
|
BackgroundDexOptService.addPackagesUpdatedListener(mDexOptPackagesUpdated);
|
||||||
|
|
||||||
|
|
||||||
mRegisteredListeners = true;
|
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 {
|
private class AppLaunchObserver implements ActivityMetricsLaunchObserver {
|
||||||
// We add a synthetic sequence ID here to make it easier to differentiate new
|
// We add a synthetic sequence ID here to make it easier to differentiate new
|
||||||
// launch sequences on the native side.
|
// launch sequences on the native side.
|
||||||
|
|||||||
Reference in New Issue
Block a user