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

Commit 170c2310 authored by Charles Yo's avatar Charles Yo
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

Change-Id: Ib6a32125ebb478bd45a40c8060fc09c5b62b02e3
parent e2d4e3df
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();