From 186d929e1a26b65122ce09bb1d2de99b568e1ae9 Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Sun, 19 Dec 2021 18:38:09 +0000 Subject: [PATCH] DO NOT MERGE: Revert "DO NOT MERGE: Revert "DO NOT MERGE: Lower bound throttling interval"" This reverts commit db71562964d5e5862ee08274bf3d2e0dca58a6fb. Reason for revert: Real root cause found, reverting to original code. Change-Id: I69df43954a37bb935479cbcb8eae81e8d75c7714 --- .../StationaryThrottlingLocationProvider.java | 5 ++- ...tionaryThrottlingLocationProviderTest.java | 31 +++++++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/location/provider/StationaryThrottlingLocationProvider.java b/services/core/java/com/android/server/location/provider/StationaryThrottlingLocationProvider.java index 22a675ad39ab6..5e38bca78a7c2 100644 --- a/services/core/java/com/android/server/location/provider/StationaryThrottlingLocationProvider.java +++ b/services/core/java/com/android/server/location/provider/StationaryThrottlingLocationProvider.java @@ -23,6 +23,8 @@ import static com.android.server.location.LocationManagerService.D; import static com.android.server.location.LocationManagerService.TAG; import static com.android.server.location.eventlog.LocationEventLog.EVENT_LOG; +import static java.lang.Math.max; + import android.annotation.Nullable; import android.location.Location; import android.location.LocationResult; @@ -53,6 +55,7 @@ public final class StationaryThrottlingLocationProvider extends DelegateLocation implements DeviceIdleHelper.DeviceIdleListener, DeviceIdleInternal.StationaryListener { private static final long MAX_STATIONARY_LOCATION_AGE_MS = 30000; + private static final long MIN_INTERVAL_MS = 1000; final Object mLock = new Object(); @@ -179,7 +182,7 @@ public final class StationaryThrottlingLocationProvider extends DelegateLocation && mLastLocation != null && mLastLocation.getElapsedRealtimeAgeMillis(mDeviceStationaryRealtimeMs) <= MAX_STATIONARY_LOCATION_AGE_MS) { - throttlingIntervalMs = mIncomingRequest.getIntervalMillis(); + throttlingIntervalMs = max(mIncomingRequest.getIntervalMillis(), MIN_INTERVAL_MS); } ProviderRequest newRequest; diff --git a/services/tests/mockingservicestests/src/com/android/server/location/provider/StationaryThrottlingLocationProviderTest.java b/services/tests/mockingservicestests/src/com/android/server/location/provider/StationaryThrottlingLocationProviderTest.java index 4d6f49e5d2231..4eba21934a4e6 100644 --- a/services/tests/mockingservicestests/src/com/android/server/location/provider/StationaryThrottlingLocationProviderTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/location/provider/StationaryThrottlingLocationProviderTest.java @@ -89,6 +89,19 @@ public class StationaryThrottlingLocationProviderTest { mProvider.getController().stop(); } + @Test + public void testThrottle_lowInterval() { + ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(0).build(); + + mProvider.getController().setRequest(request); + mDelegateProvider.reportLocation(createLocationResult("test_provider", mRandom)); + verify(mListener, times(1)).onReportLocation(any(LocationResult.class)); + + mInjector.getDeviceStationaryHelper().setStationary(true); + mInjector.getDeviceIdleHelper().setIdle(true); + verify(mListener, after(1500).times(2)).onReportLocation(any(LocationResult.class)); + } + @Test public void testThrottle_stationaryExit() { ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(50).build(); @@ -104,17 +117,16 @@ public class StationaryThrottlingLocationProviderTest { mInjector.getDeviceIdleHelper().setIdle(true); verify(mDelegate).onSetRequest(ProviderRequest.EMPTY_REQUEST); - verify(mListener, timeout(75).times(2)).onReportLocation(any(LocationResult.class)); - verify(mListener, timeout(75).times(3)).onReportLocation(any(LocationResult.class)); + verify(mListener, timeout(1100).times(2)).onReportLocation(any(LocationResult.class)); mInjector.getDeviceStationaryHelper().setStationary(false); verify(mDelegate, times(2)).onSetRequest(request); - verify(mListener, after(75).times(3)).onReportLocation(any(LocationResult.class)); + verify(mListener, after(1000).times(2)).onReportLocation(any(LocationResult.class)); } @Test public void testThrottle_idleExit() { - ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(50).build(); + ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(1000).build(); mProvider.getController().setRequest(request); verify(mDelegate).onSetRequest(request); @@ -127,17 +139,16 @@ public class StationaryThrottlingLocationProviderTest { mInjector.getDeviceStationaryHelper().setStationary(true); verify(mDelegate).onSetRequest(ProviderRequest.EMPTY_REQUEST); - verify(mListener, timeout(75).times(2)).onReportLocation(any(LocationResult.class)); - verify(mListener, timeout(75).times(3)).onReportLocation(any(LocationResult.class)); + verify(mListener, timeout(1100).times(2)).onReportLocation(any(LocationResult.class)); mInjector.getDeviceIdleHelper().setIdle(false); verify(mDelegate, times(2)).onSetRequest(request); - verify(mListener, after(75).times(3)).onReportLocation(any(LocationResult.class)); + verify(mListener, after(1000).times(2)).onReportLocation(any(LocationResult.class)); } @Test public void testThrottle_NoInitialLocation() { - ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(50).build(); + ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(1000).build(); mProvider.getController().setRequest(request); verify(mDelegate).onSetRequest(request); @@ -149,11 +160,11 @@ public class StationaryThrottlingLocationProviderTest { mDelegateProvider.reportLocation(createLocationResult("test_provider", mRandom)); verify(mListener, times(1)).onReportLocation(any(LocationResult.class)); verify(mDelegate, times(1)).onSetRequest(ProviderRequest.EMPTY_REQUEST); - verify(mListener, timeout(75).times(2)).onReportLocation(any(LocationResult.class)); + verify(mListener, timeout(1100).times(2)).onReportLocation(any(LocationResult.class)); mInjector.getDeviceStationaryHelper().setStationary(false); verify(mDelegate, times(2)).onSetRequest(request); - verify(mListener, after(75).times(2)).onReportLocation(any(LocationResult.class)); + verify(mListener, after(1000).times(2)).onReportLocation(any(LocationResult.class)); } @Test