From 4df57400273dbcf0fd0e9c4a4bfc295ddf24852d Mon Sep 17 00:00:00 2001 From: Jeffrey Huang Date: Tue, 14 Jan 2020 11:57:22 -0800 Subject: [PATCH] Migrate pullWifiActivityInfo Test: atest HostAtomTests#testWifiActivityInfo Test: adb shell cmd stats pull-source 10011 Change-Id: I6c4e80df4121504cdcfb49c9f5b84916ae2adef3 --- .../server/stats/StatsCompanionService.java | 53 ------------------- .../src/external/StatsPullerManager.cpp | 4 -- .../server/stats/StatsPullAtomService.java | 53 +++++++++++++++++-- 3 files changed, 50 insertions(+), 60 deletions(-) diff --git a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java index 1faa814ed83f1..5edca5ac437fe 100644 --- a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java @@ -744,54 +744,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { return null; } - private void pullWifiActivityInfo( - int tagId, long elapsedNanos, long wallClockNanos, - List pulledData) { - WifiManager wifiManager; - synchronized (this) { - if (mWifiManager == null) { - mWifiManager = mContext.getSystemService(WifiManager.class); - } - wifiManager = mWifiManager; - } - if (wifiManager == null) { - return; - } - long token = Binder.clearCallingIdentity(); - try { - SynchronousResultReceiver wifiReceiver = new SynchronousResultReceiver("wifi"); - wifiManager.getWifiActivityEnergyInfoAsync( - new Executor() { - @Override - public void execute(Runnable runnable) { - // run the listener on the binder thread, if it was run on the main - // thread it would deadlock since we would be waiting on ourselves - runnable.run(); - } - }, - info -> { - Bundle bundle = new Bundle(); - bundle.putParcelable(BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY, info); - wifiReceiver.send(0, bundle); - } - ); - final WifiActivityEnergyInfo wifiInfo = awaitControllerInfo(wifiReceiver); - if (wifiInfo == null) { - return; - } - StatsLogEventWrapper e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeLong(wifiInfo.getTimeSinceBootMillis()); - e.writeInt(wifiInfo.getStackState()); - e.writeLong(wifiInfo.getControllerTxDurationMillis()); - e.writeLong(wifiInfo.getControllerRxDurationMillis()); - e.writeLong(wifiInfo.getControllerIdleDurationMillis()); - e.writeLong(wifiInfo.getControllerEnergyUsedMicroJoules()); - pulledData.add(e); - } finally { - Binder.restoreCallingIdentity(token); - } - } - private void pullModemActivityInfo( int tagId, long elapsedNanos, long wallClockNanos, List pulledData) { @@ -2010,11 +1962,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { long wallClockNanos = SystemClock.currentTimeMicro() * 1000L; switch (tagId) { - case StatsLog.WIFI_ACTIVITY_INFO: { - pullWifiActivityInfo(tagId, elapsedNanos, wallClockNanos, ret); - break; - } - case StatsLog.MODEM_ACTIVITY_INFO: { pullModemActivityInfo(tagId, elapsedNanos, wallClockNanos, ret); break; diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index 4baa08c69ade1..660a48a8bf0b5 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -68,10 +68,6 @@ std::map StatsPullerManager::kAllPullAtomInfo = { {{.atomTag = android::util::ON_DEVICE_POWER_MEASUREMENT}, {.puller = new PowerStatsPuller()}}, - // wifi_activity_energy_info - {{.atomTag = android::util::WIFI_ACTIVITY_INFO}, - {.puller = new StatsCompanionServicePuller(android::util::WIFI_ACTIVITY_INFO)}}, - // modem_activity_info {{.atomTag = android::util::MODEM_ACTIVITY_INFO}, {.puller = new StatsCompanionServicePuller(android::util::MODEM_ACTIVITY_INFO)}}, diff --git a/services/core/java/com/android/server/stats/StatsPullAtomService.java b/services/core/java/com/android/server/stats/StatsPullAtomService.java index 91e39dad979a4..1743b334d1a87 100644 --- a/services/core/java/com/android/server/stats/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/StatsPullAtomService.java @@ -210,6 +210,7 @@ public class StatsPullAtomService extends SystemService { @Override public void onStart() { mStatsManager = (StatsManager) mContext.getSystemService(Context.STATS_MANAGER); + mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); // Used to initialize the CPU Frequency atom. PowerProfile powerProfile = new PowerProfile(mContext); @@ -812,11 +813,57 @@ public class StatsPullAtomService extends SystemService { } private void registerWifiActivityInfo() { - // No op. + int tagId = StatsLog.WIFI_ACTIVITY_INFO; + mStatsManager.registerPullAtomCallback( + tagId, + null, // use default PullAtomMetadata values + (atomTag, data) -> pullWifiActivityInfo(atomTag, data), + BackgroundThread.getExecutor() + ); } - private void pullWifiActivityInfo() { - // No op. + private WifiManager mWifiManager; + + private int pullWifiActivityInfo(int atomTag, List pulledData) { + long token = Binder.clearCallingIdentity(); + try { + SynchronousResultReceiver wifiReceiver = new SynchronousResultReceiver("wifi"); + mWifiManager.getWifiActivityEnergyInfoAsync( + new Executor() { + @Override + public void execute(Runnable runnable) { + // run the listener on the binder thread, if it was run on the main + // thread it would deadlock since we would be waiting on ourselves + runnable.run(); + } + }, + info -> { + Bundle bundle = new Bundle(); + bundle.putParcelable(BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY, info); + wifiReceiver.send(0, bundle); + } + ); + final WifiActivityEnergyInfo wifiInfo = awaitControllerInfo(wifiReceiver); + if (wifiInfo == null) { + return StatsManager.PULL_SKIP; + } + StatsEvent e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeLong(wifiInfo.getTimeSinceBootMillis()) + .writeInt(wifiInfo.getStackState()) + .writeLong(wifiInfo.getControllerTxDurationMillis()) + .writeLong(wifiInfo.getControllerRxDurationMillis()) + .writeLong(wifiInfo.getControllerIdleDurationMillis()) + .writeLong(wifiInfo.getControllerEnergyUsedMicroJoules()) + .build(); + pulledData.add(e); + } catch (RuntimeException e) { + Slog.e(TAG, "failed to getWifiActivityEnergyInfoAsync", e); + return StatsManager.PULL_SKIP; + } finally { + Binder.restoreCallingIdentity(token); + } + return StatsManager.PULL_SUCCESS; } private void registerModemActivityInfo() {