From 680f3503d806f4f9c4f7837be241e238692fa8dc Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Tue, 10 Jan 2023 18:25:10 -0800 Subject: [PATCH] [pm/metrics] fix test on user 10 InstallRequest.mUid is actually appId. Renaming to reflect that. Compute the actual UID in the metrics class. RemovedInfo.mUid is also appId, except in one place where it's used outside the installation flow. That will be fixed in a separate CL. BUG: 262710779 Test: atest com.android.cts.packagemanager.stats.host.PackageInstallationSessionReportedStatsTests Change-Id: I6284f381b5760d14b4913ace5183a5b6f32db9b4 --- .../server/pm/InstallPackageHelper.java | 10 ++++----- .../com/android/server/pm/InstallRequest.java | 16 +++++++------- .../android/server/pm/InstallingSession.java | 2 +- .../com/android/server/pm/PackageMetrics.java | 22 ++++++++++++++----- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 803c97a47688d..0624b67e697d0 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -2252,7 +2252,7 @@ final class InstallPackageHelper { } } installRequest.setName(pkgName); - installRequest.setUid(pkg.getUid()); + installRequest.setAppId(pkg.getUid()); installRequest.setPkg(pkg); installRequest.setReturnCode(PackageManager.INSTALL_SUCCEEDED); //to update install status @@ -2737,7 +2737,7 @@ final class InstallPackageHelper { } Bundle extras = new Bundle(); - extras.putInt(Intent.EXTRA_UID, request.getUid()); + extras.putInt(Intent.EXTRA_UID, request.getAppId()); if (update) { extras.putBoolean(Intent.EXTRA_REPLACING, true); } @@ -2760,7 +2760,7 @@ final class InstallPackageHelper { // Send PACKAGE_ADDED broadcast for users that see the package for the first time // sendPackageAddedForNewUsers also deals with system apps - int appId = UserHandle.getAppId(request.getUid()); + int appId = UserHandle.getAppId(request.getAppId()); boolean isSystem = request.isInstallSystem(); mPm.sendPackageAddedForNewUsers(mPm.snapshotComputer(), packageName, isSystem || virtualPreload, virtualPreload /*startReceiver*/, appId, @@ -2905,9 +2905,9 @@ final class InstallPackageHelper { } if (allNewUsers && !update) { - mPm.notifyPackageAdded(packageName, request.getUid()); + mPm.notifyPackageAdded(packageName, request.getAppId()); } else { - mPm.notifyPackageChanged(packageName, request.getUid()); + mPm.notifyPackageChanged(packageName, request.getAppId()); } // Log current value of "unknown sources" setting diff --git a/services/core/java/com/android/server/pm/InstallRequest.java b/services/core/java/com/android/server/pm/InstallRequest.java index c6cdc4cd350d2..878c1c1597977 100644 --- a/services/core/java/com/android/server/pm/InstallRequest.java +++ b/services/core/java/com/android/server/pm/InstallRequest.java @@ -81,7 +81,7 @@ final class InstallRequest { /** Package Installed Info */ @Nullable private String mName; - private int mUid = INVALID_UID; + private int mAppId = INVALID_UID; // The set of users that originally had this package installed. @Nullable private int[] mOrigUsers; @@ -158,7 +158,7 @@ final class InstallRequest { mUserId = user.getIdentifier(); } else { // APEX - mUserId = INVALID_UID; + mUserId = UserHandle.USER_SYSTEM; } mInstallArgs = null; mParsedPackage = parsedPackage; @@ -367,8 +367,8 @@ final class InstallRequest { return mOrigUsers; } - public int getUid() { - return mUid; + public int getAppId() { + return mAppId; } @Nullable @@ -648,8 +648,8 @@ final class InstallRequest { mPkg = pkg; } - public void setUid(int uid) { - mUid = uid; + public void setAppId(int appId) { + mAppId = appId; } public void setNewUsers(int[] newUsers) { @@ -773,10 +773,10 @@ final class InstallRequest { } } - public void onInstallCompleted(int userId) { + public void onInstallCompleted() { if (getReturnCode() == INSTALL_SUCCEEDED) { if (mPackageMetrics != null) { - mPackageMetrics.onInstallSucceed(userId); + mPackageMetrics.onInstallSucceed(); } } } diff --git a/services/core/java/com/android/server/pm/InstallingSession.java b/services/core/java/com/android/server/pm/InstallingSession.java index eb3b29ce4b710..439b542595543 100644 --- a/services/core/java/com/android/server/pm/InstallingSession.java +++ b/services/core/java/com/android/server/pm/InstallingSession.java @@ -535,7 +535,7 @@ class InstallingSession { mInstallPackageHelper.installPackagesTraced(installRequests); for (InstallRequest request : installRequests) { - request.onInstallCompleted(mUser.getIdentifier()); + request.onInstallCompleted(); doPostInstall(request); } } diff --git a/services/core/java/com/android/server/pm/PackageMetrics.java b/services/core/java/com/android/server/pm/PackageMetrics.java index 8252a9fa65c5f..d4c1256bd8f9c 100644 --- a/services/core/java/com/android/server/pm/PackageMetrics.java +++ b/services/core/java/com/android/server/pm/PackageMetrics.java @@ -19,9 +19,11 @@ package com.android.server.pm; import static android.os.Process.INVALID_UID; import android.annotation.IntDef; +import android.app.ActivityManager; import android.app.admin.SecurityLog; import android.content.pm.PackageManager; import android.content.pm.parsing.ApkLiteParseUtils; +import android.os.UserHandle; import android.util.Pair; import android.util.SparseArray; @@ -68,8 +70,8 @@ final class PackageMetrics { mInstallRequest = installRequest; } - public void onInstallSucceed(int userId) { - reportInstallationToSecurityLog(userId); + public void onInstallSucceed() { + reportInstallationToSecurityLog(mInstallRequest.getUserId()); reportInstallationStats(true /* success */); } @@ -110,10 +112,11 @@ final class PackageMetrics { } } + FrameworkStatsLog.write(FrameworkStatsLog.PACKAGE_INSTALLATION_SESSION_REPORTED, mInstallRequest.getSessionId() /* session_id */, packageName /* package_name */, - mInstallRequest.getUid() /* uid */, + getUid(mInstallRequest.getAppId(), mInstallRequest.getUserId()) /* uid */, newUsers /* user_ids */, userManagerInternal.getUserTypesForStatsd(newUsers) /* user_types */, originalUsers /* original_user_ids */, @@ -140,6 +143,13 @@ final class PackageMetrics { ); } + private static int getUid(int appId, int userId) { + if (userId == UserHandle.USER_ALL) { + userId = ActivityManager.getCurrentUser(); + } + return UserHandle.getUid(userId, appId); + } + private long getApksSize(File apkDir) { // TODO(b/249294752): also count apk sizes for failed installs final AtomicLong apksSize = new AtomicLong(); @@ -218,9 +228,9 @@ final class PackageMetrics { final int[] originalUsers = info.mOrigUsers; final int[] originalUserTypes = userManagerInternal.getUserTypesForStatsd(originalUsers); FrameworkStatsLog.write(FrameworkStatsLog.PACKAGE_UNINSTALLATION_REPORTED, - info.mUid, removedUsers, removedUserTypes, originalUsers, originalUserTypes, - deleteFlags, PackageManager.DELETE_SUCCEEDED, info.mIsRemovedPackageSystemUpdate, - !info.mRemovedForAllUsers); + getUid(info.mUid, userId), removedUsers, removedUserTypes, originalUsers, + originalUserTypes, deleteFlags, PackageManager.DELETE_SUCCEEDED, + info.mIsRemovedPackageSystemUpdate, !info.mRemovedForAllUsers); final String packageName = info.mRemovedPackage; final long versionCode = info.mRemovedPackageVersionCode; reportUninstallationToSecurityLog(packageName, versionCode, userId);