Merge "Remove the internal DexLoadReporter for system server's own dex loads."
This commit is contained in:
committed by
Android (Google) Code Review
commit
b14d49eaf9
@@ -84,7 +84,6 @@ import android.content.pm.IOnChecksumsReadyListener;
|
||||
import android.content.pm.IPackageDataObserver;
|
||||
import android.content.pm.IPackageDeleteObserver2;
|
||||
import android.content.pm.IPackageLoadingProgressCallback;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.IPackageMoveObserver;
|
||||
import android.content.pm.IncrementalStatesInfo;
|
||||
import android.content.pm.InstallSourceInfo;
|
||||
@@ -1460,7 +1459,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
}
|
||||
};
|
||||
|
||||
public static Pair<PackageManagerService, IPackageManager> main(Context context,
|
||||
/** Starts PackageManagerService. */
|
||||
public static PackageManagerService main(Context context,
|
||||
Installer installer, @NonNull DomainVerificationService domainVerificationService,
|
||||
boolean factoryTest) {
|
||||
// Self-check for initial settings.
|
||||
@@ -1590,7 +1590,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
ServiceManager.addService("package_native", pmn);
|
||||
LocalManagerRegistry.addManager(PackageManagerLocal.class,
|
||||
new PackageManagerLocalImpl(m));
|
||||
return Pair.create(m, iPackageManager);
|
||||
return m;
|
||||
}
|
||||
|
||||
/** Install/uninstall system packages for all users based on their user-type, as applicable. */
|
||||
@@ -5287,10 +5287,6 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
Map<String, String> classLoaderContextMap,
|
||||
String loaderIsa) {
|
||||
int callingUid = Binder.getCallingUid();
|
||||
|
||||
// TODO(b/254043366): System server should not report its own dex load because there's
|
||||
// nothing ART can do with it.
|
||||
|
||||
Computer snapshot = snapshot();
|
||||
|
||||
// System server should be able to report dex load on behalf of other apps. E.g., it
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.server.pm.dex;
|
||||
|
||||
import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
|
||||
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.os.RemoteException;
|
||||
import android.util.Log;
|
||||
import android.util.Slog;
|
||||
|
||||
import dalvik.system.BaseDexClassLoader;
|
||||
import dalvik.system.VMRuntime;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Reports dex file use to the package manager on behalf of system server.
|
||||
*/
|
||||
public class SystemServerDexLoadReporter implements BaseDexClassLoader.Reporter {
|
||||
private static final String TAG = "SystemServerDexLoadReporter";
|
||||
|
||||
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
|
||||
private final IPackageManager mPackageManager;
|
||||
|
||||
private SystemServerDexLoadReporter(IPackageManager pm) {
|
||||
mPackageManager = pm;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void report(Map<String, String> classLoaderContextMap) {
|
||||
if (DEBUG) {
|
||||
Slog.i(TAG, "Reporting " + classLoaderContextMap);
|
||||
}
|
||||
if (classLoaderContextMap.isEmpty()) {
|
||||
Slog.wtf(TAG, "Bad call to DexLoadReporter: empty classLoaderContextMap");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
mPackageManager.notifyDexLoad(
|
||||
PLATFORM_PACKAGE_NAME,
|
||||
classLoaderContextMap,
|
||||
VMRuntime.getRuntime().vmInstructionSet());
|
||||
} catch (RemoteException ignored) {
|
||||
// We're in system server, it can't happen.
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures system server dex file reporting.
|
||||
* <p>The method will install a reporter in the BaseDexClassLoader and also
|
||||
* force the reporting of any dex files already loaded by the system server.
|
||||
*/
|
||||
public static void configureSystemServerDexReporter(IPackageManager pm) {
|
||||
Slog.i(TAG, "Configuring system server dex reporter");
|
||||
|
||||
SystemServerDexLoadReporter reporter = new SystemServerDexLoadReporter(pm);
|
||||
BaseDexClassLoader.setReporter(reporter);
|
||||
ClassLoader currrentClassLoader = reporter.getClass().getClassLoader();
|
||||
if (currrentClassLoader instanceof BaseDexClassLoader) {
|
||||
((BaseDexClassLoader) currrentClassLoader).reportClassLoaderChain();
|
||||
} else {
|
||||
Slog.wtf(TAG, "System server class loader is not a BaseDexClassLoader. type="
|
||||
+ currrentClassLoader.getClass().getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,6 @@ import android.app.usage.UsageStatsManagerInternal;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageItemInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
@@ -168,7 +167,6 @@ import com.android.server.pm.PackageManagerService;
|
||||
import com.android.server.pm.ShortcutService;
|
||||
import com.android.server.pm.UserManagerService;
|
||||
import com.android.server.pm.dex.OdsignStatsLogger;
|
||||
import com.android.server.pm.dex.SystemServerDexLoadReporter;
|
||||
import com.android.server.pm.verify.domain.DomainVerificationService;
|
||||
import com.android.server.policy.AppOpsPolicy;
|
||||
import com.android.server.policy.PermissionPolicyService;
|
||||
@@ -1210,24 +1208,16 @@ public final class SystemServer implements Dumpable {
|
||||
mSystemServiceManager.startService(domainVerificationService);
|
||||
t.traceEnd();
|
||||
|
||||
IPackageManager iPackageManager;
|
||||
t.traceBegin("StartPackageManagerService");
|
||||
try {
|
||||
Watchdog.getInstance().pauseWatchingCurrentThread("packagemanagermain");
|
||||
Pair<PackageManagerService, IPackageManager> pmsPair = PackageManagerService.main(
|
||||
mPackageManagerService = PackageManagerService.main(
|
||||
mSystemContext, installer, domainVerificationService,
|
||||
mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF);
|
||||
mPackageManagerService = pmsPair.first;
|
||||
iPackageManager = pmsPair.second;
|
||||
} finally {
|
||||
Watchdog.getInstance().resumeWatchingCurrentThread("packagemanagermain");
|
||||
}
|
||||
|
||||
// Now that the package manager has started, register the dex load reporter to capture any
|
||||
// dex files loaded by system server.
|
||||
// These dex files will be optimized by the BackgroundDexOptService.
|
||||
SystemServerDexLoadReporter.configureSystemServerDexReporter(iPackageManager);
|
||||
|
||||
mFirstBoot = mPackageManagerService.isFirstBoot();
|
||||
mPackageManager = mSystemContext.getPackageManager();
|
||||
t.traceEnd();
|
||||
|
||||
Reference in New Issue
Block a user