summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuchir Rastogi <ruchirr@google.com>2020-06-03 17:29:46 -0700
committerRuchir Rastogi <ruchirr@google.com>2020-06-05 14:08:37 -0700
commitef0904eac06a3ad43125d5f259c2d2f619bb846c (patch)
tree12d053eaef623860ace62bffb31fe91a0d69805d
parent5ea18c9036f07633c0fd091c94329573fa588d7b (diff)
Move GnssStats puller to binder thread
Pass direct executor to setPullAtomCallback. This causes the puller to run directly on the binder thread, as opposed to the Background thread, which could be busy with other work. This change means that the puller can be executed concurrently. To properly handle that, the Statistics class is made thread-safe. Test: adb shell cmd stats pull-source 10074 Bug: 157186182 Change-Id: I6c0940fd4ed231f9d962981cc1f9e8c983c48f7f
-rw-r--r--location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java18
1 files changed, 9 insertions, 9 deletions
diff --git a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java
index 450ddc10deda..6c401161062f 100644
--- a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java
+++ b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java
@@ -32,7 +32,7 @@ import android.util.TimeUtils;
import com.android.internal.app.IBatteryStats;
import com.android.internal.location.nano.GnssLogsProto.GnssLog;
import com.android.internal.location.nano.GnssLogsProto.PowerMetrics;
-import com.android.internal.os.BackgroundThread;
+import com.android.internal.util.ConcurrentUtils;
import com.android.internal.util.FrameworkStatsLog;
import java.util.ArrayList;
@@ -465,7 +465,7 @@ public class GnssMetrics {
mConstellationTypes = new boolean[GnssStatus.CONSTELLATION_COUNT];
}
- /** Class for storing statistics */
+ /** Thread-safe class for storing statistics */
private static class Statistics {
private int mCount;
@@ -474,7 +474,7 @@ public class GnssMetrics {
private long mLongSum;
/** Resets statistics */
- public void reset() {
+ public synchronized void reset() {
mCount = 0;
mSum = 0.0;
mSumSquare = 0.0;
@@ -482,7 +482,7 @@ public class GnssMetrics {
}
/** Adds an item */
- public void addItem(double item) {
+ public synchronized void addItem(double item) {
mCount++;
mSum += item;
mSumSquare += item * item;
@@ -490,17 +490,17 @@ public class GnssMetrics {
}
/** Returns number of items added */
- public int getCount() {
+ public synchronized int getCount() {
return mCount;
}
/** Returns mean */
- public double getMean() {
+ public synchronized double getMean() {
return mSum / mCount;
}
/** Returns standard deviation */
- public double getStandardDeviation() {
+ public synchronized double getStandardDeviation() {
double m = mSum / mCount;
m = m * m;
double v = mSumSquare / mCount;
@@ -511,7 +511,7 @@ public class GnssMetrics {
}
/** Returns long sum */
- public long getLongSum() {
+ public synchronized long getLongSum() {
return mLongSum;
}
}
@@ -625,7 +625,7 @@ public class GnssMetrics {
mStatsManager.setPullAtomCallback(
FrameworkStatsLog.GNSS_STATS,
null, // use default PullAtomMetadata values
- BackgroundThread.getExecutor(), pullAtomCallback);
+ ConcurrentUtils.DIRECT_EXECUTOR, pullAtomCallback);
}
/**