Loading apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +92 −23 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import android.os.IStatsCompanionService; import android.os.IStatsd; import android.os.Looper; import android.os.ParcelFileDescriptor; import android.os.PowerManager; import android.os.RemoteException; import android.os.StatsFrameworkInitializer; import android.os.SystemClock; Loading Loading @@ -99,9 +100,9 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { private static IStatsd sStatsd; private static final Object sStatsdLock = new Object(); private final OnAlarmListener mAnomalyAlarmListener = new AnomalyAlarmListener(); private final OnAlarmListener mPullingAlarmListener = new PullingAlarmListener(); private final OnAlarmListener mPeriodicAlarmListener = new PeriodicAlarmListener(); private final OnAlarmListener mAnomalyAlarmListener; private final OnAlarmListener mPullingAlarmListener; private final OnAlarmListener mPeriodicAlarmListener; private StatsManagerService mStatsManagerService; Loading @@ -120,6 +121,9 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { handlerThread.start(); mHandler = new CompanionHandler(handlerThread.getLooper()); mAnomalyAlarmListener = new AnomalyAlarmListener(context); mPullingAlarmListener = new PullingAlarmListener(context); mPeriodicAlarmListener = new PeriodicAlarmListener(context); } private final static int[] toIntArray(List<Integer> list) { Loading Loading @@ -232,6 +236,31 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { }); } private static class WakelockThread extends Thread { private final PowerManager.WakeLock mWl; private final Runnable mRunnable; WakelockThread(Context context, String wakelockName, Runnable runnable) { PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWl = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, wakelockName); mRunnable = runnable; } @Override public void run() { try { mRunnable.run(); } finally { mWl.release(); } } @Override public void start() { mWl.acquire(); super.start(); } } private final static class AppUpdateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Loading Loading @@ -307,6 +336,12 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } public static final class AnomalyAlarmListener implements OnAlarmListener { private final Context mContext; AnomalyAlarmListener(Context context) { mContext = context; } @Override public void onAlarm() { if (DEBUG) { Loading @@ -318,17 +353,30 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Log.w(TAG, "Could not access statsd to inform it of anomaly alarm firing"); return; } // Wakelock needs to be retained while calling statsd. Thread thread = new WakelockThread(mContext, AnomalyAlarmListener.class.getCanonicalName(), new Runnable() { @Override public void run() { try { // Two-way call to statsd to retain AlarmManager wakelock statsd.informAnomalyAlarmFired(); } catch (RemoteException e) { Log.w(TAG, "Failed to inform statsd of anomaly alarm firing", e); } // AlarmManager releases its own wakelock here. } }); thread.start(); } } public final static class PullingAlarmListener implements OnAlarmListener { private final Context mContext; PullingAlarmListener(Context context) { mContext = context; } @Override public void onAlarm() { if (DEBUG) { Loading @@ -339,16 +387,30 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Log.w(TAG, "Could not access statsd to inform it of pulling alarm firing."); return; } // Wakelock needs to be retained while calling statsd. Thread thread = new WakelockThread(mContext, PullingAlarmListener.class.getCanonicalName(), new Runnable() { @Override public void run() { try { // Two-way call to statsd to retain AlarmManager wakelock statsd.informPollAlarmFired(); } catch (RemoteException e) { Log.w(TAG, "Failed to inform statsd of pulling alarm firing.", e); } } }); thread.start(); } } public final static class PeriodicAlarmListener implements OnAlarmListener { private final Context mContext; PeriodicAlarmListener(Context context) { mContext = context; } @Override public void onAlarm() { if (DEBUG) { Loading @@ -359,13 +421,20 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Log.w(TAG, "Could not access statsd to inform it of periodic alarm firing."); return; } // Wakelock needs to be retained while calling statsd. Thread thread = new WakelockThread(mContext, PeriodicAlarmListener.class.getCanonicalName(), new Runnable() { @Override public void run() { try { // Two-way call to statsd to retain AlarmManager wakelock statsd.informAlarmForSubscriberTriggeringFired(); } catch (RemoteException e) { Log.w(TAG, "Failed to inform statsd of periodic alarm firing.", e); } // AlarmManager releases its own wakelock here. } }); thread.start(); } } Loading Loading
apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +92 −23 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import android.os.IStatsCompanionService; import android.os.IStatsd; import android.os.Looper; import android.os.ParcelFileDescriptor; import android.os.PowerManager; import android.os.RemoteException; import android.os.StatsFrameworkInitializer; import android.os.SystemClock; Loading Loading @@ -99,9 +100,9 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { private static IStatsd sStatsd; private static final Object sStatsdLock = new Object(); private final OnAlarmListener mAnomalyAlarmListener = new AnomalyAlarmListener(); private final OnAlarmListener mPullingAlarmListener = new PullingAlarmListener(); private final OnAlarmListener mPeriodicAlarmListener = new PeriodicAlarmListener(); private final OnAlarmListener mAnomalyAlarmListener; private final OnAlarmListener mPullingAlarmListener; private final OnAlarmListener mPeriodicAlarmListener; private StatsManagerService mStatsManagerService; Loading @@ -120,6 +121,9 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { handlerThread.start(); mHandler = new CompanionHandler(handlerThread.getLooper()); mAnomalyAlarmListener = new AnomalyAlarmListener(context); mPullingAlarmListener = new PullingAlarmListener(context); mPeriodicAlarmListener = new PeriodicAlarmListener(context); } private final static int[] toIntArray(List<Integer> list) { Loading Loading @@ -232,6 +236,31 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { }); } private static class WakelockThread extends Thread { private final PowerManager.WakeLock mWl; private final Runnable mRunnable; WakelockThread(Context context, String wakelockName, Runnable runnable) { PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWl = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, wakelockName); mRunnable = runnable; } @Override public void run() { try { mRunnable.run(); } finally { mWl.release(); } } @Override public void start() { mWl.acquire(); super.start(); } } private final static class AppUpdateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Loading Loading @@ -307,6 +336,12 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } public static final class AnomalyAlarmListener implements OnAlarmListener { private final Context mContext; AnomalyAlarmListener(Context context) { mContext = context; } @Override public void onAlarm() { if (DEBUG) { Loading @@ -318,17 +353,30 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Log.w(TAG, "Could not access statsd to inform it of anomaly alarm firing"); return; } // Wakelock needs to be retained while calling statsd. Thread thread = new WakelockThread(mContext, AnomalyAlarmListener.class.getCanonicalName(), new Runnable() { @Override public void run() { try { // Two-way call to statsd to retain AlarmManager wakelock statsd.informAnomalyAlarmFired(); } catch (RemoteException e) { Log.w(TAG, "Failed to inform statsd of anomaly alarm firing", e); } // AlarmManager releases its own wakelock here. } }); thread.start(); } } public final static class PullingAlarmListener implements OnAlarmListener { private final Context mContext; PullingAlarmListener(Context context) { mContext = context; } @Override public void onAlarm() { if (DEBUG) { Loading @@ -339,16 +387,30 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Log.w(TAG, "Could not access statsd to inform it of pulling alarm firing."); return; } // Wakelock needs to be retained while calling statsd. Thread thread = new WakelockThread(mContext, PullingAlarmListener.class.getCanonicalName(), new Runnable() { @Override public void run() { try { // Two-way call to statsd to retain AlarmManager wakelock statsd.informPollAlarmFired(); } catch (RemoteException e) { Log.w(TAG, "Failed to inform statsd of pulling alarm firing.", e); } } }); thread.start(); } } public final static class PeriodicAlarmListener implements OnAlarmListener { private final Context mContext; PeriodicAlarmListener(Context context) { mContext = context; } @Override public void onAlarm() { if (DEBUG) { Loading @@ -359,13 +421,20 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Log.w(TAG, "Could not access statsd to inform it of periodic alarm firing."); return; } // Wakelock needs to be retained while calling statsd. Thread thread = new WakelockThread(mContext, PeriodicAlarmListener.class.getCanonicalName(), new Runnable() { @Override public void run() { try { // Two-way call to statsd to retain AlarmManager wakelock statsd.informAlarmForSubscriberTriggeringFired(); } catch (RemoteException e) { Log.w(TAG, "Failed to inform statsd of periodic alarm firing.", e); } // AlarmManager releases its own wakelock here. } }); thread.start(); } } Loading