Loading services/core/java/com/android/server/stats/pull/AggregatedMobileDataStatsPuller.java +44 −44 Original line number Diff line number Diff line Loading @@ -142,11 +142,8 @@ class AggregatedMobileDataStatsPuller { private final RateLimiter mRateLimiter; AggregatedMobileDataStatsPuller(@NonNull NetworkStatsManager networkStatsManager) { if (DEBUG) { if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-AggregatedMobileDataStatsPullerInit"); } if (DEBUG && Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-Init"); } mRateLimiter = new RateLimiter(/* window= */ Duration.ofSeconds(1)); Loading @@ -173,10 +170,16 @@ class AggregatedMobileDataStatsPuller { public void noteUidProcessState(int uid, int state, long unusedElapsedRealtime, long unusedUptime) { if (mRateLimiter.tryAcquire()) { mMobileDataStatsHandler.post( () -> { noteUidProcessStateImpl(uid, state); }); } else { synchronized (mLock) { mUidPreviousState.put(uid, state); } } } public int pullDataBytesTransfer(List<StatsEvent> data) { Loading Loading @@ -209,7 +212,6 @@ class AggregatedMobileDataStatsPuller { } private void noteUidProcessStateImpl(int uid, int state) { if (mRateLimiter.tryAcquire()) { // 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 Loading @@ -223,16 +225,15 @@ class AggregatedMobileDataStatsPuller { } else { Slog.w(TAG, "noteUidProcessStateLocked() can not get mNetworkStatsManager"); } } synchronized (mLock) { mUidPreviousState.put(uid, state); } } private void updateNetworkStats(NetworkStatsManager networkStatsManager) { if (DEBUG) { if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { if (DEBUG && Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-updateNetworkStats"); } } final NetworkStats latestStats = networkStatsManager.getMobileUidStats(); if (isEmpty(latestStats)) { Loading @@ -256,11 +257,12 @@ class AggregatedMobileDataStatsPuller { } private void updateNetworkStatsDelta(NetworkStats delta) { if (DEBUG && Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-updateNetworkStatsDelta"); } synchronized (mLock) { for (NetworkStats.Entry entry : delta) { if (entry.getRxPackets() == 0 && entry.getTxPackets() == 0) { continue; } if (entry.getRxPackets() != 0 || entry.getTxPackets() != 0) { MobileDataStats stats = getUidStatsForPreviousStateLocked(entry.getUid()); if (stats != null) { stats.addTxBytes(entry.getTxBytes()); Loading @@ -271,6 +273,10 @@ class AggregatedMobileDataStatsPuller { } } } if (DEBUG) { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } } @GuardedBy("mLock") private int pullDataBytesTransferLocked(List<StatsEvent> pulledData) { Loading Loading @@ -298,18 +304,12 @@ class AggregatedMobileDataStatsPuller { } private static boolean isEmpty(NetworkStats stats) { long totalRxPackets = 0; long totalTxPackets = 0; for (NetworkStats.Entry entry : stats) { if (entry.getRxPackets() == 0 && entry.getTxPackets() == 0) { continue; } totalRxPackets += entry.getRxPackets(); totalTxPackets += entry.getTxPackets(); if (entry.getRxPackets() != 0 || entry.getTxPackets() != 0) { // at least one non empty entry located break; return false; } } final long totalPackets = totalRxPackets + totalTxPackets; return totalPackets == 0; return true; } } Loading
services/core/java/com/android/server/stats/pull/AggregatedMobileDataStatsPuller.java +44 −44 Original line number Diff line number Diff line Loading @@ -142,11 +142,8 @@ class AggregatedMobileDataStatsPuller { private final RateLimiter mRateLimiter; AggregatedMobileDataStatsPuller(@NonNull NetworkStatsManager networkStatsManager) { if (DEBUG) { if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-AggregatedMobileDataStatsPullerInit"); } if (DEBUG && Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-Init"); } mRateLimiter = new RateLimiter(/* window= */ Duration.ofSeconds(1)); Loading @@ -173,10 +170,16 @@ class AggregatedMobileDataStatsPuller { public void noteUidProcessState(int uid, int state, long unusedElapsedRealtime, long unusedUptime) { if (mRateLimiter.tryAcquire()) { mMobileDataStatsHandler.post( () -> { noteUidProcessStateImpl(uid, state); }); } else { synchronized (mLock) { mUidPreviousState.put(uid, state); } } } public int pullDataBytesTransfer(List<StatsEvent> data) { Loading Loading @@ -209,7 +212,6 @@ class AggregatedMobileDataStatsPuller { } private void noteUidProcessStateImpl(int uid, int state) { if (mRateLimiter.tryAcquire()) { // 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 Loading @@ -223,16 +225,15 @@ class AggregatedMobileDataStatsPuller { } else { Slog.w(TAG, "noteUidProcessStateLocked() can not get mNetworkStatsManager"); } } synchronized (mLock) { mUidPreviousState.put(uid, state); } } private void updateNetworkStats(NetworkStatsManager networkStatsManager) { if (DEBUG) { if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { if (DEBUG && Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-updateNetworkStats"); } } final NetworkStats latestStats = networkStatsManager.getMobileUidStats(); if (isEmpty(latestStats)) { Loading @@ -256,11 +257,12 @@ class AggregatedMobileDataStatsPuller { } private void updateNetworkStatsDelta(NetworkStats delta) { if (DEBUG && Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, TAG + "-updateNetworkStatsDelta"); } synchronized (mLock) { for (NetworkStats.Entry entry : delta) { if (entry.getRxPackets() == 0 && entry.getTxPackets() == 0) { continue; } if (entry.getRxPackets() != 0 || entry.getTxPackets() != 0) { MobileDataStats stats = getUidStatsForPreviousStateLocked(entry.getUid()); if (stats != null) { stats.addTxBytes(entry.getTxBytes()); Loading @@ -271,6 +273,10 @@ class AggregatedMobileDataStatsPuller { } } } if (DEBUG) { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } } @GuardedBy("mLock") private int pullDataBytesTransferLocked(List<StatsEvent> pulledData) { Loading Loading @@ -298,18 +304,12 @@ class AggregatedMobileDataStatsPuller { } private static boolean isEmpty(NetworkStats stats) { long totalRxPackets = 0; long totalTxPackets = 0; for (NetworkStats.Entry entry : stats) { if (entry.getRxPackets() == 0 && entry.getTxPackets() == 0) { continue; } totalRxPackets += entry.getRxPackets(); totalTxPackets += entry.getTxPackets(); if (entry.getRxPackets() != 0 || entry.getTxPackets() != 0) { // at least one non empty entry located break; return false; } } final long totalPackets = totalRxPackets + totalTxPackets; return totalPackets == 0; return true; } }