diff options
| author | 2016-03-15 00:31:39 +0000 | |
|---|---|---|
| committer | 2016-03-15 00:31:41 +0000 | |
| commit | 84dce8cba90ca7f5042c6a45dc2caed711ab6081 (patch) | |
| tree | 39d8e6a572093ada22fa2db1655d3af340e2c4d1 | |
| parent | b00df4192bbba4db8a8b1d054b68c7a5302387a0 (diff) | |
| parent | 4554d0e5b69433ddaa698e976ee584f7f4f14948 (diff) | |
Merge "Make "reset-throttling" per-user" into nyc-dev
| -rw-r--r-- | services/core/java/com/android/server/pm/ShortcutService.java | 52 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java | 2 |
2 files changed, 33 insertions, 21 deletions
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index f3c63ee60b3c..3791eb05ca82 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -114,7 +114,7 @@ import java.util.function.Predicate; public class ShortcutService extends IShortcutService.Stub { static final String TAG = "ShortcutService"; - static final boolean DEBUG = true; // STOPSHIP if true + static final boolean DEBUG = false; // STOPSHIP if true static final boolean DEBUG_LOAD = false; // STOPSHIP if true @VisibleForTesting @@ -687,6 +687,10 @@ public class ShortcutService extends IShortcutService.Stub { return mRawLastResetTime + mResetInterval; } + static boolean isClockValid(long time) { + return time >= 1420070400; // Thu, 01 Jan 2015 00:00:00 GMT + } + /** * Update the last reset time. */ @@ -701,8 +705,10 @@ public class ShortcutService extends IShortcutService.Stub { mRawLastResetTime = now; } else if (now < mRawLastResetTime) { // Clock rewound. - // TODO Randomize?? - mRawLastResetTime = now; + if (isClockValid(now)) { + // TODO Randomize?? + mRawLastResetTime = now; + } } else { // TODO Do it properly. while ((mRawLastResetTime + mResetInterval) <= now) { @@ -1288,15 +1294,14 @@ public class ShortcutService extends IShortcutService.Stub { public void resetThrottling() { enforceSystemOrShell(); - resetThrottlingInner(); + resetThrottlingInner(getCallingUserId()); } - @VisibleForTesting - void resetThrottlingInner() { + void resetThrottlingInner(@UserIdInt int userId) { synchronized (mLock) { - mRawLastResetTime = injectCurrentTimeMillis(); + getUserShortcutsLocked(userId).resetThrottling(); } - scheduleSaveBaseState(); + scheduleSaveUser(userId); Slog.i(TAG, "ShortcutManager: throttling counter reset"); } @@ -1707,8 +1712,10 @@ public class ShortcutService extends IShortcutService.Stub { pw.println(); } - private int handleResetThrottling() { - resetThrottling(); + private int handleResetThrottling() throws CommandException { + parseOptions(/* takeUser =*/ true); + + resetThrottlingInner(mUserId); return 0; } @@ -1788,6 +1795,10 @@ public class ShortcutService extends IShortcutService.Stub { return getCallingUid(); } + final int getCallingUserId() { + return UserHandle.getUserId(injectBinderCallingUid()); + } + File injectSystemDataPath() { return Environment.getDataSystemDirectory(); } @@ -1928,6 +1939,12 @@ class UserShortcuts { s.scheduleSaveUser(mUserId); } + public void resetThrottling() { + for (int i = mPackages.size() - 1; i >= 0; i--) { + mPackages.valueAt(i).resetThrottling(); + } + } + public void dump(@NonNull ShortcutService s, @NonNull PrintWriter pw, @NonNull String prefix) { pw.print(prefix); pw.print("User: "); @@ -1983,7 +2000,6 @@ class PackageShortcuts { mPackageName = packageName; } - @GuardedBy("mLock") @Nullable public ShortcutInfo findShortcutById(String id) { return mShortcuts.get(id); @@ -2010,7 +2026,6 @@ class PackageShortcuts { * * It checks the max number of dynamic shortcuts. */ - @GuardedBy("mLock") public void updateShortcutWithCapping(@NonNull ShortcutService s, @NonNull ShortcutInfo newShortcut) { final ShortcutInfo oldShortcut = mShortcuts.get(newShortcut.getId()); @@ -2060,7 +2075,6 @@ class PackageShortcuts { } } - @GuardedBy("mLock") public void deleteAllDynamicShortcuts(@NonNull ShortcutService s) { for (int i = mShortcuts.size() - 1; i >= 0; i--) { mShortcuts.valueAt(i).clearFlags(ShortcutInfo.FLAG_DYNAMIC); @@ -2069,7 +2083,6 @@ class PackageShortcuts { mDynamicShortcutCount = 0; } - @GuardedBy("mLock") public void deleteDynamicWithId(@NonNull ShortcutService s, @NonNull String shortcutId) { final ShortcutInfo oldShortcut = mShortcuts.get(shortcutId); @@ -2086,7 +2099,6 @@ class PackageShortcuts { } } - @GuardedBy("mLock") public void replacePinned(@NonNull ShortcutService s, String launcherPackage, List<String> shortcutIds) { @@ -2111,12 +2123,11 @@ class PackageShortcuts { /** * Number of calls that the caller has made, since the last reset. */ - @GuardedBy("mLock") public int getApiCallCount(@NonNull ShortcutService s) { final long last = s.getLastResetTimeLocked(); final long now = s.injectCurrentTimeMillis(); - if (mLastResetTime > now) { + if (ShortcutService.isClockValid(now) && mLastResetTime > now) { // Clock rewound. // TODO Test it mLastResetTime = now; } @@ -2133,7 +2144,6 @@ class PackageShortcuts { * If the caller app hasn't been throttled yet, increment {@link #mApiCallCount} * and return true. Otherwise just return false. */ - @GuardedBy("mLock") public boolean tryApiCall(@NonNull ShortcutService s) { if (getApiCallCount(s) >= s.mMaxDailyUpdates) { return false; @@ -2142,7 +2152,6 @@ class PackageShortcuts { return true; } - @GuardedBy("mLock") public void resetRateLimitingForCommandLine() { mApiCallCount = 0; mLastResetTime = 0; @@ -2151,7 +2160,6 @@ class PackageShortcuts { /** * Find all shortcuts that match {@code query}. */ - @GuardedBy("mLock") public void findAll(@NonNull List<ShortcutInfo> result, @Nullable Predicate<ShortcutInfo> query, int cloneFlag) { for (int i = 0; i < mShortcuts.size(); i++) { @@ -2162,6 +2170,10 @@ class PackageShortcuts { } } + public void resetThrottling() { + mApiCallCount = 0; + } + public void dump(@NonNull ShortcutService s, @NonNull PrintWriter pw, @NonNull String prefix) { pw.print(prefix); pw.print("Package: "); diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java index caadbf9d9c7d..f978d843e6be 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java @@ -922,7 +922,7 @@ public class ShortcutManagerTest extends AndroidTestCase { dumpsysOnLogcat(); mInjectedCurrentTimeLillis++; // Need to advance the clock for reset to work. - mService.resetThrottlingInner(); + mService.resetThrottlingInner(UserHandle.USER_SYSTEM); dumpsysOnLogcat(); |