diff options
| author | 2020-11-10 21:27:22 +0000 | |
|---|---|---|
| committer | 2020-11-10 21:27:22 +0000 | |
| commit | cbef1ba73c08050869bac73b7acfe584f946f3f4 (patch) | |
| tree | 6007db49c4a2d07c58f10eba7f2ee227a93ebed8 | |
| parent | 26d7201645f33c28d5ea43132ef907f076f029ac (diff) | |
| parent | f9c011501fab1f9ae63c2535e91d1e7d823f5ff0 (diff) | |
Merge changes I0c69b6a2,I286015aa
* changes:
Refresh legacy permission state right before writing.
Revert "Refresh legacy state before writing to runtime permission persistence."
3 files changed, 14 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index f68469fee4da..7afd3dbb2c1e 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -19606,7 +19606,7 @@ public class PackageManagerService extends IPackageManager.Stub ps.setUninstallReason(UNINSTALL_REASON_UNKNOWN, userId); } - writeRuntimePermissionsForUserLPrTEMP(userId, false); + mSettings.writeRuntimePermissionsForUserLPr(userId, false); } // Regardless of writeSettings we need to ensure that this restriction // state propagation is persisted @@ -25752,7 +25752,7 @@ public class PackageManagerService extends IPackageManager.Stub public void writePermissionSettings(int[] userIds, boolean async) { synchronized (mLock) { for (int userId : userIds) { - writeRuntimePermissionsForUserLPrTEMP(userId, !async); + mSettings.writeRuntimePermissionsForUserLPr(userId, !async); } } } @@ -26401,17 +26401,6 @@ public class PackageManagerService extends IPackageManager.Stub mSettings.writeLPr(); } - /** - * Temporary method that wraps mSettings.writeRuntimePermissionsForUserLPr() and calls - * mPermissionManager.writeLegacyPermissionStateTEMP() beforehand. - * - * TODO(zhanghai): This should be removed once we finish migration of permission storage. - */ - private void writeRuntimePermissionsForUserLPrTEMP(@UserIdInt int userId, boolean async) { - mPermissionManager.writeLegacyPermissionStateTEMP(); - mSettings.writeRuntimePermissionsForUserLPr(userId, async); - } - @Override public IBinder getHoldLockToken() { if (!Build.IS_DEBUGGABLE) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index cd9a4e72672f..71e7358701fd 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -5390,6 +5390,8 @@ public final class Settings { mHandler.removeMessages(userId); mWriteScheduled.delete(userId); + mPermissionDataProvider.writeLegacyPermissionStateTEMP(); + int version = mVersions.get(userId, INITIAL_VERSION); String fingerprint = mFingerprints.get(userId); diff --git a/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java b/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java index 0e790b1899ed..46e4e59bb15b 100644 --- a/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java +++ b/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java @@ -61,4 +61,14 @@ public interface LegacyPermissionDataProvider { */ @NonNull int[] getGidsForUid(int uid); + + /** + * This method should be in PermissionManagerServiceInternal, however it is made available here + * as well to avoid serious performance regression in writePermissionSettings(), which seems to + * be a hot spot and we should delay calling this method until wre are actually writing the + * file, instead of every time an async write is requested. + * + * @see PermissionManagerServiceInternal#writeLegacyPermissionStateTEMP() + */ + void writeLegacyPermissionStateTEMP(); } |