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

Commit e35aff17 authored by Fyodor Kupolov's avatar Fyodor Kupolov Committed by Android (Google) Code Review
Browse files

Merge "2-phase initialization of NetworkPolicyManagerService"

parents 1fd6d039 311b9fac
Loading
Loading
Loading
Loading
+29 −1
Original line number Diff line number Diff line
@@ -139,6 +139,7 @@ import android.os.Message;
import android.os.MessageQueue.IdleHandler;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.ResultReceiver;
@@ -197,6 +198,8 @@ import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

/**
 * Service that maintains low-level network policy rules, using
@@ -565,9 +568,12 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        }
    }

    public void systemReady() {
    private void initService(CountDownLatch initCompleteSignal) {
        Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "systemReady");
        final int oldPriority = Process.getThreadPriority(Process.myTid());
        try {
            // Boost thread's priority during system server init
            Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND);
            if (!isBandwidthControlEnabled()) {
                Slog.w(TAG, "bandwidth controls disabled, unable to enforce policy");
                return;
@@ -672,11 +678,33 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            mContext.registerReceiver(mWifiStateReceiver, wifiStateFilter, null, mHandler);

            mUsageStats.addAppIdleStateChangeListener(new AppIdleStateChangeListener());
            // tell systemReady() that the service has been initialized
            initCompleteSignal.countDown();
        } finally {
            // Restore the default priority after init is done
            Process.setThreadPriority(oldPriority);
            Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
        }
    }

    public CountDownLatch networkScoreAndNetworkManagementServiceReady() {
        final CountDownLatch initCompleteSignal = new CountDownLatch(1);
        mHandler.post(() -> initService(initCompleteSignal));
        return initCompleteSignal;
    }

    public void systemReady(CountDownLatch initCompleteSignal) {
        // wait for initService to complete
        try {
            if (!initCompleteSignal.await(30, TimeUnit.SECONDS)) {
                throw new IllegalStateException("Service " + TAG +" init timeout");
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            throw new IllegalStateException("Service " + TAG + " init interrupted", e);
        }
    }

    final private IUidObserver mUidObserver = new IUidObserver.Stub() {
        @Override public void onUidStateChanged(int uid, int procState) throws RemoteException {
            Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "onUidStateChanged");
+14 −6
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ import java.io.IOException;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.CountDownLatch;

import static android.view.Display.DEFAULT_DISPLAY;

@@ -1525,6 +1526,11 @@ public final class SystemServer {
                } catch (Throwable e) {
                    reportWtf("making Network Managment Service ready", e);
                }
                CountDownLatch networkPolicyInitReadySignal = null;
                if (networkPolicyF != null) {
                    networkPolicyInitReadySignal = networkPolicyF
                            .networkScoreAndNetworkManagementServiceReady();
                }
                traceEnd();
                traceBeginAndSlog("MakeNetworkStatsServiceReady");
                try {
@@ -1533,18 +1539,20 @@ public final class SystemServer {
                    reportWtf("making Network Stats Service ready", e);
                }
                traceEnd();
                traceBeginAndSlog("MakeNetworkPolicyServiceReady");
                traceBeginAndSlog("MakeConnectivityServiceReady");
                try {
                    if (networkPolicyF != null) networkPolicyF.systemReady();
                    if (connectivityF != null) connectivityF.systemReady();
                } catch (Throwable e) {
                    reportWtf("making Network Policy Service ready", e);
                    reportWtf("making Connectivity Service ready", e);
                }
                traceEnd();
                traceBeginAndSlog("MakeConnectivityServiceReady");
                traceBeginAndSlog("MakeNetworkPolicyServiceReady");
                try {
                    if (connectivityF != null) connectivityF.systemReady();
                    if (networkPolicyF != null) {
                        networkPolicyF.systemReady(networkPolicyInitReadySignal);
                    }
                } catch (Throwable e) {
                    reportWtf("making Connectivity Service ready", e);
                    reportWtf("making Network Policy Service ready", e);
                }
                traceEnd();

+1 −3
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
@@ -78,7 +77,6 @@ import android.net.INetworkPolicyListener;
import android.net.INetworkStatsService;
import android.net.LinkProperties;
import android.net.NetworkInfo;
import android.net.NetworkPolicyManager;
import android.net.NetworkInfo.DetailedState;
import android.net.NetworkPolicy;
import android.net.NetworkState;
@@ -292,7 +290,7 @@ public class NetworkPolicyManagerServiceTest {
        expectCurrentTime();

        // Prepare NPMS.
        mService.systemReady();
        mService.systemReady(mService.networkScoreAndNetworkManagementServiceReady());

        // catch INetworkManagementEventObserver during systemReady()
        final ArgumentCaptor<INetworkManagementEventObserver> networkObserver =