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

Commit f4da3fb4 authored by Pablo Gamito's avatar Pablo Gamito Committed by Android (Google) Code Review
Browse files

Merge "Use the new defaultLogFromLevel tracing config option in ProtoLogDataSource" into main

parents 6593237b b6bfcfed
Loading
Loading
Loading
Loading
+55 −62
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.internal.protolog;

import static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.DEFAULT;
import static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.DEFAULT_LOG_FROM_LEVEL;
import static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.ENABLE_ALL;
import static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.GROUP_OVERRIDES;
import static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.TRACING_MODE;
@@ -43,7 +44,6 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;

public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance,
        ProtoLogDataSource.TlsState,
@@ -190,7 +190,15 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance,
        final Map<String, GroupConfig> groupConfigs = new HashMap<>();

        while (configStream.nextField() != ProtoInputStream.NO_MORE_FIELDS) {
            if (configStream.getFieldNumber() == (int) TRACING_MODE) {
            switch (configStream.getFieldNumber()) {
                case (int) DEFAULT_LOG_FROM_LEVEL:
                    int defaultLogFromLevelInt = configStream.readInt(DEFAULT_LOG_FROM_LEVEL);
                    if (defaultLogFromLevelInt < defaultLogFromLevel.ordinal()) {
                        defaultLogFromLevel =
                                logLevelFromInt(configStream.readInt(DEFAULT_LOG_FROM_LEVEL));
                    }
                    break;
                case (int) TRACING_MODE:
                    int tracingMode = configStream.readInt(TRACING_MODE);
                    switch (tracingMode) {
                        case DEFAULT:
@@ -201,8 +209,8 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance,
                        default:
                            throw new RuntimeException("Unhandled ProtoLog tracing mode type");
                    }
            }
            if (configStream.getFieldNumber() == (int) GROUP_OVERRIDES) {
                    break;
                case (int) GROUP_OVERRIDES:
                    final long group_overrides_token  = configStream.start(GROUP_OVERRIDES);

                    String tag = null;
@@ -214,35 +222,7 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance,
                        }
                        if (configStream.getFieldNumber() == (int) LOG_FROM) {
                            final int logFromInt = configStream.readInt(LOG_FROM);
                        switch (logFromInt) {
                            case (ProtologCommon.PROTOLOG_LEVEL_DEBUG): {
                                logFromLevel = LogLevel.DEBUG;
                                break;
                            }
                            case (ProtologCommon.PROTOLOG_LEVEL_VERBOSE): {
                                logFromLevel = LogLevel.VERBOSE;
                                break;
                            }
                            case (ProtologCommon.PROTOLOG_LEVEL_INFO): {
                                logFromLevel = LogLevel.INFO;
                                break;
                            }
                            case (ProtologCommon.PROTOLOG_LEVEL_WARN): {
                                logFromLevel = LogLevel.WARN;
                                break;
                            }
                            case (ProtologCommon.PROTOLOG_LEVEL_ERROR): {
                                logFromLevel = LogLevel.ERROR;
                                break;
                            }
                            case (ProtologCommon.PROTOLOG_LEVEL_WTF): {
                                logFromLevel = LogLevel.WTF;
                                break;
                            }
                            default: {
                                throw new RuntimeException("Unhandled log level");
                            }
                        }
                            logFromLevel = logLevelFromInt(logFromInt);
                        }
                        if (configStream.getFieldNumber() == (int) COLLECT_STACKTRACE) {
                            collectStackTrace = configStream.readBoolean(COLLECT_STACKTRACE);
@@ -257,6 +237,7 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance,
                    groupConfigs.put(tag, new GroupConfig(logFromLevel, collectStackTrace));

                    configStream.end(group_overrides_token);
                    break;
            }
        }

@@ -265,6 +246,18 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance,
        return new ProtoLogConfig(defaultLogFromLevel, groupConfigs);
    }

    private LogLevel logLevelFromInt(int logFromInt) {
        return switch (logFromInt) {
            case (ProtologCommon.PROTOLOG_LEVEL_DEBUG) -> LogLevel.DEBUG;
            case (ProtologCommon.PROTOLOG_LEVEL_VERBOSE) -> LogLevel.VERBOSE;
            case (ProtologCommon.PROTOLOG_LEVEL_INFO) -> LogLevel.INFO;
            case (ProtologCommon.PROTOLOG_LEVEL_WARN) -> LogLevel.WARN;
            case (ProtologCommon.PROTOLOG_LEVEL_ERROR) -> LogLevel.ERROR;
            case (ProtologCommon.PROTOLOG_LEVEL_WTF) -> LogLevel.WTF;
            default -> throw new RuntimeException("Unhandled log level");
        };
    }

    public static class Instance extends DataSourceInstance {

        public interface TracingInstanceStartCallback {
+32 −0
Original line number Diff line number Diff line
@@ -798,6 +798,38 @@ public class PerfettoProtoLogImplTest {
                .isEqualTo("My Test Debug Log Message true");
    }

    @Test
    public void usesDefaultLogFromLevel() throws IOException {
        PerfettoTraceMonitor traceMonitor =
                PerfettoTraceMonitor.newBuilder().enableProtoLog(LogLevel.WARN).build();
        try {
            traceMonitor.start();
            mProtoLog.log(LogLevel.DEBUG, TestProtoLogGroup.TEST_GROUP,
                "This message should not be logged");
            mProtoLog.log(LogLevel.WARN, TestProtoLogGroup.TEST_GROUP,
                "This message should logged %d", 123);
            mProtoLog.log(LogLevel.ERROR, TestProtoLogGroup.TEST_GROUP,
                "This message should also be logged %d", 567);
        } finally {
            traceMonitor.stop(mWriter);
        }

        final ResultReader reader = new ResultReader(mWriter.write(), mTraceConfig);
        final ProtoLogTrace protolog = reader.readProtoLogTrace();

        Truth.assertThat(protolog.messages).hasSize(2);

        Truth.assertThat(protolog.messages.get(0).getLevel())
                .isEqualTo(LogLevel.WARN);
        Truth.assertThat(protolog.messages.get(0).getMessage())
                .isEqualTo("This message should logged 123");

        Truth.assertThat(protolog.messages.get(1).getLevel())
                .isEqualTo(LogLevel.ERROR);
        Truth.assertThat(protolog.messages.get(1).getMessage())
                .isEqualTo("This message should also be logged 567");
    }

    private enum TestProtoLogGroup implements IProtoLogGroup {
        TEST_GROUP(true, true, false, "TEST_TAG");