Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd434a39 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "dexopt: Add listeners when packages are updated by bg-dexopt" into...

Merge "dexopt: Add listeners when packages are updated by bg-dexopt" into rvc-dev am: 9b2931e9 am: 3a4e6475 am: 461e5601

Change-Id: I13ad748c9343bf2afb95d6b7d4ab0dbbdc40e66d
parents 88338a4c 461e5601
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.server.pm.dex.DexoptOptions;

import java.io.File;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -106,6 +107,8 @@ public class BackgroundDexOptService extends JobService {
    private static final long mDowngradeUnusedAppsThresholdInMillis =
            getDowngradeUnusedAppsThresholdInMillis();

    private static List<PackagesUpdatedListener> sPackagesUpdatedListeners = new ArrayList<>();

    public static void schedule(Context context) {
        if (isBackgroundDexoptDisabled()) {
            return;
@@ -244,6 +247,7 @@ public class BackgroundDexOptService extends JobService {
            }
        }
        notifyPinService(updatedPackages);
        notifyPackagesUpdated(updatedPackages);
        // Ran to completion, so we abandon our timeslice and do not reschedule.
        jobFinished(jobParams, /* reschedule */ false);
    }
@@ -391,6 +395,7 @@ public class BackgroundDexOptService extends JobService {
        } finally {
            // Always let the pinner service know about changes.
            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() {
        final String sysPropKey = "pm.dexopt.downgrade_after_inactive_days";
        String sysPropValue = SystemProperties.get(sysPropKey);
+17 −0
Original line number Diff line number Diff line
@@ -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.