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

Commit e299f0ad authored by Fyodor Kupolov's avatar Fyodor Kupolov Committed by Android Git Automerger
Browse files

am a91a6f68: Merge "Hold wakelock while dexopting" into mnc-dev

* commit 'a91a6f68':
  Hold wakelock while dexopting
parents e171e34e a91a6f68
Loading
Loading
Loading
Loading
+25 −1
Original line number Original line Diff line number Diff line
@@ -17,9 +17,12 @@
package com.android.server.pm;
package com.android.server.pm;


import android.annotation.Nullable;
import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageParser;
import android.content.pm.PackageParser;
import android.os.PowerManager;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.WorkSource;
import android.util.ArraySet;
import android.util.ArraySet;
import android.util.Log;
import android.util.Log;
import android.util.Slog;
import android.util.Slog;
@@ -50,8 +53,14 @@ final class PackageDexOptimizer {
    private final PackageManagerService mPackageManagerService;
    private final PackageManagerService mPackageManagerService;
    private ArraySet<PackageParser.Package> mDeferredDexOpt;
    private ArraySet<PackageParser.Package> mDeferredDexOpt;


    private final PowerManager.WakeLock mDexoptWakeLock;
    private volatile boolean mSystemReady;

    PackageDexOptimizer(PackageManagerService packageManagerService) {
    PackageDexOptimizer(PackageManagerService packageManagerService) {
        this.mPackageManagerService = packageManagerService;
        this.mPackageManagerService = packageManagerService;
        PowerManager powerManager = (PowerManager)packageManagerService.mContext.getSystemService(
                Context.POWER_SERVICE);
        mDexoptWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*dexopt*");
    }
    }


    /**
    /**
@@ -71,7 +80,18 @@ final class PackageDexOptimizer {
            done = null;
            done = null;
        }
        }
        synchronized (mPackageManagerService.mInstallLock) {
        synchronized (mPackageManagerService.mInstallLock) {
            final boolean useLock = mSystemReady;
            if (useLock) {
                mDexoptWakeLock.setWorkSource(new WorkSource(pkg.applicationInfo.uid));
                mDexoptWakeLock.acquire();
            }
            try {
                return performDexOptLI(pkg, instructionSets, forceDex, defer, done);
                return performDexOptLI(pkg, instructionSets, forceDex, defer, done);
            } finally {
                if (useLock) {
                    mDexoptWakeLock.release();
                }
            }
        }
        }
    }
    }


@@ -242,4 +262,8 @@ final class PackageDexOptimizer {
        }
        }
        mDeferredDexOpt.add(pkg);
        mDeferredDexOpt.add(pkg);
    }
    }

    void systemReady() {
        mSystemReady = true;
    }
}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -13486,6 +13486,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        storage.registerListener(mStorageListener);
        storage.registerListener(mStorageListener);
        mInstallerService.systemReady();
        mInstallerService.systemReady();
        mPackageDexOptimizer.systemReady();
    }
    }
    @Override
    @Override