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

Commit abea3af3 authored by Charles Yo's avatar Charles Yo Committed by Android Build Coastguard Worker
Browse files

Revert "Collect the stacktrace before entering the background thread"

Revert submission 28147757-no-processing-protolog

Reason for revert: b/351458758

Reverted changes: /q/submissionid:28147757-no-processing-protolog
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:170c231081d198efd6a1dc4c77d481de99baee83)
Merged-In: Ib6a32125ebb478bd45a40c8060fc09c5b62b02e3
Change-Id: Ib6a32125ebb478bd45a40c8060fc09c5b62b02e3
parent 7ded8508
Loading
Loading
Loading
Loading
+10 −39
Original line number Diff line number Diff line
@@ -106,7 +106,6 @@ public class PerfettoProtoLogImpl implements IProtoLog {

    private final int[] mDefaultLogLevelCounts = new int[LogLevel.values().length];
    private final Map<IProtoLogGroup, int[]> mLogLevelCounts = new ArrayMap<>();
    private final Map<IProtoLogGroup, Integer> mCollectStackTraceGroupCounts = new ArrayMap<>();

    private final Lock mBackgroundServiceLock = new ReentrantLock();
    private ExecutorService mBackgroundLoggingService = Executors.newSingleThreadExecutor();
@@ -163,15 +162,8 @@ public class PerfettoProtoLogImpl implements IProtoLog {
            @Nullable Object[] args) {
        if (isProtoEnabled()) {
            long tsNanos = SystemClock.elapsedRealtimeNanos();
            final String stacktrace;
            if (mCollectStackTraceGroupCounts.getOrDefault(group, 0) > 0) {
                stacktrace = collectStackTrace();
            } else {
                stacktrace = null;
            }
            mBackgroundLoggingService.execute(() ->
                        logToProto(level, group, messageHash, paramsMask, args, tsNanos,
                                stacktrace));
                    logToProto(level, group, messageHash, paramsMask, args, tsNanos));
        }
        if (group.isLogToLogcat()) {
            logToLogcat(group.getTag(), level, messageHash, args);
@@ -182,15 +174,9 @@ public class PerfettoProtoLogImpl implements IProtoLog {
    public void log(LogLevel logLevel, IProtoLogGroup group, String messageString, Object... args) {
        if (isProtoEnabled()) {
            long tsNanos = SystemClock.elapsedRealtimeNanos();
            final String stacktrace;
            if (mCollectStackTraceGroupCounts.getOrDefault(group, 0) > 0) {
                stacktrace = collectStackTrace();
            } else {
                stacktrace = null;
            }
            mBackgroundLoggingService.execute(
                    () -> logStringMessageToProto(logLevel, group, messageString, args,
                            tsNanos, stacktrace));
                            tsNanos));
        }
        if (group.isLogToLogcat()) {
            logToLogcat(group.getTag(), logLevel, messageString, args);
@@ -386,32 +372,30 @@ public class PerfettoProtoLogImpl implements IProtoLog {
    }

    private void logToProto(LogLevel level, IProtoLogGroup logGroup, long messageHash,
            int paramsMask, Object[] args, long tsNanos, @Nullable String stacktrace) {
            int paramsMask, Object[] args, long tsNanos) {
        Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "logToProto");
        try {
            doLogToProto(level, logGroup, new Message(messageHash), paramsMask, args, tsNanos,
                    stacktrace);
            doLogToProto(level, logGroup, new Message(messageHash), paramsMask, args, tsNanos);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
        }
    }

    private void logStringMessageToProto(LogLevel logLevel, IProtoLogGroup group,
            String messageString, Object[] args, long tsNanos, @Nullable String stacktrace) {
            String messageString, Object[] args, long tsNanos) {
        Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "logStringMessageToProto");
        try {
            doLogToProto(logLevel, group, messageString, args, tsNanos, stacktrace);
            doLogToProto(logLevel, group, messageString, args, tsNanos);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
        }
    }

    private void doLogToProto(LogLevel level, IProtoLogGroup logGroup, String messageString,
            Object[] args, long tsNanos, @Nullable String stacktrace) {
            Object[] args, long tsNanos) {
        final List<Integer> argTypes = LogDataType.parseFormatString(messageString);
        final int typeMask = LogDataType.logDataTypesToBitMask(argTypes);
        doLogToProto(level, logGroup, new Message(messageString), typeMask, args, tsNanos,
                stacktrace);
        doLogToProto(level, logGroup, new Message(messageString), typeMask, args, tsNanos);
    }

    private static class Message {
@@ -430,7 +414,7 @@ public class PerfettoProtoLogImpl implements IProtoLog {
    }

    private void doLogToProto(LogLevel level, IProtoLogGroup logGroup, Message message,
            int paramsMask, Object[] args, long tsNanos, @Nullable String stacktrace) {
            int paramsMask, Object[] args, long tsNanos) {
        mDataSource.trace(ctx -> {
            final ProtoLogDataSource.TlsState tlsState = ctx.getCustomTlsState();
            final LogLevel logFrom = tlsState.getLogFromLevel(logGroup.name());
@@ -458,6 +442,7 @@ public class PerfettoProtoLogImpl implements IProtoLog {
                // Intern stackstraces before creating the trace packet for the proto message so
                // that the interned stacktrace strings appear before in the trace to make the
                // trace processing easier.
                String stacktrace = collectStackTrace();
                internedStacktrace = internStacktraceString(ctx, stacktrace);
            }

@@ -793,11 +778,6 @@ public class PerfettoProtoLogImpl implements IProtoLog {
            for (int i = defaultLogFrom.ordinal(); i < LogLevel.values().length; i++) {
                logLevelsCountsForGroup[logFromLevel.ordinal()]++;
            }

            if (config.getConfigFor(overriddenGroupTag).collectStackTrace) {
                mCollectStackTraceGroupCounts.put(group,
                        mCollectStackTraceGroupCounts.getOrDefault(group, 0) + 1);
            }
        }

        mCacheUpdater.run();
@@ -825,15 +805,6 @@ public class PerfettoProtoLogImpl implements IProtoLog {
            if (Arrays.stream(logLevelsCountsForGroup).allMatch(it -> it == 0)) {
                mLogLevelCounts.remove(group);
            }

            if (config.getConfigFor(overriddenGroupTag).collectStackTrace) {
                mCollectStackTraceGroupCounts.put(group,
                        mCollectStackTraceGroupCounts.get(group) - 1);

                if (mCollectStackTraceGroupCounts.get(group) == 0) {
                    mCollectStackTraceGroupCounts.remove(group);
                }
            }
        }

        mCacheUpdater.run();