diff options
| author | 2021-03-10 02:16:46 +0000 | |
|---|---|---|
| committer | 2021-03-10 02:16:46 +0000 | |
| commit | 2b2e73d1d6d141bec576aaee4c5d022455995d2d (patch) | |
| tree | 7be83af20549503e9874f9d39e4383cf974c2fed | |
| parent | 5b7186166d41ebb1e28121f1c6e3344edd65289b (diff) | |
| parent | 9caf734d3afb7bd4872b32802177f2a30e27a5d1 (diff) | |
Merge "Clone the CallStat objects/lists before dispatching it to the listener" into sc-dev
| -rw-r--r-- | core/java/com/android/internal/os/BinderCallsStats.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/core/java/com/android/internal/os/BinderCallsStats.java b/core/java/com/android/internal/os/BinderCallsStats.java index b3e8db205220..14b870575769 100644 --- a/core/java/com/android/internal/os/BinderCallsStats.java +++ b/core/java/com/android/internal/os/BinderCallsStats.java @@ -120,8 +120,13 @@ public class BinderCallsStats implements BinderInternal.Observer { UidEntry uidEntry = mUidEntries.get(mSendUidsToObserver.valueAt(i)); if (uidEntry != null) { ArrayMap<CallStatKey, CallStat> callStats = uidEntry.mCallStats; + final int csize = callStats.size(); + final ArrayList<CallStat> tmpCallStats = new ArrayList<>(csize); + for (int j = 0; j < csize; j++) { + tmpCallStats.add(callStats.valueAt(j).clone()); + } mCallStatsObserver.noteCallStats(uidEntry.workSourceUid, - uidEntry.incrementalCallCount, callStats.values() + uidEntry.incrementalCallCount, tmpCallStats ); uidEntry.incrementalCallCount = 0; for (int j = callStats.size() - 1; j >= 0; j--) { @@ -830,6 +835,23 @@ public class BinderCallsStats implements BinderInternal.Observer { } @Override + public CallStat clone() { + CallStat clone = new CallStat(callingUid, binderClass, transactionCode, + screenInteractive); + clone.recordedCallCount = recordedCallCount; + clone.callCount = callCount; + clone.cpuTimeMicros = cpuTimeMicros; + clone.maxCpuTimeMicros = maxCpuTimeMicros; + clone.latencyMicros = latencyMicros; + clone.maxLatencyMicros = maxLatencyMicros; + clone.maxRequestSizeBytes = maxRequestSizeBytes; + clone.maxReplySizeBytes = maxReplySizeBytes; + clone.exceptionCount = exceptionCount; + clone.incrementalCallCount = incrementalCallCount; + return clone; + } + + @Override public String toString() { // This is expensive, but CallStat.toString() is only used for debugging. String methodName = new BinderTransactionNameResolver().getMethodName(binderClass, |