diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java index ed09362b4e4d6..b69e0b1539f35 100644 --- a/core/java/android/os/StrictMode.java +++ b/core/java/android/os/StrictMode.java @@ -987,7 +987,7 @@ public final class StrictMode { } // Not perfect, but fast and good enough for dup suppression. - Integer crashFingerprint = info.crashInfo.stackTrace.hashCode(); + Integer crashFingerprint = info.hashCode(); long lastViolationTime = 0; if (mLastViolationTime.containsKey(crashFingerprint)) { lastViolationTime = mLastViolationTime.get(crashFingerprint); @@ -1550,6 +1550,24 @@ public final class StrictMode { } } + @Override + public int hashCode() { + int result = 17; + result = 37 * result + crashInfo.stackTrace.hashCode(); + if (numAnimationsRunning != 0) { + result *= 37; + } + if (broadcastIntentAction != null) { + result = 37 * result + broadcastIntentAction.hashCode(); + } + if (tags != null) { + for (String tag : tags) { + result = 37 * result + tag.hashCode(); + } + } + return result; + } + /** * Create an instance of ViolationInfo initialized from a Parcel. */ diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 1773eca9d50db..1a10cffe15ced 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -557,7 +557,7 @@ public final class ActivityManagerService extends ActivityManagerNative = new HashMap>(); /** - * Fingerprints (String.hashCode()) of stack traces that we've + * Fingerprints (hashCode()) of stack traces that we've * already logged DropBox entries for. Guarded by itself. If * something (rogue user app) forces this over * MAX_DUP_SUPPRESSED_STACKS entries, the contents are cleared. @@ -6671,7 +6671,7 @@ public final class ActivityManagerService extends ActivityManagerNative ProcessRecord r = findAppProcess(app); if ((violationMask & StrictMode.PENALTY_DROPBOX) != 0) { - Integer stackFingerprint = info.crashInfo.stackTrace.hashCode(); + Integer stackFingerprint = info.hashCode(); boolean logIt = true; synchronized (mAlreadyLoggedViolatedStacks) { if (mAlreadyLoggedViolatedStacks.contains(stackFingerprint)) {