summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Makoto Onuki <omakoto@google.com> 2016-03-15 00:31:39 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-03-15 00:31:41 +0000
commit84dce8cba90ca7f5042c6a45dc2caed711ab6081 (patch)
tree39d8e6a572093ada22fa2db1655d3af340e2c4d1
parentb00df4192bbba4db8a8b1d054b68c7a5302387a0 (diff)
parent4554d0e5b69433ddaa698e976ee584f7f4f14948 (diff)
Merge "Make "reset-throttling" per-user" into nyc-dev
-rw-r--r--services/core/java/com/android/server/pm/ShortcutService.java52
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java2
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();