summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/LocationManagerService.java18
-rw-r--r--services/core/java/com/android/server/location/LocationRequestStatistics.java98
-rw-r--r--services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java10
-rw-r--r--services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java86
4 files changed, 128 insertions, 84 deletions
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index 7aa466146ddd..6852fbfd2487 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -1452,7 +1452,7 @@ public class LocationManagerService extends ILocationManager.Stub {
}
throw new SecurityException("uid " + Binder.getCallingUid() + " does not have "
- + ACCESS_COARSE_LOCATION + " or " + ACCESS_FINE_LOCATION + ".");
+ + ACCESS_COARSE_LOCATION + " or " + ACCESS_FINE_LOCATION + ".");
}
private void enforceCallingOrSelfPackageName(String packageName) {
@@ -1830,8 +1830,8 @@ public class LocationManagerService extends ILocationManager.Stub {
// Update statistics for historical location requests by package/provider
mRequestStatistics.startRequesting(
- mReceiver.mCallerIdentity.mPackageName, provider, request.getInterval(),
- mIsForegroundUid);
+ mReceiver.mCallerIdentity.mPackageName, mReceiver.mCallerIdentity.mFeatureId,
+ provider, request.getInterval(), mIsForegroundUid);
}
/**
@@ -1840,7 +1840,8 @@ public class LocationManagerService extends ILocationManager.Stub {
private void updateForeground(boolean isForeground) {
mIsForegroundUid = isForeground;
mRequestStatistics.updateForeground(
- mReceiver.mCallerIdentity.mPackageName, mProvider, isForeground);
+ mReceiver.mCallerIdentity.mPackageName, mReceiver.mCallerIdentity.mFeatureId,
+ mProvider, isForeground);
}
/**
@@ -1848,7 +1849,8 @@ public class LocationManagerService extends ILocationManager.Stub {
*/
private void disposeLocked(boolean removeReceiver) {
String packageName = mReceiver.mCallerIdentity.mPackageName;
- mRequestStatistics.stopRequesting(packageName, mProvider);
+ mRequestStatistics.stopRequesting(packageName, mReceiver.mCallerIdentity.mFeatureId,
+ mProvider);
mLocationUsageLogger.logLocationApiUsage(
LocationStatsEnums.USAGE_ENDED,
@@ -1883,6 +1885,10 @@ public class LocationManagerService extends ILocationManager.Stub {
StringBuilder b = new StringBuilder("UpdateRecord[");
b.append(mProvider).append(" ");
b.append(mReceiver.mCallerIdentity.mPackageName);
+ String featureId = mReceiver.mCallerIdentity.mFeatureId;
+ if (featureId != null) {
+ b.append(" ").append(featureId).append(" ");
+ }
b.append("(").append(mReceiver.mCallerIdentity.mUid);
if (mIsForegroundUid) {
b.append(" foreground");
@@ -2886,7 +2892,7 @@ public class LocationManagerService extends ILocationManager.Stub {
for (Map.Entry<PackageProviderKey, PackageStatistics> entry
: sorted.entrySet()) {
PackageProviderKey key = entry.getKey();
- ipw.println(key.providerName + ": " + key.packageName + ": " + entry.getValue());
+ ipw.println(key.mPackageName + ": " + key.mProviderName + ": " + entry.getValue());
}
ipw.decreaseIndent();
diff --git a/services/core/java/com/android/server/location/LocationRequestStatistics.java b/services/core/java/com/android/server/location/LocationRequestStatistics.java
index b191338970e9..dcdf48ba08d2 100644
--- a/services/core/java/com/android/server/location/LocationRequestStatistics.java
+++ b/services/core/java/com/android/server/location/LocationRequestStatistics.java
@@ -16,6 +16,7 @@
package com.android.server.location;
+import android.annotation.Nullable;
import android.os.SystemClock;
import android.util.Log;
import android.util.TimeUtils;
@@ -25,6 +26,7 @@ import com.android.internal.util.IndentingPrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Objects;
/**
* Holds statistics for location requests (active requests by provider).
@@ -43,13 +45,14 @@ public class LocationRequestStatistics {
/**
* Signals that a package has started requesting locations.
*
- * @param packageName Name of package that has requested locations.
+ * @param packageName Name of package that has requested locations.
+ * @param featureId Feature id associated with the request.
* @param providerName Name of provider that is requested (e.g. "gps").
- * @param intervalMs The interval that is requested in ms.
+ * @param intervalMs The interval that is requested in ms.
*/
- public void startRequesting(String packageName, String providerName, long intervalMs,
- boolean isForeground) {
- PackageProviderKey key = new PackageProviderKey(packageName, providerName);
+ public void startRequesting(String packageName, @Nullable String featureId, String providerName,
+ long intervalMs, boolean isForeground) {
+ PackageProviderKey key = new PackageProviderKey(packageName, featureId, providerName);
PackageStatistics stats = statistics.get(key);
if (stats == null) {
stats = new PackageStatistics();
@@ -57,32 +60,36 @@ public class LocationRequestStatistics {
}
stats.startRequesting(intervalMs);
stats.updateForeground(isForeground);
- history.addRequest(packageName, providerName, intervalMs);
+ history.addRequest(packageName, featureId, providerName, intervalMs);
}
/**
* Signals that a package has stopped requesting locations.
*
- * @param packageName Name of package that has stopped requesting locations.
+ * @param packageName Name of package that has stopped requesting locations.
+ * @param featureId Feature id associated with the request.
* @param providerName Provider that is no longer being requested.
*/
- public void stopRequesting(String packageName, String providerName) {
- PackageProviderKey key = new PackageProviderKey(packageName, providerName);
+ public void stopRequesting(String packageName, @Nullable String featureId,
+ String providerName) {
+ PackageProviderKey key = new PackageProviderKey(packageName, featureId, providerName);
PackageStatistics stats = statistics.get(key);
if (stats != null) {
stats.stopRequesting();
}
- history.removeRequest(packageName, providerName);
+ history.removeRequest(packageName, featureId, providerName);
}
/**
* Signals that a package possibly switched background/foreground.
*
- * @param packageName Name of package that has stopped requesting locations.
+ * @param packageName Name of package that has stopped requesting locations.
+ * @param featureId Feature id associated with the request.
* @param providerName Provider that is no longer being requested.
*/
- public void updateForeground(String packageName, String providerName, boolean isForeground) {
- PackageProviderKey key = new PackageProviderKey(packageName, providerName);
+ public void updateForeground(String packageName, @Nullable String featureId,
+ String providerName, boolean isForeground) {
+ PackageProviderKey key = new PackageProviderKey(packageName, featureId, providerName);
PackageStatistics stats = statistics.get(key);
if (stats != null) {
stats.updateForeground(isForeground);
@@ -90,30 +97,37 @@ public class LocationRequestStatistics {
}
/**
- * A key that holds both package and provider names.
+ * A key that holds package, feature id, and provider names.
*/
public static class PackageProviderKey implements Comparable<PackageProviderKey> {
/**
* Name of package requesting location.
*/
- public final String packageName;
+ public final String mPackageName;
+ /**
+ * Feature id associated with the request, which can be used to attribute location access to
+ * different parts of the application.
+ */
+ @Nullable
+ public final String mFeatureId;
/**
* Name of provider being requested (e.g. "gps").
*/
- public final String providerName;
+ public final String mProviderName;
- PackageProviderKey(String packageName, String providerName) {
- this.packageName = packageName;
- this.providerName = providerName;
+ PackageProviderKey(String packageName, @Nullable String featureId, String providerName) {
+ this.mPackageName = packageName;
+ this.mFeatureId = featureId;
+ this.mProviderName = providerName;
}
@Override
public int compareTo(PackageProviderKey other) {
- final int providerCompare = providerName.compareTo(other.providerName);
+ final int providerCompare = mProviderName.compareTo(other.mProviderName);
if (providerCompare != 0) {
return providerCompare;
} else {
- return packageName.compareTo(other.packageName);
+ return mProviderName.compareTo(other.mProviderName);
}
}
@@ -124,13 +138,18 @@ public class LocationRequestStatistics {
}
PackageProviderKey otherKey = (PackageProviderKey) other;
- return packageName.equals(otherKey.packageName)
- && providerName.equals(otherKey.providerName);
+ return mPackageName.equals(otherKey.mPackageName)
+ && mProviderName.equals(otherKey.mProviderName)
+ && Objects.equals(mFeatureId, otherKey.mFeatureId);
}
@Override
public int hashCode() {
- return packageName.hashCode() + 31 * providerName.hashCode();
+ int hash = mPackageName.hashCode() + 31 * mProviderName.hashCode();
+ if (mFeatureId != null) {
+ hash += mFeatureId.hashCode() + 31 * hash;
+ }
+ return hash;
}
}
@@ -147,17 +166,18 @@ public class LocationRequestStatistics {
* Append an added location request to the history
*/
@VisibleForTesting
- void addRequest(String packageName, String providerName, long intervalMs) {
- addRequestSummary(new RequestSummary(packageName, providerName, intervalMs));
+ void addRequest(String packageName, @Nullable String featureId, String providerName,
+ long intervalMs) {
+ addRequestSummary(new RequestSummary(packageName, featureId, providerName, intervalMs));
}
/**
* Append a removed location request to the history
*/
@VisibleForTesting
- void removeRequest(String packageName, String providerName) {
+ void removeRequest(String packageName, @Nullable String featureId, String providerName) {
addRequestSummary(new RequestSummary(
- packageName, providerName, RequestSummary.REQUEST_ENDED_INTERVAL));
+ packageName, featureId, providerName, RequestSummary.REQUEST_ENDED_INTERVAL));
}
private void addRequestSummary(RequestSummary summary) {
@@ -193,6 +213,12 @@ public class LocationRequestStatistics {
* Name of package requesting location.
*/
private final String mPackageName;
+
+ /**
+ * Feature id associated with the request for identifying subsystem of an application.
+ */
+ @Nullable
+ private final String mFeatureId;
/**
* Name of provider being requested (e.g. "gps").
*/
@@ -211,8 +237,10 @@ public class LocationRequestStatistics {
*/
static final long REQUEST_ENDED_INTERVAL = -1;
- RequestSummary(String packageName, String providerName, long intervalMillis) {
+ RequestSummary(String packageName, @Nullable String featureId, String providerName,
+ long intervalMillis) {
this.mPackageName = packageName;
+ this.mFeatureId = featureId;
this.mProviderName = providerName;
this.mIntervalMillis = intervalMillis;
this.mElapsedRealtimeMillis = SystemClock.elapsedRealtime();
@@ -225,6 +253,9 @@ public class LocationRequestStatistics {
.append(mIntervalMillis == REQUEST_ENDED_INTERVAL ? "- " : "+ ")
.append(String.format("%7s", mProviderName)).append(" request from ")
.append(mPackageName);
+ if (mFeatureId != null) {
+ s.append(" with feature ").append(mFeatureId);
+ }
if (mIntervalMillis != REQUEST_ENDED_INTERVAL) {
s.append(" at interval ").append(mIntervalMillis / 1000).append(" seconds");
}
@@ -246,14 +277,15 @@ public class LocationRequestStatistics {
private long mFastestIntervalMs;
// The slowest interval this package has ever requested.
private long mSlowestIntervalMs;
- // The total time this app has requested location (not including currently running requests).
+ // The total time this app has requested location (not including currently running
+ // requests).
private long mTotalDurationMs;
// Time when this package most recently went to foreground, requesting location. 0 means
// not currently in foreground.
private long mLastForegroundElapsedTimeMs;
- // The time this app has requested location (not including currently running requests), while
- // in foreground.
+ // The time this app has requested location (not including currently running requests),
+ // while in foreground.
private long mForegroundDurationMs;
// Time when package last went dormant (stopped requesting location)
@@ -328,7 +360,7 @@ public class LocationRequestStatistics {
*/
public long getForegroundDurationMs() {
long currentDurationMs = mForegroundDurationMs;
- if (mLastForegroundElapsedTimeMs != 0 ) {
+ if (mLastForegroundElapsedTimeMs != 0) {
currentDurationMs
+= SystemClock.elapsedRealtime() - mLastForegroundElapsedTimeMs;
}
diff --git a/services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java b/services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java
index 4cbdbd178944..2d0fe5875301 100644
--- a/services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java
+++ b/services/robotests/src/com/android/server/location/LocationRequestStatisticsTest.java
@@ -35,6 +35,7 @@ import java.io.StringWriter;
@RunWith(RobolectricTestRunner.class)
@Presubmit
public class LocationRequestStatisticsTest {
+ private static final String FEATURE_ID = "featureId";
/**
* Check adding and removing requests & strings
@@ -43,17 +44,18 @@ public class LocationRequestStatisticsTest {
public void testRequestSummary() {
LocationRequestStatistics.RequestSummary summary =
new LocationRequestStatistics.RequestSummary(
- "com.example", "gps", 1000);
+ "com.example", FEATURE_ID, "gps", 1000);
StringWriter stringWriter = new StringWriter();
summary.dump(new IndentingPrintWriter(new PrintWriter(stringWriter), " "), 1234);
assertThat(stringWriter.toString()).startsWith("At");
StringWriter stringWriterRemove = new StringWriter();
summary = new LocationRequestStatistics.RequestSummary(
- "com.example", "gps",
+ "com.example", "gps", FEATURE_ID,
LocationRequestStatistics.RequestSummary.REQUEST_ENDED_INTERVAL);
summary.dump(new IndentingPrintWriter(new PrintWriter(stringWriterRemove), " "), 2345);
assertThat(stringWriterRemove.toString()).contains("-");
+ assertThat(stringWriterRemove.toString()).contains(FEATURE_ID);
}
/**
@@ -62,11 +64,11 @@ public class LocationRequestStatisticsTest {
@Test
public void testSummaryList() {
LocationRequestStatistics statistics = new LocationRequestStatistics();
- statistics.history.addRequest("com.example", "gps", 1000);
+ statistics.history.addRequest("com.example", FEATURE_ID, "gps", 1000);
assertThat(statistics.history.mList.size()).isEqualTo(1);
// Try (not) to overflow
for (int i = 0; i < LocationRequestStatistics.RequestSummaryLimitedHistory.MAX_SIZE; i++) {
- statistics.history.addRequest("com.example", "gps", 1000);
+ statistics.history.addRequest("com.example", FEATURE_ID, "gps", 1000);
}
assertThat(statistics.history.mList.size()).isEqualTo(
LocationRequestStatistics.RequestSummaryLimitedHistory.MAX_SIZE);
diff --git a/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java b/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java
index c45820e6ec9d..b6b8b82f191a 100644
--- a/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java
+++ b/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java
@@ -1,17 +1,18 @@
package com.android.server.location;
-import com.android.server.location.LocationRequestStatistics.PackageProviderKey;
-import com.android.server.location.LocationRequestStatistics.PackageStatistics;
-
import android.os.SystemClock;
import android.test.AndroidTestCase;
+import com.android.server.location.LocationRequestStatistics.PackageProviderKey;
+import com.android.server.location.LocationRequestStatistics.PackageStatistics;
+
/**
* Unit tests for {@link LocationRequestStatistics}.
*/
public class LocationRequestStatisticsTest extends AndroidTestCase {
private static final String PACKAGE1 = "package1";
private static final String PACKAGE2 = "package2";
+ private static final String FEATURE_ID = "featureId";
private static final String PROVIDER1 = "provider1";
private static final String PROVIDER2 = "provider2";
private static final long INTERVAL1 = 5000;
@@ -30,12 +31,13 @@ public class LocationRequestStatisticsTest extends AndroidTestCase {
* Tests that adding a single package works correctly.
*/
public void testSinglePackage() {
- mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
assertEquals(1, mStatistics.statistics.size());
PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
- assertEquals(PACKAGE1, key.packageName);
- assertEquals(PROVIDER1, key.providerName);
+ assertEquals(PACKAGE1, key.mPackageName);
+ assertEquals(PROVIDER1, key.mProviderName);
+ assertEquals(FEATURE_ID, key.mFeatureId);
PackageStatistics stats = mStatistics.statistics.values().iterator().next();
verifyStatisticsTimes(stats);
assertEquals(INTERVAL1, stats.getFastestIntervalMs());
@@ -47,21 +49,22 @@ public class LocationRequestStatisticsTest extends AndroidTestCase {
* Tests that adding a single package works correctly when it is stopped and restarted.
*/
public void testSinglePackage_stopAndRestart() {
- mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
- mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
- mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
assertEquals(1, mStatistics.statistics.size());
PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
- assertEquals(PACKAGE1, key.packageName);
- assertEquals(PROVIDER1, key.providerName);
+ assertEquals(PACKAGE1, key.mPackageName);
+ assertEquals(FEATURE_ID, key.mFeatureId);
+ assertEquals(PROVIDER1, key.mProviderName);
PackageStatistics stats = mStatistics.statistics.values().iterator().next();
verifyStatisticsTimes(stats);
assertEquals(INTERVAL1, stats.getFastestIntervalMs());
assertEquals(INTERVAL1, stats.getSlowestIntervalMs());
assertTrue(stats.isActive());
- mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
assertFalse(stats.isActive());
}
@@ -69,21 +72,22 @@ public class LocationRequestStatisticsTest extends AndroidTestCase {
* Tests that adding a single package works correctly when multiple intervals are used.
*/
public void testSinglePackage_multipleIntervals() {
- mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
- mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL2, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL2, true);
assertEquals(1, mStatistics.statistics.size());
PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
- assertEquals(PACKAGE1, key.packageName);
- assertEquals(PROVIDER1, key.providerName);
+ assertEquals(PACKAGE1, key.mPackageName);
+ assertEquals(PROVIDER1, key.mProviderName);
+ assertEquals(FEATURE_ID, key.mFeatureId);
PackageStatistics stats = mStatistics.statistics.values().iterator().next();
verifyStatisticsTimes(stats);
assertEquals(INTERVAL1, stats.getFastestIntervalMs());
assertTrue(stats.isActive());
- mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
assertTrue(stats.isActive());
- mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
assertFalse(stats.isActive());
}
@@ -91,27 +95,27 @@ public class LocationRequestStatisticsTest extends AndroidTestCase {
* Tests that adding a single package works correctly when multiple providers are used.
*/
public void testSinglePackage_multipleProviders() {
- mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
- mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL2, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER2, INTERVAL2, true);
assertEquals(2, mStatistics.statistics.size());
- PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, PROVIDER1);
+ PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, FEATURE_ID, PROVIDER1);
PackageStatistics stats1 = mStatistics.statistics.get(key1);
verifyStatisticsTimes(stats1);
assertEquals(INTERVAL1, stats1.getSlowestIntervalMs());
assertEquals(INTERVAL1, stats1.getFastestIntervalMs());
assertTrue(stats1.isActive());
- PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, PROVIDER2);
+ PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, FEATURE_ID, PROVIDER2);
PackageStatistics stats2 = mStatistics.statistics.get(key2);
verifyStatisticsTimes(stats2);
assertEquals(INTERVAL2, stats2.getSlowestIntervalMs());
assertEquals(INTERVAL2, stats2.getFastestIntervalMs());
assertTrue(stats2.isActive());
- mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
assertFalse(stats1.isActive());
assertTrue(stats2.isActive());
- mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER2);
assertFalse(stats1.isActive());
assertFalse(stats2.isActive());
}
@@ -120,46 +124,46 @@ public class LocationRequestStatisticsTest extends AndroidTestCase {
* Tests that adding multiple packages works correctly.
*/
public void testMultiplePackages() {
- mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
- mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL1, true);
- mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL2, true);
- mStatistics.startRequesting(PACKAGE2, PROVIDER1, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER2, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER2, INTERVAL2, true);
+ mStatistics.startRequesting(PACKAGE2, FEATURE_ID, PROVIDER1, INTERVAL1, true);
assertEquals(3, mStatistics.statistics.size());
- PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, PROVIDER1);
+ PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, FEATURE_ID, PROVIDER1);
PackageStatistics stats1 = mStatistics.statistics.get(key1);
verifyStatisticsTimes(stats1);
assertEquals(INTERVAL1, stats1.getSlowestIntervalMs());
assertEquals(INTERVAL1, stats1.getFastestIntervalMs());
assertTrue(stats1.isActive());
- PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, PROVIDER2);
+ PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, FEATURE_ID, PROVIDER2);
PackageStatistics stats2 = mStatistics.statistics.get(key2);
verifyStatisticsTimes(stats2);
assertEquals(INTERVAL2, stats2.getSlowestIntervalMs());
assertEquals(INTERVAL1, stats2.getFastestIntervalMs());
assertTrue(stats2.isActive());
- PackageProviderKey key3 = new PackageProviderKey(PACKAGE2, PROVIDER1);
+ PackageProviderKey key3 = new PackageProviderKey(PACKAGE2, FEATURE_ID, PROVIDER1);
PackageStatistics stats3 = mStatistics.statistics.get(key3);
verifyStatisticsTimes(stats3);
assertEquals(INTERVAL1, stats3.getSlowestIntervalMs());
assertEquals(INTERVAL1, stats3.getFastestIntervalMs());
assertTrue(stats3.isActive());
- mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
assertFalse(stats1.isActive());
assertTrue(stats2.isActive());
assertTrue(stats3.isActive());
- mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER2);
assertFalse(stats1.isActive());
assertTrue(stats2.isActive());
assertTrue(stats3.isActive());
- mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER2);
assertFalse(stats2.isActive());
- mStatistics.stopRequesting(PACKAGE2, PROVIDER1);
+ mStatistics.stopRequesting(PACKAGE2, FEATURE_ID, PROVIDER1);
assertFalse(stats1.isActive());
assertFalse(stats2.isActive());
assertFalse(stats3.isActive());
@@ -169,14 +173,14 @@ public class LocationRequestStatisticsTest extends AndroidTestCase {
* Tests that switching foreground & background states accmulates time reasonably.
*/
public void testForegroundBackground() {
- mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1, true);
- mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL1, true);
- mStatistics.startRequesting(PACKAGE2, PROVIDER1, INTERVAL1, false);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER1, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE1, FEATURE_ID, PROVIDER2, INTERVAL1, true);
+ mStatistics.startRequesting(PACKAGE2, FEATURE_ID, PROVIDER1, INTERVAL1, false);
- mStatistics.updateForeground(PACKAGE1, PROVIDER2, false);
- mStatistics.updateForeground(PACKAGE2, PROVIDER1, true);
+ mStatistics.updateForeground(PACKAGE1, FEATURE_ID, PROVIDER2, false);
+ mStatistics.updateForeground(PACKAGE2, FEATURE_ID, PROVIDER1, true);
- mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+ mStatistics.stopRequesting(PACKAGE1, FEATURE_ID, PROVIDER1);
for (PackageStatistics stats : mStatistics.statistics.values()) {
verifyStatisticsTimes(stats);