Loading src/java/com/android/internal/telephony/PhoneFactory.java +4 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.internal.telephony.euicc.EuiccController; import com.android.internal.telephony.ims.ImsResolver; import com.android.internal.telephony.imsphone.ImsPhone; import com.android.internal.telephony.imsphone.ImsPhoneFactory; import com.android.internal.telephony.metrics.TelephonyMetrics; import com.android.internal.telephony.sip.SipPhone; import com.android.internal.telephony.sip.SipPhoneFactory; import com.android.internal.telephony.uicc.UiccController; Loading Loading @@ -111,6 +112,9 @@ public class PhoneFactory { // create the telephony device controller. TelephonyDevController.create(); TelephonyMetrics metrics = TelephonyMetrics.getInstance(); metrics.setContext(context); int retryCount = 0; for(;;) { boolean hasException = false; Loading src/java/com/android/internal/telephony/metrics/ModemPowerMetrics.java +22 −27 Original line number Diff line number Diff line Loading @@ -15,13 +15,10 @@ */ package com.android.internal.telephony.metrics; import android.os.BatteryStats; import android.os.RemoteException; import android.os.ServiceManager; import android.os.BatteryStatsManager; import android.os.connectivity.CellularBatteryStats; import android.text.format.DateUtils; import com.android.internal.app.IBatteryStats; import com.android.internal.telephony.nano.TelephonyProto.ModemPowerStats; /** Loading @@ -30,12 +27,11 @@ import com.android.internal.telephony.nano.TelephonyProto.ModemPowerStats; */ public class ModemPowerMetrics { /* BatteryStats API */ private final IBatteryStats mBatteryStats; /* BatteryStatsManager API */ private BatteryStatsManager mBatteryStatsManager; public ModemPowerMetrics() { mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService( BatteryStats.SERVICE_NAME)); public ModemPowerMetrics(BatteryStatsManager batteryStatsManager) { mBatteryStatsManager = batteryStatsManager; } /** Loading @@ -46,45 +42,44 @@ public class ModemPowerMetrics { ModemPowerStats m = new ModemPowerStats(); CellularBatteryStats stats = getStats(); if (stats != null) { m.loggingDurationMs = stats.getLoggingDurationMs(); m.energyConsumedMah = stats.getEnergyConsumedMaMs() m.loggingDurationMs = stats.getLoggingDurationMillis(); m.energyConsumedMah = stats.getEnergyConsumedMaMillis() / ((double) DateUtils.HOUR_IN_MILLIS); m.numPacketsTx = stats.getNumPacketsTx(); m.cellularKernelActiveTimeMs = stats.getKernelActiveTimeMs(); if (stats.getTimeInRxSignalStrengthLevelMs() != null && stats.getTimeInRxSignalStrengthLevelMs().length > 0) { m.timeInVeryPoorRxSignalLevelMs = stats.getTimeInRxSignalStrengthLevelMs()[0]; m.cellularKernelActiveTimeMs = stats.getKernelActiveTimeMillis(); if (stats.getTimeInRxSignalStrengthLevelMicros() != null && stats.getTimeInRxSignalStrengthLevelMicros().length > 0) { m.timeInVeryPoorRxSignalLevelMs = stats.getTimeInRxSignalStrengthLevelMicros()[0]; } m.sleepTimeMs = stats.getSleepTimeMs(); m.idleTimeMs = stats.getIdleTimeMs(); m.rxTimeMs = stats.getRxTimeMs(); long[] t = stats.getTxTimeMs(); m.sleepTimeMs = stats.getSleepTimeMillis(); m.idleTimeMs = stats.getIdleTimeMillis(); m.rxTimeMs = stats.getRxTimeMillis(); long[] t = stats.getTxTimeMillis(); m.txTimeMs = new long[t.length]; System.arraycopy(t, 0, m.txTimeMs, 0, t.length); m.numBytesTx = stats.getNumBytesTx(); m.numPacketsRx = stats.getNumPacketsRx(); m.numBytesRx = stats.getNumBytesRx(); long[] tr = stats.getTimeInRatMs(); long[] tr = stats.getTimeInRatMicros(); m.timeInRatMs = new long[tr.length]; System.arraycopy(tr, 0, m.timeInRatMs, 0, tr.length); long[] trx = stats.getTimeInRxSignalStrengthLevelMs(); long[] trx = stats.getTimeInRxSignalStrengthLevelMicros(); m.timeInRxSignalStrengthLevelMs = new long[trx.length]; System.arraycopy(trx, 0, m.timeInRxSignalStrengthLevelMs, 0, trx.length); m.monitoredRailEnergyConsumedMah = stats.getMonitoredRailChargeConsumedMaMs() m.monitoredRailEnergyConsumedMah = stats.getMonitoredRailChargeConsumedMaMillis() / ((double) DateUtils.HOUR_IN_MILLIS); } return m; } /** * Get cellular stats from batterystats * Get cellular stats from BatteryStatsManager * @return CellularBatteryStats */ private CellularBatteryStats getStats() { try { return mBatteryStats.getCellularBatteryStats(); } catch (RemoteException e) { } if (mBatteryStatsManager == null) { return null; } return mBatteryStatsManager.getCellularBatteryStats(); } } src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java +22 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,9 @@ import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYP import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYPE_UNSTRUCTURED; import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_UNKNOWN; import android.content.Context; import android.net.NetworkCapabilities; import android.os.BatteryStatsManager; import android.os.Build; import android.os.SystemClock; import android.os.SystemProperties; Loading Loading @@ -229,6 +231,8 @@ public class TelephonyMetrics { /** Indicating if some of the telephony events are dropped in this log */ private boolean mTelephonyEventsDropped = false; private Context mContext; public TelephonyMetrics() { mStartSystemTimeMs = System.currentTimeMillis(); mStartElapsedTimeMs = SystemClock.elapsedRealtime(); Loading @@ -247,6 +251,16 @@ public class TelephonyMetrics { return sInstance; } /** * Set the context for telephony metrics. * * @param context Context * @hide */ public void setContext(Context context) { mContext = context; } /** * Dump the state of various objects, add calls to other objects as desired. * Loading Loading @@ -563,7 +577,11 @@ public class TelephonyMetrics { pw.decreaseIndent(); pw.println("Modem power stats:"); pw.increaseIndent(); ModemPowerStats s = new ModemPowerMetrics().buildProto(); BatteryStatsManager batteryStatsManager = mContext == null ? null : (BatteryStatsManager) mContext.getSystemService(Context.BATTERY_STATS_SERVICE); ModemPowerStats s = new ModemPowerMetrics(batteryStatsManager).buildProto(); pw.println("Power log duration (battery time) (ms): " + s.loggingDurationMs); pw.println("Energy consumed by modem (mAh): " + s.energyConsumedMah); pw.println("Number of packets sent (tx): " + s.numPacketsTx); Loading Loading @@ -722,7 +740,9 @@ public class TelephonyMetrics { } // Build modem power metrics log.modemPowerStats = new ModemPowerMetrics().buildProto(); BatteryStatsManager batteryStatsManager = mContext == null ? null : (BatteryStatsManager) mContext.getSystemService(Context.BATTERY_STATS_SERVICE); log.modemPowerStats = new ModemPowerMetrics(batteryStatsManager).buildProto(); // Log the hardware revision log.hardwareRevision = SystemProperties.get("ro.boot.revision", ""); Loading tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +5 −1 Original line number Diff line number Diff line Loading @@ -55,13 +55,13 @@ import android.net.ConnectivityManager; import android.net.Uri; import android.net.wifi.WifiManager; import android.os.BatteryManager; import android.os.BatteryStatsManager; import android.os.Bundle; import android.os.Handler; import android.os.IInterface; import android.os.PersistableBundle; import android.os.UserHandle; import android.os.UserManager; import android.telephony.TelephonyRegistryManager; import android.preference.PreferenceManager; import android.provider.Settings; import android.provider.Telephony.ServiceStateTable; Loading @@ -69,6 +69,7 @@ import android.telecom.TelecomManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.TelephonyRegistryManager; import android.telephony.euicc.EuiccManager; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; Loading Loading @@ -250,6 +251,8 @@ public class ContextFixture implements TestFixture<Context> { return mDownloadManager; case Context.TELEPHONY_REGISTRY_SERVICE: return mTelephonyRegistryManager; case Context.BATTERY_STATS_SERVICE: return mBatteryStatsManager; case Context.DISPLAY_SERVICE: case Context.POWER_SERVICE: // PowerManager and DisplayManager are final classes so cannot be mocked, Loading Loading @@ -574,6 +577,7 @@ public class ContextFixture implements TestFixture<Context> { private final PackageInfo mPackageInfo = mock(PackageInfo.class); private final TelephonyRegistryManager mTelephonyRegistryManager = mock(TelephonyRegistryManager.class); private final BatteryStatsManager mBatteryStatsManager = mock(BatteryStatsManager.class); private final ContentProvider mContentProvider = spy(new FakeContentProvider()); Loading tests/telephonytests/src/com/android/internal/telephony/metrics/TelephonyMetricsTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ public class TelephonyMetricsTest extends TelephonyTest { public void setUp() throws Exception { super.setUp(getClass().getSimpleName()); mMetrics = new TelephonyMetrics(); mMetrics.setContext(mContext); mUusInfo = new UUSInfo(1, 2, new byte[]{1, 2}); doReturn("123").when(mImsCallSession).getCallId(); mImsReasonInfo = new ImsReasonInfo(); Loading Loading
src/java/com/android/internal/telephony/PhoneFactory.java +4 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.internal.telephony.euicc.EuiccController; import com.android.internal.telephony.ims.ImsResolver; import com.android.internal.telephony.imsphone.ImsPhone; import com.android.internal.telephony.imsphone.ImsPhoneFactory; import com.android.internal.telephony.metrics.TelephonyMetrics; import com.android.internal.telephony.sip.SipPhone; import com.android.internal.telephony.sip.SipPhoneFactory; import com.android.internal.telephony.uicc.UiccController; Loading Loading @@ -111,6 +112,9 @@ public class PhoneFactory { // create the telephony device controller. TelephonyDevController.create(); TelephonyMetrics metrics = TelephonyMetrics.getInstance(); metrics.setContext(context); int retryCount = 0; for(;;) { boolean hasException = false; Loading
src/java/com/android/internal/telephony/metrics/ModemPowerMetrics.java +22 −27 Original line number Diff line number Diff line Loading @@ -15,13 +15,10 @@ */ package com.android.internal.telephony.metrics; import android.os.BatteryStats; import android.os.RemoteException; import android.os.ServiceManager; import android.os.BatteryStatsManager; import android.os.connectivity.CellularBatteryStats; import android.text.format.DateUtils; import com.android.internal.app.IBatteryStats; import com.android.internal.telephony.nano.TelephonyProto.ModemPowerStats; /** Loading @@ -30,12 +27,11 @@ import com.android.internal.telephony.nano.TelephonyProto.ModemPowerStats; */ public class ModemPowerMetrics { /* BatteryStats API */ private final IBatteryStats mBatteryStats; /* BatteryStatsManager API */ private BatteryStatsManager mBatteryStatsManager; public ModemPowerMetrics() { mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService( BatteryStats.SERVICE_NAME)); public ModemPowerMetrics(BatteryStatsManager batteryStatsManager) { mBatteryStatsManager = batteryStatsManager; } /** Loading @@ -46,45 +42,44 @@ public class ModemPowerMetrics { ModemPowerStats m = new ModemPowerStats(); CellularBatteryStats stats = getStats(); if (stats != null) { m.loggingDurationMs = stats.getLoggingDurationMs(); m.energyConsumedMah = stats.getEnergyConsumedMaMs() m.loggingDurationMs = stats.getLoggingDurationMillis(); m.energyConsumedMah = stats.getEnergyConsumedMaMillis() / ((double) DateUtils.HOUR_IN_MILLIS); m.numPacketsTx = stats.getNumPacketsTx(); m.cellularKernelActiveTimeMs = stats.getKernelActiveTimeMs(); if (stats.getTimeInRxSignalStrengthLevelMs() != null && stats.getTimeInRxSignalStrengthLevelMs().length > 0) { m.timeInVeryPoorRxSignalLevelMs = stats.getTimeInRxSignalStrengthLevelMs()[0]; m.cellularKernelActiveTimeMs = stats.getKernelActiveTimeMillis(); if (stats.getTimeInRxSignalStrengthLevelMicros() != null && stats.getTimeInRxSignalStrengthLevelMicros().length > 0) { m.timeInVeryPoorRxSignalLevelMs = stats.getTimeInRxSignalStrengthLevelMicros()[0]; } m.sleepTimeMs = stats.getSleepTimeMs(); m.idleTimeMs = stats.getIdleTimeMs(); m.rxTimeMs = stats.getRxTimeMs(); long[] t = stats.getTxTimeMs(); m.sleepTimeMs = stats.getSleepTimeMillis(); m.idleTimeMs = stats.getIdleTimeMillis(); m.rxTimeMs = stats.getRxTimeMillis(); long[] t = stats.getTxTimeMillis(); m.txTimeMs = new long[t.length]; System.arraycopy(t, 0, m.txTimeMs, 0, t.length); m.numBytesTx = stats.getNumBytesTx(); m.numPacketsRx = stats.getNumPacketsRx(); m.numBytesRx = stats.getNumBytesRx(); long[] tr = stats.getTimeInRatMs(); long[] tr = stats.getTimeInRatMicros(); m.timeInRatMs = new long[tr.length]; System.arraycopy(tr, 0, m.timeInRatMs, 0, tr.length); long[] trx = stats.getTimeInRxSignalStrengthLevelMs(); long[] trx = stats.getTimeInRxSignalStrengthLevelMicros(); m.timeInRxSignalStrengthLevelMs = new long[trx.length]; System.arraycopy(trx, 0, m.timeInRxSignalStrengthLevelMs, 0, trx.length); m.monitoredRailEnergyConsumedMah = stats.getMonitoredRailChargeConsumedMaMs() m.monitoredRailEnergyConsumedMah = stats.getMonitoredRailChargeConsumedMaMillis() / ((double) DateUtils.HOUR_IN_MILLIS); } return m; } /** * Get cellular stats from batterystats * Get cellular stats from BatteryStatsManager * @return CellularBatteryStats */ private CellularBatteryStats getStats() { try { return mBatteryStats.getCellularBatteryStats(); } catch (RemoteException e) { } if (mBatteryStatsManager == null) { return null; } return mBatteryStatsManager.getCellularBatteryStats(); } }
src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java +22 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,9 @@ import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYP import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYPE_UNSTRUCTURED; import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_UNKNOWN; import android.content.Context; import android.net.NetworkCapabilities; import android.os.BatteryStatsManager; import android.os.Build; import android.os.SystemClock; import android.os.SystemProperties; Loading Loading @@ -229,6 +231,8 @@ public class TelephonyMetrics { /** Indicating if some of the telephony events are dropped in this log */ private boolean mTelephonyEventsDropped = false; private Context mContext; public TelephonyMetrics() { mStartSystemTimeMs = System.currentTimeMillis(); mStartElapsedTimeMs = SystemClock.elapsedRealtime(); Loading @@ -247,6 +251,16 @@ public class TelephonyMetrics { return sInstance; } /** * Set the context for telephony metrics. * * @param context Context * @hide */ public void setContext(Context context) { mContext = context; } /** * Dump the state of various objects, add calls to other objects as desired. * Loading Loading @@ -563,7 +577,11 @@ public class TelephonyMetrics { pw.decreaseIndent(); pw.println("Modem power stats:"); pw.increaseIndent(); ModemPowerStats s = new ModemPowerMetrics().buildProto(); BatteryStatsManager batteryStatsManager = mContext == null ? null : (BatteryStatsManager) mContext.getSystemService(Context.BATTERY_STATS_SERVICE); ModemPowerStats s = new ModemPowerMetrics(batteryStatsManager).buildProto(); pw.println("Power log duration (battery time) (ms): " + s.loggingDurationMs); pw.println("Energy consumed by modem (mAh): " + s.energyConsumedMah); pw.println("Number of packets sent (tx): " + s.numPacketsTx); Loading Loading @@ -722,7 +740,9 @@ public class TelephonyMetrics { } // Build modem power metrics log.modemPowerStats = new ModemPowerMetrics().buildProto(); BatteryStatsManager batteryStatsManager = mContext == null ? null : (BatteryStatsManager) mContext.getSystemService(Context.BATTERY_STATS_SERVICE); log.modemPowerStats = new ModemPowerMetrics(batteryStatsManager).buildProto(); // Log the hardware revision log.hardwareRevision = SystemProperties.get("ro.boot.revision", ""); Loading
tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +5 −1 Original line number Diff line number Diff line Loading @@ -55,13 +55,13 @@ import android.net.ConnectivityManager; import android.net.Uri; import android.net.wifi.WifiManager; import android.os.BatteryManager; import android.os.BatteryStatsManager; import android.os.Bundle; import android.os.Handler; import android.os.IInterface; import android.os.PersistableBundle; import android.os.UserHandle; import android.os.UserManager; import android.telephony.TelephonyRegistryManager; import android.preference.PreferenceManager; import android.provider.Settings; import android.provider.Telephony.ServiceStateTable; Loading @@ -69,6 +69,7 @@ import android.telecom.TelecomManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.TelephonyRegistryManager; import android.telephony.euicc.EuiccManager; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; Loading Loading @@ -250,6 +251,8 @@ public class ContextFixture implements TestFixture<Context> { return mDownloadManager; case Context.TELEPHONY_REGISTRY_SERVICE: return mTelephonyRegistryManager; case Context.BATTERY_STATS_SERVICE: return mBatteryStatsManager; case Context.DISPLAY_SERVICE: case Context.POWER_SERVICE: // PowerManager and DisplayManager are final classes so cannot be mocked, Loading Loading @@ -574,6 +577,7 @@ public class ContextFixture implements TestFixture<Context> { private final PackageInfo mPackageInfo = mock(PackageInfo.class); private final TelephonyRegistryManager mTelephonyRegistryManager = mock(TelephonyRegistryManager.class); private final BatteryStatsManager mBatteryStatsManager = mock(BatteryStatsManager.class); private final ContentProvider mContentProvider = spy(new FakeContentProvider()); Loading
tests/telephonytests/src/com/android/internal/telephony/metrics/TelephonyMetricsTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ public class TelephonyMetricsTest extends TelephonyTest { public void setUp() throws Exception { super.setUp(getClass().getSimpleName()); mMetrics = new TelephonyMetrics(); mMetrics.setContext(mContext); mUusInfo = new UUSInfo(1, 2, new byte[]{1, 2}); doReturn("123").when(mImsCallSession).getCallId(); mImsReasonInfo = new ImsReasonInfo(); Loading