Loading core/java/com/android/internal/protolog/ProtoLogDataSource.java +55 −62 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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, Loading Loading @@ -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: Loading @@ -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; Loading @@ -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); Loading @@ -257,6 +237,7 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, groupConfigs.put(tag, new GroupConfig(logFromLevel, collectStackTrace)); configStream.end(group_overrides_token); break; } } Loading @@ -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 { Loading tests/Internal/src/com/android/internal/protolog/PerfettoProtoLogImplTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -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"); Loading Loading
core/java/com/android/internal/protolog/ProtoLogDataSource.java +55 −62 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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, Loading Loading @@ -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: Loading @@ -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; Loading @@ -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); Loading @@ -257,6 +237,7 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, groupConfigs.put(tag, new GroupConfig(logFromLevel, collectStackTrace)); configStream.end(group_overrides_token); break; } } Loading @@ -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 { Loading
tests/Internal/src/com/android/internal/protolog/PerfettoProtoLogImplTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -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"); Loading