Get compatibility immediately on initialization

This change acquires the CompatConfig directly. This cuts down on
unnecessary logging and more importantly, gets access to platform config
values earlier during initialization than it would having to wait for
the PlatformCompat instance to be registered in SystemService.

Bug: 142281062
Test: Device boots
Test: atest AppEnumerationTests
Change-Id: I236dde7d897869633eadd2830a9930be0aec0129
This commit is contained in:
Patrick Baumann
2019-10-08 08:28:45 -07:00
parent 9d9e19c5d3
commit 5127b31dc1
2 changed files with 11 additions and 18 deletions

View File

@@ -41,7 +41,7 @@ import android.util.SparseArray;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.FgThread;
import com.android.server.compat.PlatformCompat;
import com.android.server.compat.CompatConfig;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -131,24 +131,22 @@ public class AppsFilter {
private static class FeatureConfigImpl implements FeatureConfig {
private static final String FILTERING_ENABLED_NAME = "package_query_filtering_enabled";
private final PackageManagerService.Injector mInjector;
private volatile boolean mFeatureEnabled = true;
private CompatConfig mCompatibility;
private FeatureConfigImpl(PackageManagerService.Injector injector) {
mInjector = injector;
mCompatibility = injector.getCompatibility();
}
@Override
public void onSystemReady() {
mFeatureEnabled = DeviceConfig.getBoolean(
NAMESPACE_PACKAGE_MANAGER_SERVICE, FILTERING_ENABLED_NAME,
true);
NAMESPACE_PACKAGE_MANAGER_SERVICE, FILTERING_ENABLED_NAME, true);
DeviceConfig.addOnPropertiesChangedListener(
NAMESPACE_PACKAGE_MANAGER_SERVICE, FgThread.getExecutor(),
properties -> {
synchronized (FeatureConfigImpl.this) {
mFeatureEnabled = properties.getBoolean(
FILTERING_ENABLED_NAME, true);
mFeatureEnabled = properties.getBoolean(FILTERING_ENABLED_NAME, true);
}
});
}
@@ -160,12 +158,7 @@ public class AppsFilter {
@Override
public boolean packageIsEnabled(PackageParser.Package pkg) {
final PlatformCompat compatibility = mInjector.getCompatibility();
if (compatibility == null) {
Slog.wtf(TAG, "PlatformCompat is null");
return mFeatureEnabled;
}
return compatibility.isChangeEnabled(
return mCompatibility.isChangeEnabled(
PackageManager.FILTER_APPLICATION_QUERY, pkg.applicationInfo);
}
}

View File

@@ -300,7 +300,7 @@ import com.android.server.ServiceThread;
import com.android.server.SystemConfig;
import com.android.server.SystemServerInitThreadPool;
import com.android.server.Watchdog;
import com.android.server.compat.PlatformCompat;
import com.android.server.compat.CompatConfig;
import com.android.server.net.NetworkPolicyManagerInternal;
import com.android.server.pm.Installer.InstallerException;
import com.android.server.pm.Settings.DatabaseVersion;
@@ -836,7 +836,7 @@ public class PackageManagerService extends IPackageManager.Stub
private final Singleton<StorageManager> mStorageManagerProducer;
private final Singleton<AppOpsManager> mAppOpsManagerProducer;
private final Singleton<AppsFilter> mAppsFilterProducer;
private final Singleton<PlatformCompat> mPlatformCompatProducer;
private final Singleton<CompatConfig> mPlatformCompatProducer;
Injector(Context context, Object lock, Installer installer,
Object installLock, PackageAbiHelper abiHelper,
@@ -854,7 +854,7 @@ public class PackageManagerService extends IPackageManager.Stub
Producer<StorageManager> storageManagerProducer,
Producer<AppOpsManager> appOpsManagerProducer,
Producer<AppsFilter> appsFilterProducer,
Producer<PlatformCompat> platformCompatProducer) {
Producer<CompatConfig> platformCompatProducer) {
mContext = context;
mLock = lock;
mInstaller = installer;
@@ -965,7 +965,7 @@ public class PackageManagerService extends IPackageManager.Stub
return mAppsFilterProducer.get(this, mPackageManager);
}
public PlatformCompat getCompatibility() {
public CompatConfig getCompatibility() {
return mPlatformCompatProducer.get(this, mPackageManager);
}
}
@@ -2467,7 +2467,7 @@ public class PackageManagerService extends IPackageManager.Stub
new Injector.SystemServiceProducer<>(StorageManager.class),
new Injector.SystemServiceProducer<>(AppOpsManager.class),
(i, pm) -> AppsFilter.create(i),
(i, pm) -> (PlatformCompat) ServiceManager.getService("platform_compat"));
(i, pm) -> CompatConfig.get());
PackageManagerService m = new PackageManagerService(injector, factoryTest, onlyCore);
t.traceEnd(); // "create package manager"