diff options
| -rw-r--r-- | apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java | 26 | 
1 files changed, 17 insertions, 9 deletions
| diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java index c9e1e002b7f1..b97ca20b5d16 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java @@ -167,7 +167,7 @@ public final class ConnectivityController extends RestrictingController implemen       */      private final List<UidStats> mSortedStats = new ArrayList<>(); -    private static final int MSG_REEVALUATE_JOBS = 2; +    private static final int MSG_ADJUST_CALLBACKS = 0;      private final Handler mHandler; @@ -230,7 +230,7 @@ public final class ConnectivityController extends RestrictingController implemen                  uidStats.numRunning--;              }              maybeRevokeStandbyExceptionLocked(jobStatus); -            maybeAdjustRegisteredCallbacksLocked(); +            postAdjustCallbacks();          }      } @@ -451,7 +451,7 @@ public final class ConnectivityController extends RestrictingController implemen                  mUidStats.removeAt(u);              }          } -        maybeAdjustRegisteredCallbacksLocked(); +        postAdjustCallbacks();      }      private boolean isUsable(NetworkCapabilities capabilities) { @@ -598,8 +598,7 @@ public final class ConnectivityController extends RestrictingController implemen              mSortedStats.add(uidStats);          }          if (mCurrentDefaultNetworkCallbacks.size() >= MAX_NETWORK_CALLBACKS) { -            // TODO: offload to handler -            maybeAdjustRegisteredCallbacksLocked(); +            postAdjustCallbacks();              return;          }          registerPendingUidCallbacksLocked(); @@ -632,14 +631,21 @@ public final class ConnectivityController extends RestrictingController implemen          }      } +    private void postAdjustCallbacks() { +        mHandler.obtainMessage(MSG_ADJUST_CALLBACKS).sendToTarget(); +    } +      @GuardedBy("mLock")      private void maybeAdjustRegisteredCallbacksLocked() { +        mHandler.removeMessages(MSG_ADJUST_CALLBACKS); +          final int count = mUidStats.size();          if (count == mCurrentDefaultNetworkCallbacks.size()) {              // All of them are registered and there are no blocked UIDs.              // No point evaluating all UIDs.              return;          } +          final long nowElapsed = sElapsedRealtimeClock.millis();          mSortedStats.clear(); @@ -898,7 +904,7 @@ public final class ConnectivityController extends RestrictingController implemen              synchronized (mLock) {                  mAvailableNetworks.put(network, capabilities);                  updateTrackedJobsLocked(-1, network); -                maybeAdjustRegisteredCallbacksLocked(); +                postAdjustCallbacks();              }          } @@ -916,7 +922,7 @@ public final class ConnectivityController extends RestrictingController implemen                      }                  }                  updateTrackedJobsLocked(-1, network); -                maybeAdjustRegisteredCallbacksLocked(); +                postAdjustCallbacks();              }          }      }; @@ -930,8 +936,10 @@ public final class ConnectivityController extends RestrictingController implemen          public void handleMessage(Message msg) {              synchronized (mLock) {                  switch (msg.what) { -                    case MSG_REEVALUATE_JOBS: -                        updateTrackedJobsLocked(-1, null); +                    case MSG_ADJUST_CALLBACKS: +                        synchronized (mLock) { +                            maybeAdjustRegisteredCallbacksLocked(); +                        }                          break;                  }              } |