Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a760b91 authored by Olivier Gaillard's avatar Olivier Gaillard
Browse files

Move a few method calls outside the BinderCallsStats lock.

getThreadTimeMicro can take a few microseconds.

Change-Id: I3dc451ded2bde147c1b9061552210d499ec7d0e3
Test: unit tests
parent 22f30447
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -117,8 +117,20 @@ public class BinderCallsStats implements BinderInternal.Observer {
    }

    private void processCallEnded(CallSession s, int parcelRequestSize, int parcelReplySize) {
        synchronized (mLock) {
        // Non-negative time signals we need to record data for this call.
        final boolean recordCall = s.cpuTimeStarted >= 0;
        final long duration;
        final long latencyDuration;
        if (recordCall) {
            duration = getThreadTimeMicro() - s.cpuTimeStarted;
            latencyDuration = getElapsedRealtimeMicro() - s.timeStarted;
        } else {
            duration = 0;
            latencyDuration = 0;
        }
        final int callingUid = getCallingUid();

        synchronized (mLock) {
            UidEntry uidEntry = mUidEntries.get(callingUid);
            if (uidEntry == null) {
                uidEntry = new UidEntry(callingUid);
@@ -128,11 +140,7 @@ public class BinderCallsStats implements BinderInternal.Observer {
            CallStat callStat = uidEntry.getOrCreate(s.className, s.transactionCode);
            callStat.callCount++;

            // Non-negative time signals we need to record data for this call.
            final boolean recordCall = s.cpuTimeStarted >= 0;
            if (recordCall) {
                final long duration = getThreadTimeMicro() - s.cpuTimeStarted;
                final long latencyDuration = getElapsedRealtimeMicro() - s.timeStarted;
                uidEntry.cpuTimeMicros += duration;
                uidEntry.recordedCallCount++;