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

Commit adb3c332 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Automerger Merge Worker
Browse files

Merge "NPMS lock improvement." am: 05389356 am: cada1764 am: 388fe5f6

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1480258

Change-Id: Ia0a79dc25e9bc08e572fa5a37fb5f821bd7bbfcf
parents dbbcb14f 388fe5f6
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -526,8 +526,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
    private final SparseBooleanArray mRestrictBackgroundAllowlistRevokedUids =
            new SparseBooleanArray();

    final Object mMeteredIfacesLock = new Object();
    /** Set of ifaces that are metered. */
    @GuardedBy("mNetworkPoliciesSecondLock")
    @GuardedBy("mMeteredIfacesLock")
    private ArraySet<String> mMeteredIfaces = new ArraySet<>();
    /** Set of over-limit templates that have been notified. */
    @GuardedBy("mNetworkPoliciesSecondLock")
@@ -1980,6 +1981,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        }

        // Remove quota from any interfaces that are no longer metered.
        synchronized (mMeteredIfacesLock) {
            for (int i = mMeteredIfaces.size() - 1; i >= 0; i--) {
                final String iface = mMeteredIfaces.valueAt(i);
                if (!newMeteredIfaces.contains(iface)) {
@@ -1987,6 +1989,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                }
            }
            mMeteredIfaces = newMeteredIfaces;
        }

        final ContentResolver cr = mContext.getContentResolver();
        final boolean quotaEnabled = Settings.Global.getInt(cr,
@@ -2038,7 +2041,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            mSubscriptionOpportunisticQuota.put(subId, quotaBytes);
        }

        final String[] meteredIfaces = mMeteredIfaces.toArray(new String[mMeteredIfaces.size()]);
        final String[] meteredIfaces;
        synchronized (mMeteredIfacesLock) {
            meteredIfaces = mMeteredIfaces.toArray(new String[mMeteredIfaces.size()]);
        }
        mHandler.obtainMessage(MSG_METERED_IFACES_CHANGED, meteredIfaces).sendToTarget();

        mHandler.obtainMessage(MSG_ADVISE_PERSIST_THRESHOLD, lowestRule).sendToTarget();
@@ -3460,7 +3466,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                fout.print("Restrict background: "); fout.println(mRestrictBackground);
                fout.print("Restrict power: "); fout.println(mRestrictPower);
                fout.print("Device idle: "); fout.println(mDeviceIdleMode);
                fout.print("Metered ifaces: "); fout.println(mMeteredIfaces);
                synchronized (mMeteredIfacesLock) {
                    fout.print("Metered ifaces: ");
                    fout.println(mMeteredIfaces);
                }

                fout.println();
                fout.print("mRestrictBackgroundLowPowerMode: " + mRestrictBackgroundLowPowerMode);
@@ -4654,7 +4663,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                }
                case MSG_LIMIT_REACHED: {
                    final String iface = (String) msg.obj;
                    synchronized (mNetworkPoliciesSecondLock) {
                    synchronized (mMeteredIfacesLock) {
                        // fast return if not needed.
                        if (!mMeteredIfaces.contains(iface)) {
                            return true;
@@ -5296,7 +5305,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                isBackgroundRestricted = mRestrictBackground;
            }
            final boolean isNetworkMetered;
            synchronized (mNetworkPoliciesSecondLock) {
            synchronized (mMeteredIfacesLock) {
                isNetworkMetered = mMeteredIfaces.contains(ifname);
            }
            final boolean ret = isUidNetworkingBlockedInternal(uid, uidRules, isNetworkMetered,