summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Liang Li <lianglli@google.com> 2023-04-19 18:53:55 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-04-19 18:53:55 +0000
commitde95bc0b31d6c914d84d88a84d72e9fc25a6f0dd (patch)
treed6b909842f57276f813092356598af0d5f5a5064
parent84c2fd772ea494cd4c0514289fd1cf3676c5484c (diff)
parent1bd437fc164ed548d27453c4805025cb7564c52e (diff)
Merge "Add logging for UwbActivityInfo to StatsPullAtomService" into udc-dev
-rw-r--r--services/core/java/com/android/server/stats/pull/StatsPullAtomService.java62
1 files changed, 60 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index 0ce17ded31e4..6eded1a14dbf 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -171,6 +171,8 @@ import android.util.SparseArray;
import android.util.SparseIntArray;
import android.util.StatsEvent;
import android.util.proto.ProtoOutputStream;
+import android.uwb.UwbActivityEnergyInfo;
+import android.uwb.UwbManager;
import android.view.Display;
import com.android.internal.annotations.GuardedBy;
@@ -346,6 +348,7 @@ public class StatsPullAtomService extends SystemService {
private StorageManager mStorageManager;
private WifiManager mWifiManager;
private TelephonyManager mTelephony;
+ private UwbManager mUwbManager;
private SubscriptionManager mSubscriptionManager;
private NetworkStatsManager mNetworkStatsManager;
@@ -415,6 +418,7 @@ public class StatsPullAtomService extends SystemService {
private final Object mWifiActivityInfoLock = new Object();
private final Object mModemActivityInfoLock = new Object();
private final Object mBluetoothActivityInfoLock = new Object();
+ private final Object mUwbActivityInfoLock = new Object();
private final Object mSystemElapsedRealtimeLock = new Object();
private final Object mSystemUptimeLock = new Object();
private final Object mProcessMemoryStateLock = new Object();
@@ -537,6 +541,10 @@ public class StatsPullAtomService extends SystemService {
synchronized (mBluetoothActivityInfoLock) {
return pullBluetoothActivityInfoLocked(atomTag, data);
}
+ case FrameworkStatsLog.UWB_ACTIVITY_INFO:
+ synchronized (mUwbActivityInfoLock) {
+ return pullUwbActivityInfoLocked(atomTag, data);
+ }
case FrameworkStatsLog.SYSTEM_ELAPSED_REALTIME:
synchronized (mSystemElapsedRealtimeLock) {
return pullSystemElapsedRealtimeLocked(atomTag, data);
@@ -778,8 +786,12 @@ public class StatsPullAtomService extends SystemService {
registerEventListeners();
});
} else if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
- // Network stats related pullers can only be initialized after service is ready.
- BackgroundThread.getHandler().post(() -> initAndRegisterNetworkStatsPullers());
+ BackgroundThread.getHandler().post(() -> {
+ // Network stats related pullers can only be initialized after service is ready.
+ initAndRegisterNetworkStatsPullers();
+ // For services that are not ready at boot phase PHASE_SYSTEM_SERVICES_READY
+ initAndRegisterDeferredPullers();
+ });
}
}
@@ -990,6 +1002,12 @@ public class StatsPullAtomService extends SystemService {
registerOemManagedBytesTransfer();
}
+ private void initAndRegisterDeferredPullers() {
+ mUwbManager = mContext.getSystemService(UwbManager.class);
+
+ registerUwbActivityInfo();
+ }
+
private IThermalService getIThermalService() {
synchronized (mThermalLock) {
if (mThermalService == null) {
@@ -2152,6 +2170,46 @@ public class StatsPullAtomService extends SystemService {
return StatsManager.PULL_SUCCESS;
}
+ private void registerUwbActivityInfo() {
+ int tagId = FrameworkStatsLog.UWB_ACTIVITY_INFO;
+ mStatsManager.setPullAtomCallback(
+ tagId,
+ null, // use default PullAtomMetadata values
+ DIRECT_EXECUTOR,
+ mStatsCallbackImpl
+ );
+ }
+
+ int pullUwbActivityInfoLocked(int atomTag, List<StatsEvent> pulledData) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ SynchronousResultReceiver uwbReceiver = new SynchronousResultReceiver("uwb");
+ mUwbManager.getUwbActivityEnergyInfoAsync(Runnable::run,
+ info -> {
+ Bundle bundle = new Bundle();
+ bundle.putParcelable(BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY, info);
+ uwbReceiver.send(0, bundle);
+ }
+ );
+ final UwbActivityEnergyInfo uwbInfo = awaitControllerInfo(uwbReceiver);
+ if (uwbInfo == null) {
+ return StatsManager.PULL_SKIP;
+ }
+ pulledData.add(
+ FrameworkStatsLog.buildStatsEvent(atomTag,
+ uwbInfo.getControllerTxDurationMillis(),
+ uwbInfo.getControllerRxDurationMillis(),
+ uwbInfo.getControllerIdleDurationMillis(),
+ uwbInfo.getControllerWakeCount()));
+ } catch (RuntimeException e) {
+ Slog.e(TAG, "failed to getUwbActivityEnergyInfoAsync", e);
+ return StatsManager.PULL_SKIP;
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ return StatsManager.PULL_SUCCESS;
+ }
+
private void registerSystemElapsedRealtime() {
int tagId = FrameworkStatsLog.SYSTEM_ELAPSED_REALTIME;
PullAtomMetadata metadata = new PullAtomMetadata.Builder()