Loading core/java/com/android/internal/protolog/LegacyProtoLogImpl.java +7 −6 Original line number Diff line number Diff line Loading @@ -55,37 +55,38 @@ import java.util.stream.Collectors; * A service for the ProtoLog logging system. */ public class LegacyProtoLogImpl implements IProtoLog { private final TreeMap<String, IProtoLogGroup> mLogGroups = new TreeMap<>(); private static final int BUFFER_CAPACITY = 1024 * 1024; private static final int PER_CHUNK_SIZE = 1024; private static final String TAG = "ProtoLog"; private static final long MAGIC_NUMBER_VALUE = ((long) MAGIC_NUMBER_H << 32) | MAGIC_NUMBER_L; static final String PROTOLOG_VERSION = "2.0.0"; private static final int DEFAULT_PER_CHUNK_SIZE = 0; private final File mLogFile; private final String mLegacyViewerConfigFilename; private final TraceBuffer mBuffer; private final LegacyProtoLogViewerConfigReader mViewerConfig; private final TreeMap<String, IProtoLogGroup> mLogGroups; private final int mPerChunkSize; private boolean mProtoLogEnabled; private boolean mProtoLogEnabledLockFree; private final Object mProtoLogEnabledLock = new Object(); public LegacyProtoLogImpl(String outputFile, String viewerConfigFilename) { public LegacyProtoLogImpl(String outputFile, String viewerConfigFilename, TreeMap<String, IProtoLogGroup> logGroups) { this(new File(outputFile), viewerConfigFilename, BUFFER_CAPACITY, new LegacyProtoLogViewerConfigReader(), PER_CHUNK_SIZE); new LegacyProtoLogViewerConfigReader(), PER_CHUNK_SIZE, logGroups); } public LegacyProtoLogImpl(File file, String viewerConfigFilename, int bufferCapacity, LegacyProtoLogViewerConfigReader viewerConfig, int perChunkSize) { LegacyProtoLogViewerConfigReader viewerConfig, int perChunkSize, TreeMap<String, IProtoLogGroup> logGroups) { mLogFile = file; mBuffer = new TraceBuffer(bufferCapacity); mLegacyViewerConfigFilename = viewerConfigFilename; mViewerConfig = viewerConfig; mPerChunkSize = perChunkSize; this.mLogGroups = logGroups; } /** Loading core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java +13 −7 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import static perfetto.protos.PerfettoTrace.InternedString.IID; import static perfetto.protos.PerfettoTrace.InternedString.STR; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.BOOLEAN_PARAMS; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.DOUBLE_PARAMS; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.STACKTRACE_IID; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.MESSAGE_ID; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.SINT64_PARAMS; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.STACKTRACE_IID; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.STR_PARAM_IIDS; import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.GROUPS; import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.Group.ID; Loading Loading @@ -78,7 +78,6 @@ import perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData; * A service for the ProtoLog logging system. */ public class PerfettoProtoLogImpl implements IProtoLog { private final TreeMap<String, IProtoLogGroup> mLogGroups = new TreeMap<>(); private static final String LOG_TAG = "ProtoLog"; private final AtomicInteger mTracingInstances = new AtomicInteger(); Loading @@ -89,8 +88,10 @@ public class PerfettoProtoLogImpl implements IProtoLog { ); private final ProtoLogViewerConfigReader mViewerConfigReader; private final ViewerConfigInputStreamProvider mViewerConfigInputStreamProvider; private final TreeMap<String, IProtoLogGroup> mLogGroups; public PerfettoProtoLogImpl(String viewerConfigFilePath) { public PerfettoProtoLogImpl(String viewerConfigFilePath, TreeMap<String, IProtoLogGroup> logGroups) { this(() -> { try { return new ProtoInputStream(new FileInputStream(viewerConfigFilePath)); Loading @@ -98,23 +99,28 @@ public class PerfettoProtoLogImpl implements IProtoLog { Slog.w(LOG_TAG, "Failed to load viewer config file " + viewerConfigFilePath, e); return null; } }); }, logGroups); } public PerfettoProtoLogImpl(ViewerConfigInputStreamProvider viewerConfigInputStreamProvider) { public PerfettoProtoLogImpl( ViewerConfigInputStreamProvider viewerConfigInputStreamProvider, TreeMap<String, IProtoLogGroup> logGroups ) { this(viewerConfigInputStreamProvider, new ProtoLogViewerConfigReader(viewerConfigInputStreamProvider)); new ProtoLogViewerConfigReader(viewerConfigInputStreamProvider), logGroups); } @VisibleForTesting public PerfettoProtoLogImpl( ViewerConfigInputStreamProvider viewerConfigInputStreamProvider, ProtoLogViewerConfigReader viewerConfigReader ProtoLogViewerConfigReader viewerConfigReader, TreeMap<String, IProtoLogGroup> logGroups ) { Producer.init(InitArguments.DEFAULTS); mDataSource.register(DataSourceParams.DEFAULTS); this.mViewerConfigInputStreamProvider = viewerConfigInputStreamProvider; this.mViewerConfigReader = viewerConfigReader; this.mLogGroups = logGroups; } /** Loading core/java/com/android/internal/protolog/ProtoLogImpl.java +9 −4 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.protolog; import static com.android.internal.protolog.common.ProtoLogToolInjected.Value.LEGACY_OUTPUT_FILE_PATH; import static com.android.internal.protolog.common.ProtoLogToolInjected.Value.LEGACY_VIEWER_CONFIG_PATH; import static com.android.internal.protolog.common.ProtoLogToolInjected.Value.LOG_GROUPS; import static com.android.internal.protolog.common.ProtoLogToolInjected.Value.VIEWER_CONFIG_PATH; import android.annotation.Nullable; Loading @@ -28,6 +29,8 @@ import com.android.internal.protolog.common.IProtoLogGroup; import com.android.internal.protolog.common.LogLevel; import com.android.internal.protolog.common.ProtoLogToolInjected; import java.util.TreeMap; /** * A service for the ProtoLog logging system. */ Loading @@ -43,6 +46,9 @@ public class ProtoLogImpl { @ProtoLogToolInjected(LEGACY_OUTPUT_FILE_PATH) private static String sLegacyOutputFilePath; @ProtoLogToolInjected(LOG_GROUPS) private static TreeMap<String, IProtoLogGroup> sLogGroups; /** Used by the ProtoLogTool, do not call directly - use {@code ProtoLog} class instead. */ public static void d(IProtoLogGroup group, long messageHash, int paramsMask, @Nullable String messageString, Loading Loading @@ -99,11 +105,10 @@ public class ProtoLogImpl { public static synchronized IProtoLog getSingleInstance() { if (sServiceInstance == null) { if (android.tracing.Flags.perfettoProtologTracing()) { sServiceInstance = new PerfettoProtoLogImpl(sViewerConfigPath); sServiceInstance = new PerfettoProtoLogImpl(sViewerConfigPath, sLogGroups); } else { sServiceInstance = new LegacyProtoLogImpl(sLegacyOutputFilePath, sLegacyViewerConfigPath); sServiceInstance = new LegacyProtoLogImpl( sLegacyOutputFilePath, sLegacyViewerConfigPath, sLogGroups); } } return sServiceInstance; Loading core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java +2 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MESSAGES; import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE; import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE_ID; import android.util.ArrayMap; import android.util.proto.ProtoInputStream; import com.android.internal.protolog.common.ILogger; Loading Loading @@ -57,6 +58,7 @@ public class ProtoLogViewerConfigReader { } private void doLoadViewerConfig() throws IOException { mLogMessageMap = new ArrayMap<>(); final ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream(); while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) { Loading core/java/com/android/internal/protolog/common/ProtoLogToolInjected.java +3 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,9 @@ import java.lang.annotation.Target; @Target({ElementType.FIELD, ElementType.PARAMETER}) public @interface ProtoLogToolInjected { enum Value { VIEWER_CONFIG_PATH, LEGACY_OUTPUT_FILE_PATH, LEGACY_VIEWER_CONFIG_PATH } enum Value { VIEWER_CONFIG_PATH, LEGACY_OUTPUT_FILE_PATH, LEGACY_VIEWER_CONFIG_PATH, LOG_GROUPS } Value value(); } Loading
core/java/com/android/internal/protolog/LegacyProtoLogImpl.java +7 −6 Original line number Diff line number Diff line Loading @@ -55,37 +55,38 @@ import java.util.stream.Collectors; * A service for the ProtoLog logging system. */ public class LegacyProtoLogImpl implements IProtoLog { private final TreeMap<String, IProtoLogGroup> mLogGroups = new TreeMap<>(); private static final int BUFFER_CAPACITY = 1024 * 1024; private static final int PER_CHUNK_SIZE = 1024; private static final String TAG = "ProtoLog"; private static final long MAGIC_NUMBER_VALUE = ((long) MAGIC_NUMBER_H << 32) | MAGIC_NUMBER_L; static final String PROTOLOG_VERSION = "2.0.0"; private static final int DEFAULT_PER_CHUNK_SIZE = 0; private final File mLogFile; private final String mLegacyViewerConfigFilename; private final TraceBuffer mBuffer; private final LegacyProtoLogViewerConfigReader mViewerConfig; private final TreeMap<String, IProtoLogGroup> mLogGroups; private final int mPerChunkSize; private boolean mProtoLogEnabled; private boolean mProtoLogEnabledLockFree; private final Object mProtoLogEnabledLock = new Object(); public LegacyProtoLogImpl(String outputFile, String viewerConfigFilename) { public LegacyProtoLogImpl(String outputFile, String viewerConfigFilename, TreeMap<String, IProtoLogGroup> logGroups) { this(new File(outputFile), viewerConfigFilename, BUFFER_CAPACITY, new LegacyProtoLogViewerConfigReader(), PER_CHUNK_SIZE); new LegacyProtoLogViewerConfigReader(), PER_CHUNK_SIZE, logGroups); } public LegacyProtoLogImpl(File file, String viewerConfigFilename, int bufferCapacity, LegacyProtoLogViewerConfigReader viewerConfig, int perChunkSize) { LegacyProtoLogViewerConfigReader viewerConfig, int perChunkSize, TreeMap<String, IProtoLogGroup> logGroups) { mLogFile = file; mBuffer = new TraceBuffer(bufferCapacity); mLegacyViewerConfigFilename = viewerConfigFilename; mViewerConfig = viewerConfig; mPerChunkSize = perChunkSize; this.mLogGroups = logGroups; } /** Loading
core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java +13 −7 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import static perfetto.protos.PerfettoTrace.InternedString.IID; import static perfetto.protos.PerfettoTrace.InternedString.STR; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.BOOLEAN_PARAMS; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.DOUBLE_PARAMS; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.STACKTRACE_IID; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.MESSAGE_ID; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.SINT64_PARAMS; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.STACKTRACE_IID; import static perfetto.protos.PerfettoTrace.ProtoLogMessage.STR_PARAM_IIDS; import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.GROUPS; import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.Group.ID; Loading Loading @@ -78,7 +78,6 @@ import perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData; * A service for the ProtoLog logging system. */ public class PerfettoProtoLogImpl implements IProtoLog { private final TreeMap<String, IProtoLogGroup> mLogGroups = new TreeMap<>(); private static final String LOG_TAG = "ProtoLog"; private final AtomicInteger mTracingInstances = new AtomicInteger(); Loading @@ -89,8 +88,10 @@ public class PerfettoProtoLogImpl implements IProtoLog { ); private final ProtoLogViewerConfigReader mViewerConfigReader; private final ViewerConfigInputStreamProvider mViewerConfigInputStreamProvider; private final TreeMap<String, IProtoLogGroup> mLogGroups; public PerfettoProtoLogImpl(String viewerConfigFilePath) { public PerfettoProtoLogImpl(String viewerConfigFilePath, TreeMap<String, IProtoLogGroup> logGroups) { this(() -> { try { return new ProtoInputStream(new FileInputStream(viewerConfigFilePath)); Loading @@ -98,23 +99,28 @@ public class PerfettoProtoLogImpl implements IProtoLog { Slog.w(LOG_TAG, "Failed to load viewer config file " + viewerConfigFilePath, e); return null; } }); }, logGroups); } public PerfettoProtoLogImpl(ViewerConfigInputStreamProvider viewerConfigInputStreamProvider) { public PerfettoProtoLogImpl( ViewerConfigInputStreamProvider viewerConfigInputStreamProvider, TreeMap<String, IProtoLogGroup> logGroups ) { this(viewerConfigInputStreamProvider, new ProtoLogViewerConfigReader(viewerConfigInputStreamProvider)); new ProtoLogViewerConfigReader(viewerConfigInputStreamProvider), logGroups); } @VisibleForTesting public PerfettoProtoLogImpl( ViewerConfigInputStreamProvider viewerConfigInputStreamProvider, ProtoLogViewerConfigReader viewerConfigReader ProtoLogViewerConfigReader viewerConfigReader, TreeMap<String, IProtoLogGroup> logGroups ) { Producer.init(InitArguments.DEFAULTS); mDataSource.register(DataSourceParams.DEFAULTS); this.mViewerConfigInputStreamProvider = viewerConfigInputStreamProvider; this.mViewerConfigReader = viewerConfigReader; this.mLogGroups = logGroups; } /** Loading
core/java/com/android/internal/protolog/ProtoLogImpl.java +9 −4 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.protolog; import static com.android.internal.protolog.common.ProtoLogToolInjected.Value.LEGACY_OUTPUT_FILE_PATH; import static com.android.internal.protolog.common.ProtoLogToolInjected.Value.LEGACY_VIEWER_CONFIG_PATH; import static com.android.internal.protolog.common.ProtoLogToolInjected.Value.LOG_GROUPS; import static com.android.internal.protolog.common.ProtoLogToolInjected.Value.VIEWER_CONFIG_PATH; import android.annotation.Nullable; Loading @@ -28,6 +29,8 @@ import com.android.internal.protolog.common.IProtoLogGroup; import com.android.internal.protolog.common.LogLevel; import com.android.internal.protolog.common.ProtoLogToolInjected; import java.util.TreeMap; /** * A service for the ProtoLog logging system. */ Loading @@ -43,6 +46,9 @@ public class ProtoLogImpl { @ProtoLogToolInjected(LEGACY_OUTPUT_FILE_PATH) private static String sLegacyOutputFilePath; @ProtoLogToolInjected(LOG_GROUPS) private static TreeMap<String, IProtoLogGroup> sLogGroups; /** Used by the ProtoLogTool, do not call directly - use {@code ProtoLog} class instead. */ public static void d(IProtoLogGroup group, long messageHash, int paramsMask, @Nullable String messageString, Loading Loading @@ -99,11 +105,10 @@ public class ProtoLogImpl { public static synchronized IProtoLog getSingleInstance() { if (sServiceInstance == null) { if (android.tracing.Flags.perfettoProtologTracing()) { sServiceInstance = new PerfettoProtoLogImpl(sViewerConfigPath); sServiceInstance = new PerfettoProtoLogImpl(sViewerConfigPath, sLogGroups); } else { sServiceInstance = new LegacyProtoLogImpl(sLegacyOutputFilePath, sLegacyViewerConfigPath); sServiceInstance = new LegacyProtoLogImpl( sLegacyOutputFilePath, sLegacyViewerConfigPath, sLogGroups); } } return sServiceInstance; Loading
core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java +2 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MESSAGES; import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE; import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE_ID; import android.util.ArrayMap; import android.util.proto.ProtoInputStream; import com.android.internal.protolog.common.ILogger; Loading Loading @@ -57,6 +58,7 @@ public class ProtoLogViewerConfigReader { } private void doLoadViewerConfig() throws IOException { mLogMessageMap = new ArrayMap<>(); final ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream(); while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) { Loading
core/java/com/android/internal/protolog/common/ProtoLogToolInjected.java +3 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,9 @@ import java.lang.annotation.Target; @Target({ElementType.FIELD, ElementType.PARAMETER}) public @interface ProtoLogToolInjected { enum Value { VIEWER_CONFIG_PATH, LEGACY_OUTPUT_FILE_PATH, LEGACY_VIEWER_CONFIG_PATH } enum Value { VIEWER_CONFIG_PATH, LEGACY_OUTPUT_FILE_PATH, LEGACY_VIEWER_CONFIG_PATH, LOG_GROUPS } Value value(); }