Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6248926e authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Acquire wakelock during network stats collection.

Bug: 4517275
Change-Id: I01dfe3b13d7aca84605446e9e9927d0648623552
parent 6fa7e7e9
Loading
Loading
Loading
Loading
+25 −4
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.INetworkManagementService;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
import android.provider.Settings;
@@ -112,6 +113,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
    private final TrustedTime mTime;
    private final NetworkStatsSettings mSettings;

    private final PowerManager.WakeLock mWakeLock;

    private IConnectivityManager mConnManager;

    // @VisibleForTesting
@@ -191,6 +194,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
        mTime = checkNotNull(time, "missing TrustedTime");
        mSettings = checkNotNull(settings, "missing NetworkStatsSettings");

        final PowerManager powerManager = (PowerManager) context.getSystemService(
                Context.POWER_SERVICE);
        mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);

        mHandlerThread = new HandlerThread(TAG);
        mHandlerThread.start();
        mHandler = new Handler(mHandlerThread.getLooper());
@@ -408,7 +415,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
            // on background handler thread, and verified CONNECTIVITY_INTERNAL
            // permission above.
            synchronized (mStatsLock) {
                mWakeLock.acquire();
                try {
                    updateIfacesLocked();
                } finally {
                    mWakeLock.release();
                }
            }
        }
    };
@@ -419,8 +431,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
            // on background handler thread, and verified UPDATE_DEVICE_STATS
            // permission above.
            synchronized (mStatsLock) {
                // TODO: acquire wakelock while performing poll
                mWakeLock.acquire();
                try {
                    performPollLocked(true, false);
                } finally {
                    mWakeLock.release();
                }
            }
        }
    };
@@ -433,7 +449,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
            final int uid = intent.getIntExtra(EXTRA_UID, 0);
            synchronized (mStatsLock) {
                // TODO: perform one last stats poll for UID
                mWakeLock.acquire();
                try {
                    removeUidLocked(uid);
                } finally {
                    mWakeLock.release();
                }
            }
        }
    };