Loading services/core/java/com/android/server/net/NetworkPolicyManagerService.java +29 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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"); Loading services/java/com/android/server/SystemServer.java +14 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading @@ -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(); Loading services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +1 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -292,7 +290,7 @@ public class NetworkPolicyManagerServiceTest { expectCurrentTime(); // Prepare NPMS. mService.systemReady(); mService.systemReady(mService.networkScoreAndNetworkManagementServiceReady()); // catch INetworkManagementEventObserver during systemReady() final ArgumentCaptor<INetworkManagementEventObserver> networkObserver = Loading Loading
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +29 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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"); Loading
services/java/com/android/server/SystemServer.java +14 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading @@ -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(); Loading
services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +1 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -292,7 +290,7 @@ public class NetworkPolicyManagerServiceTest { expectCurrentTime(); // Prepare NPMS. mService.systemReady(); mService.systemReady(mService.networkScoreAndNetworkManagementServiceReady()); // catch INetworkManagementEventObserver during systemReady() final ArgumentCaptor<INetworkManagementEventObserver> networkObserver = Loading