Loading services/core/java/com/android/server/stats/pull/AggregatedMobileDataStatsPuller.java +37 −16 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,9 @@ import android.util.StatsEvent; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.FrameworkStatsLog; import com.android.server.selinux.RateLimiter; import java.time.Duration; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; Loading Loading @@ -131,19 +133,36 @@ class AggregatedMobileDataStatsPuller { private final Handler mMobileDataStatsHandler; private final Handler mMobileDataStatsHandler; private final RateLimiter mRateLimiter; AggregatedMobileDataStatsPuller(NetworkStatsManager networkStatsManager) { AggregatedMobileDataStatsPuller(NetworkStatsManager networkStatsManager) { if (DEBUG) { if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-AggregatedMobileDataStatsPullerInit"); } } mRateLimiter = new RateLimiter(/* window= */ Duration.ofSeconds(1)); mUidStats = new ArrayMap<>(); mUidStats = new ArrayMap<>(); mUidPreviousState = new SparseIntArray(); mUidPreviousState = new SparseIntArray(); mNetworkStatsManager = networkStatsManager; mNetworkStatsManager = networkStatsManager; if (mNetworkStatsManager != null) { updateNetworkStats(mNetworkStatsManager); } HandlerThread mMobileDataStatsHandlerThread = new HandlerThread("MobileDataStatsHandler"); HandlerThread mMobileDataStatsHandlerThread = new HandlerThread("MobileDataStatsHandler"); mMobileDataStatsHandlerThread.start(); mMobileDataStatsHandlerThread.start(); mMobileDataStatsHandler = new Handler(mMobileDataStatsHandlerThread.getLooper()); mMobileDataStatsHandler = new Handler(mMobileDataStatsHandlerThread.getLooper()); if (mNetworkStatsManager != null) { mMobileDataStatsHandler.post( () -> { updateNetworkStats(mNetworkStatsManager); }); } if (DEBUG) { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } } } public void noteUidProcessState(int uid, int state, long unusedElapsedRealtime, public void noteUidProcessState(int uid, int state, long unusedElapsedRealtime, Loading Loading @@ -180,8 +199,9 @@ class AggregatedMobileDataStatsPuller { } } private void noteUidProcessStateImpl(int uid, int state) { private void noteUidProcessStateImpl(int uid, int state) { // noteUidProcessStateLocked can be called back to back several times while if (mRateLimiter.tryAcquire()) { // the updateNetworkStatsLocked loops over several stats for multiple uids // noteUidProcessStateImpl can be called back to back several times while // the updateNetworkStats loops over several stats for multiple uids // and during the first call in a batch of proc state change event it can // and during the first call in a batch of proc state change event it can // contain info for uid with unknown previous state yet which can happen due to a few // contain info for uid with unknown previous state yet which can happen due to a few // reasons: // reasons: Loading @@ -193,6 +213,7 @@ class AggregatedMobileDataStatsPuller { } else { } else { Slog.w(TAG, "noteUidProcessStateLocked() can not get mNetworkStatsManager"); Slog.w(TAG, "noteUidProcessStateLocked() can not get mNetworkStatsManager"); } } } mUidPreviousState.put(uid, state); mUidPreviousState.put(uid, state); } } Loading Loading
services/core/java/com/android/server/stats/pull/AggregatedMobileDataStatsPuller.java +37 −16 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,9 @@ import android.util.StatsEvent; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.FrameworkStatsLog; import com.android.server.selinux.RateLimiter; import java.time.Duration; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; Loading Loading @@ -131,19 +133,36 @@ class AggregatedMobileDataStatsPuller { private final Handler mMobileDataStatsHandler; private final Handler mMobileDataStatsHandler; private final RateLimiter mRateLimiter; AggregatedMobileDataStatsPuller(NetworkStatsManager networkStatsManager) { AggregatedMobileDataStatsPuller(NetworkStatsManager networkStatsManager) { if (DEBUG) { if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-AggregatedMobileDataStatsPullerInit"); } } mRateLimiter = new RateLimiter(/* window= */ Duration.ofSeconds(1)); mUidStats = new ArrayMap<>(); mUidStats = new ArrayMap<>(); mUidPreviousState = new SparseIntArray(); mUidPreviousState = new SparseIntArray(); mNetworkStatsManager = networkStatsManager; mNetworkStatsManager = networkStatsManager; if (mNetworkStatsManager != null) { updateNetworkStats(mNetworkStatsManager); } HandlerThread mMobileDataStatsHandlerThread = new HandlerThread("MobileDataStatsHandler"); HandlerThread mMobileDataStatsHandlerThread = new HandlerThread("MobileDataStatsHandler"); mMobileDataStatsHandlerThread.start(); mMobileDataStatsHandlerThread.start(); mMobileDataStatsHandler = new Handler(mMobileDataStatsHandlerThread.getLooper()); mMobileDataStatsHandler = new Handler(mMobileDataStatsHandlerThread.getLooper()); if (mNetworkStatsManager != null) { mMobileDataStatsHandler.post( () -> { updateNetworkStats(mNetworkStatsManager); }); } if (DEBUG) { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } } } public void noteUidProcessState(int uid, int state, long unusedElapsedRealtime, public void noteUidProcessState(int uid, int state, long unusedElapsedRealtime, Loading Loading @@ -180,8 +199,9 @@ class AggregatedMobileDataStatsPuller { } } private void noteUidProcessStateImpl(int uid, int state) { private void noteUidProcessStateImpl(int uid, int state) { // noteUidProcessStateLocked can be called back to back several times while if (mRateLimiter.tryAcquire()) { // the updateNetworkStatsLocked loops over several stats for multiple uids // noteUidProcessStateImpl can be called back to back several times while // the updateNetworkStats loops over several stats for multiple uids // and during the first call in a batch of proc state change event it can // and during the first call in a batch of proc state change event it can // contain info for uid with unknown previous state yet which can happen due to a few // contain info for uid with unknown previous state yet which can happen due to a few // reasons: // reasons: Loading @@ -193,6 +213,7 @@ class AggregatedMobileDataStatsPuller { } else { } else { Slog.w(TAG, "noteUidProcessStateLocked() can not get mNetworkStatsManager"); Slog.w(TAG, "noteUidProcessStateLocked() can not get mNetworkStatsManager"); } } } mUidPreviousState.put(uid, state); mUidPreviousState.put(uid, state); } } Loading