diff --git a/services/core/java/com/android/server/am/DropboxRateLimiter.java b/services/core/java/com/android/server/am/DropboxRateLimiter.java index 672736df88f33..18fb6a480f29d 100644 --- a/services/core/java/com/android/server/am/DropboxRateLimiter.java +++ b/services/core/java/com/android/server/am/DropboxRateLimiter.java @@ -64,9 +64,10 @@ public class DropboxRateLimiter { } if (now - errRecord.getStartTime() > RATE_LIMIT_BUFFER_DURATION) { + final int errCount = recentlyDroppedCount(errRecord); errRecord.setStartTime(now); errRecord.setCount(1); - return new RateLimitResult(false, recentlyDroppedCount(errRecord)); + return new RateLimitResult(false, errCount); } errRecord.incrementCount(); diff --git a/services/tests/servicestests/src/com/android/server/am/DropboxRateLimiterTest.java b/services/tests/servicestests/src/com/android/server/am/DropboxRateLimiterTest.java index 5c91b8b4717f3..d1390c68e1300 100644 --- a/services/tests/servicestests/src/com/android/server/am/DropboxRateLimiterTest.java +++ b/services/tests/servicestests/src/com/android/server/am/DropboxRateLimiterTest.java @@ -90,6 +90,16 @@ public class DropboxRateLimiterTest { mRateLimiter.shouldRateLimit("tag", "p").droppedCountSinceRateLimitActivated()); assertEquals(2, mRateLimiter.shouldRateLimit("tag", "p").droppedCountSinceRateLimitActivated()); + + // After 11 seconds the rate limiting buffer will be cleared and rate limiting will stop. + mClock.setOffsetMillis(11000); + + // The first call after rate limiting stops will still return the number of dropped events. + assertEquals(2, + mRateLimiter.shouldRateLimit("tag", "p").droppedCountSinceRateLimitActivated()); + // The next call should show that the dropped event counter was reset. + assertEquals(0, + mRateLimiter.shouldRateLimit("tag", "p").droppedCountSinceRateLimitActivated()); } private static class TestClock implements DropboxRateLimiter.Clock {