diff options
| author | 2023-04-19 18:53:55 +0000 | |
|---|---|---|
| committer | 2023-04-19 18:53:55 +0000 | |
| commit | de95bc0b31d6c914d84d88a84d72e9fc25a6f0dd (patch) | |
| tree | d6b909842f57276f813092356598af0d5f5a5064 | |
| parent | 84c2fd772ea494cd4c0514289fd1cf3676c5484c (diff) | |
| parent | 1bd437fc164ed548d27453c4805025cb7564c52e (diff) | |
Merge "Add logging for UwbActivityInfo to StatsPullAtomService" into udc-dev
| -rw-r--r-- | services/core/java/com/android/server/stats/pull/StatsPullAtomService.java | 62 |
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() |