From fa97fcf7b9b9999102bc0c6b298114375b27a1c3 Mon Sep 17 00:00:00 2001 From: Ruchi Kandoi Date: Fri, 13 May 2016 15:10:39 -0700 Subject: [PATCH] network: Adds the functionality to parse uid in netlink messages. Netlink notifications about the state of the modem contains uid too. This patch adds the functionality to add that. It also fixes the bug to parse the timestamp in the message even in cases where the length is greater than expected. Bug: 28527904 Change-Id: I4643bff3eb5b1ffa2dc0b78f1c6947d60487e0d8 Signed-off-by: Ruchi Kandoi --- .../com/android/internal/app/IBatteryStats.aidl | 2 +- .../android/internal/os/BatteryStatsImpl.java | 2 +- .../server/NetworkManagementService.java | 17 +++++++++++------ .../android/server/am/BatteryStatsService.java | 4 ++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl index 44e072d56ed3b..216a4f1c9a448 100644 --- a/core/java/com/android/internal/app/IBatteryStats.aidl +++ b/core/java/com/android/internal/app/IBatteryStats.aidl @@ -90,7 +90,7 @@ interface IBatteryStats { void noteWakeUp(String reason, int reasonUid); void noteInteractive(boolean interactive); void noteConnectivityChanged(int type, String extra); - void noteMobileRadioPowerState(int powerState, long timestampNs); + void noteMobileRadioPowerState(int powerState, long timestampNs, int uid); void notePhoneOn(); void notePhoneOff(); void notePhoneSignalStrength(in SignalStrength signalStrength); diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 9fdc9c41a678c..937fc75046cb7 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -3538,7 +3538,7 @@ public class BatteryStatsImpl extends BatteryStats { mNumConnectivityChange++; } - public void noteMobileRadioPowerState(int powerState, long timestampNs) { + public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) { final long elapsedRealtime = mClocks.elapsedRealtime(); final long uptime = mClocks.uptimeMillis(); if (mMobileRadioPowerState != powerState) { diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index e5b301e803af9..22f01abc951f8 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -468,7 +468,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub * Notify our observers of a change in the data activity state of the interface */ private void notifyInterfaceClassActivity(int type, int powerState, long tsNanos, - boolean fromRadio) { + int uid, boolean fromRadio) { final boolean isMobile = ConnectivityManager.isNetworkTypeMobile(type); if (isMobile) { if (!fromRadio) { @@ -484,7 +484,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub if (mLastPowerStateFromRadio != powerState) { mLastPowerStateFromRadio = powerState; try { - getBatteryStats().noteMobileRadioPowerState(powerState, tsNanos); + getBatteryStats().noteMobileRadioPowerState(powerState, tsNanos, uid); } catch (RemoteException e) { } } @@ -845,9 +845,13 @@ public class NetworkManagementService extends INetworkManagementService.Stub throw new IllegalStateException(errorMessage); } long timestampNanos = 0; - if (cooked.length == 5) { + int processUid = -1; + if (cooked.length >= 5) { try { timestampNanos = Long.parseLong(cooked[4]); + if (cooked.length == 6) { + processUid = Integer.parseInt(cooked[5]); + } } catch(NumberFormatException ne) {} } else { timestampNanos = SystemClock.elapsedRealtimeNanos(); @@ -855,7 +859,8 @@ public class NetworkManagementService extends INetworkManagementService.Stub boolean isActive = cooked[2].equals("active"); notifyInterfaceClassActivity(Integer.parseInt(cooked[3]), isActive ? DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH - : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW, timestampNanos, false); + : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW, + timestampNanos, processUid, false); return true; // break; case NetdResponseCode.InterfaceAddressChange: @@ -1599,7 +1604,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub @Override public void run() { notifyInterfaceClassActivity(type, DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, - SystemClock.elapsedRealtimeNanos(), false); + SystemClock.elapsedRealtimeNanos(), -1, false); } }); } @@ -1628,7 +1633,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub @Override public void run() { notifyInterfaceClassActivity(params.type, DataConnectionRealTimeInfo.DC_POWER_STATE_LOW, - SystemClock.elapsedRealtimeNanos(), false); + SystemClock.elapsedRealtimeNanos(), -1, false); } }); } diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 6deebc0ce679d..cf5c54d0030f6 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -565,10 +565,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub } } - public void noteMobileRadioPowerState(int powerState, long timestampNs) { + public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) { enforceCallingPermission(); synchronized (mStats) { - mStats.noteMobileRadioPowerState(powerState, timestampNs); + mStats.noteMobileRadioPowerState(powerState, timestampNs, uid); } }