diff options
| -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, |