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

Commit 390ab315 authored by Zimuzo Ezeozue's avatar Zimuzo Ezeozue Committed by Automerger Merge Worker
Browse files

Merge "Populate binder trace txn names lazily" am: f31dc9a6 am: aab9d2db

parents f0dd73ce aab9d2db
Loading
Loading
Loading
Loading
+23 −18
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Modifier;
import java.util.concurrent.atomic.AtomicReferenceArray;

/**
 * Base class for a remotable object, the core part of a lightweight
@@ -291,7 +292,7 @@ public class Binder implements IBinder {
    private IInterface mOwner;
    @Nullable
    private String mDescriptor;
    private volatile String[] mTransactionTraceNames = null;
    private volatile AtomicReferenceArray<String> mTransactionTraceNames = null;
    private volatile String mSimpleDescriptor = null;
    private static final int TRANSACTION_TRACE_NAME_ID_LIMIT = 1024;

@@ -895,28 +896,32 @@ public class Binder implements IBinder {
    @VisibleForTesting
    public final @NonNull String getTransactionTraceName(int transactionCode) {
        if (mTransactionTraceNames == null) {
            final String descriptor = getSimpleDescriptor();
            final int highestId = Math.min(getMaxTransactionId(), TRANSACTION_TRACE_NAME_ID_LIMIT);
            final String[] transactionNames = new String[highestId + 1];
            mSimpleDescriptor = getSimpleDescriptor();
            mTransactionTraceNames = new AtomicReferenceArray(highestId + 1);
        }

        final int index = transactionCode - FIRST_CALL_TRANSACTION;
        if (index < 0 || index >= mTransactionTraceNames.length()) {
            return mSimpleDescriptor + "#" + transactionCode;
        }

        String transactionTraceName = mTransactionTraceNames.getAcquire(index);
        if (transactionTraceName == null) {
            final String transactionName = getTransactionName(transactionCode);
            final StringBuffer buf = new StringBuffer();
            for (int i = 0; i <= highestId; i++) {
                String transactionName = getTransactionName(i + FIRST_CALL_TRANSACTION);

            if (transactionName != null) {
                    buf.append(descriptor).append(':').append(transactionName);
                buf.append(mSimpleDescriptor).append(":").append(transactionName);
            } else {
                    buf.append(descriptor).append('#').append(i + FIRST_CALL_TRANSACTION);
                buf.append(mSimpleDescriptor).append("#").append(transactionCode);
            }
                transactionNames[i] = buf.toString();
                buf.setLength(0);
            }
            mSimpleDescriptor = descriptor;
            mTransactionTraceNames = transactionNames;
        }
        final int index = transactionCode - FIRST_CALL_TRANSACTION;
        if (index < 0 || index >= mTransactionTraceNames.length) {
            return mSimpleDescriptor + "#" + transactionCode;

            transactionTraceName = buf.toString();
            mTransactionTraceNames.setRelease(index, transactionTraceName);
        }
        return mTransactionTraceNames[index];

        return transactionTraceName;
    }

    private @NonNull String getSimpleDescriptor() {