Merge "Small modifications to AnrTimer" into main
diff --git a/services/core/java/com/android/server/utils/AnrTimer.java b/services/core/java/com/android/server/utils/AnrTimer.java
index b7d8cfc..e944eca 100644
--- a/services/core/java/com/android/server/utils/AnrTimer.java
+++ b/services/core/java/com/android/server/utils/AnrTimer.java
@@ -193,6 +193,10 @@
@GuardedBy("mLock")
private int mTotalStarted = 0;
+ /** The total number of timers that were restarted without an explicit cancel. */
+ @GuardedBy("mLock")
+ private int mTotalRestarted = 0;
+
/** The total number of errors detected. */
@GuardedBy("mLock")
private int mTotalErrors = 0;
@@ -434,10 +438,10 @@
@Override
void start(@NonNull V arg, int pid, int uid, long timeoutMs) {
synchronized (mLock) {
- if (mTimerIdMap.containsKey(arg)) {
- // There is an existing timer. Cancel it.
- cancel(arg);
- }
+ // If there is an existing timer, cancel it. This is a nop if the timer does not
+ // exist.
+ if (cancel(arg)) mTotalRestarted++;
+
int timerId = nativeAnrTimerStart(mNative, pid, uid, timeoutMs, mExtend);
if (timerId > 0) {
mTimerIdMap.put(arg, timerId);
@@ -546,9 +550,7 @@
private Integer removeLocked(V arg) {
Integer r = mTimerIdMap.remove(arg);
if (r != null) {
- synchronized (mTimerArgMap) {
- mTimerArgMap.remove(r);
- }
+ mTimerArgMap.remove(r);
}
return r;
}
@@ -672,8 +674,8 @@
synchronized (mLock) {
pw.format("timer: %s\n", mLabel);
pw.increaseIndent();
- pw.format("started=%d maxStarted=%d running=%d expired=%d errors=%d\n",
- mTotalStarted, mMaxStarted, mTimerIdMap.size(),
+ pw.format("started=%d maxStarted=%d restarted=%d running=%d expired=%d errors=%d\n",
+ mTotalStarted, mMaxStarted, mTotalRestarted, mTimerIdMap.size(),
mTotalExpired, mTotalErrors);
pw.decreaseIndent();
mFeature.dump(pw, false);
diff --git a/services/core/jni/com_android_server_utils_AnrTimer.cpp b/services/core/jni/com_android_server_utils_AnrTimer.cpp
index 8ca5333..da95666 100644
--- a/services/core/jni/com_android_server_utils_AnrTimer.cpp
+++ b/services/core/jni/com_android_server_utils_AnrTimer.cpp
@@ -487,7 +487,6 @@
timer_id_t front = headTimerId();
auto found = running_.find(key);
if (found != running_.end()) running_.erase(found);
- if (front != headTimerId()) restartLocked();
}
// Remove every timer associated with the service.
@@ -501,7 +500,6 @@
i++;
}
}
- if (front != headTimerId()) restartLocked();
}
// Return the number of timers still running.