Loading core/java/android/tracing/perfetto/DataSource.java +7 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.tracing.perfetto; import android.annotation.Nullable; import android.annotation.NonNull; import android.util.proto.ProtoInputStream; /** Loading @@ -41,6 +43,7 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * @param configStream A ProtoInputStream to read the tracing instance's config. * @return A new data source instance setup with the provided config. */ @NonNull public abstract DataSourceInstanceType createInstance( ProtoInputStream configStream, int instanceIndex); Loading Loading @@ -102,8 +105,8 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan /** * Override this method to create a custom TlsState object for your DataSource. A new instance * will be created per trace instance per thread. * */ @Nullable public TlsStateType createTlsState(CreateTlsStateArgs<DataSourceInstanceType> args) { return null; } Loading @@ -112,6 +115,7 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * Override this method to create and use a custom IncrementalState object for your DataSource. * */ @Nullable public IncrementalStateType createIncrementalState( CreateIncrementalStateArgs<DataSourceInstanceType> args) { return null; Loading Loading @@ -141,6 +145,7 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * @return The DataSourceInstance at index instanceIndex. * Null if the datasource instance at the requested index doesn't exist. */ @Nullable public DataSourceInstanceType getDataSourceInstanceLocked(int instanceIndex) { return (DataSourceInstanceType) nativeGetPerfettoInstanceLocked(mNativeObj, instanceIndex); } Loading @@ -159,6 +164,7 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * @param rawConfig byte array of the PerfettoConfig encoded proto. * @return A new Java DataSourceInstance object. */ @NonNull private DataSourceInstanceType createInstance(byte[] rawConfig, int instanceIndex) { final ProtoInputStream inputStream = new ProtoInputStream(rawConfig); return this.createInstance(inputStream, instanceIndex); Loading core/java/com/android/internal/protolog/ProtoLogDataSource.java +33 −15 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.COLL import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.GROUP_NAME; import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.LOG_FROM; import android.annotation.NonNull; import android.internal.perfetto.protos.DataSourceConfigOuterClass.DataSourceConfig; import android.internal.perfetto.protos.ProtologCommon; import android.tracing.perfetto.CreateIncrementalStateArgs; Loading @@ -51,18 +52,26 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, ProtoLogDataSource.IncrementalState> { private static final String DATASOURCE_NAME = "android.protolog"; @NonNull private final Instance.TracingInstanceStartCallback mOnStart; @NonNull private final Runnable mOnFlush; @NonNull private final Instance.TracingInstanceStopCallback mOnStop; public ProtoLogDataSource(Instance.TracingInstanceStartCallback onStart, Runnable onFlush, Instance.TracingInstanceStopCallback onStop) { public ProtoLogDataSource( @NonNull Instance.TracingInstanceStartCallback onStart, @NonNull Runnable onFlush, @NonNull Instance.TracingInstanceStopCallback onStop) { this(onStart, onFlush, onStop, DATASOURCE_NAME); } @VisibleForTesting public ProtoLogDataSource(Instance.TracingInstanceStartCallback onStart, Runnable onFlush, Instance.TracingInstanceStopCallback onStop, String dataSourceName) { public ProtoLogDataSource( @NonNull Instance.TracingInstanceStartCallback onStart, @NonNull Runnable onFlush, @NonNull Instance.TracingInstanceStopCallback onStop, @NonNull String dataSourceName) { super(dataSourceName); this.mOnStart = onStart; this.mOnFlush = onFlush; Loading @@ -70,7 +79,8 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, } @Override public Instance createInstance(ProtoInputStream configStream, int instanceIndex) { @NonNull public Instance createInstance(@NonNull ProtoInputStream configStream, int instanceIndex) { ProtoLogConfig config = null; try { Loading Loading @@ -100,7 +110,8 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, } @Override public TlsState createTlsState(CreateTlsStateArgs<Instance> args) { @NonNull public TlsState createTlsState(@NonNull CreateTlsStateArgs<Instance> args) { try (Instance dsInstance = args.getDataSourceInstanceLocked()) { if (dsInstance == null) { // Datasource instance has been removed Loading @@ -111,14 +122,17 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, } @Override public IncrementalState createIncrementalState(CreateIncrementalStateArgs<Instance> args) { @NonNull public IncrementalState createIncrementalState( @NonNull CreateIncrementalStateArgs<Instance> args) { return new IncrementalState(); } public static class TlsState { @NonNull private final ProtoLogConfig mConfig; private TlsState(ProtoLogConfig config) { private TlsState(@NonNull ProtoLogConfig config) { this.mConfig = config; } Loading Loading @@ -269,26 +283,30 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, public static class Instance extends DataSourceInstance { public interface TracingInstanceStartCallback { void run(int instanceIdx, ProtoLogConfig config); void run(int instanceIdx, @NonNull ProtoLogConfig config); } public interface TracingInstanceStopCallback { void run(int instanceIdx, ProtoLogConfig config); void run(int instanceIdx, @NonNull ProtoLogConfig config); } @NonNull private final TracingInstanceStartCallback mOnStart; @NonNull private final Runnable mOnFlush; @NonNull private final TracingInstanceStopCallback mOnStop; @NonNull private final ProtoLogConfig mConfig; private final int mInstanceIndex; public Instance( DataSource<Instance, TlsState, IncrementalState> dataSource, @NonNull DataSource<Instance, TlsState, IncrementalState> dataSource, int instanceIdx, ProtoLogConfig config, TracingInstanceStartCallback onStart, Runnable onFlush, TracingInstanceStopCallback onStop @NonNull ProtoLogConfig config, @NonNull TracingInstanceStartCallback onStart, @NonNull Runnable onFlush, @NonNull TracingInstanceStopCallback onStop ) { super(dataSource, instanceIdx); this.mInstanceIndex = instanceIdx; Loading core/java/com/android/internal/protolog/ProtoLogDataSourceBuilder.java +7 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.protolog; import android.annotation.NonNull; public interface ProtoLogDataSourceBuilder { /** * Builder method for the DataSource the PerfettoProtoLogImpl is going to us. Loading @@ -24,6 +26,9 @@ public interface ProtoLogDataSourceBuilder { * @param onStop The onStop callback that should be used by the created datasource. * @return A new DataSource that uses the provided callbacks. */ ProtoLogDataSource build(ProtoLogDataSource.Instance.TracingInstanceStartCallback onStart, Runnable onFlush, ProtoLogDataSource.Instance.TracingInstanceStopCallback onStop); @NonNull ProtoLogDataSource build( @NonNull ProtoLogDataSource.Instance.TracingInstanceStartCallback onStart, @NonNull Runnable onFlush, @NonNull ProtoLogDataSource.Instance.TracingInstanceStopCallback onStop); } core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java +11 −7 Original line number Diff line number Diff line Loading @@ -24,7 +24,9 @@ import java.util.TreeMap; public class ProtoLogViewerConfigReader { @NonNull private final ViewerConfigInputStreamProvider mViewerConfigInputStreamProvider; @NonNull private final Map<String, Set<Long>> mGroupHashes = new TreeMap<>(); @NonNull private final LongSparseArray<String> mLogMessageMap = new LongSparseArray<>(); public ProtoLogViewerConfigReader( Loading @@ -41,14 +43,14 @@ public class ProtoLogViewerConfigReader { return mLogMessageMap.get(messageHash); } public synchronized void loadViewerConfig(String[] groups) { public synchronized void loadViewerConfig(@NonNull String[] groups) { loadViewerConfig(groups, (message) -> {}); } /** * Loads the viewer config into memory. No-op if already loaded in memory. */ public synchronized void loadViewerConfig(String[] groups, @NonNull ILogger logger) { public synchronized void loadViewerConfig(@NonNull String[] groups, @NonNull ILogger logger) { for (String group : groups) { if (mGroupHashes.containsKey(group)) { continue; Loading @@ -69,14 +71,14 @@ public class ProtoLogViewerConfigReader { } } public synchronized void unloadViewerConfig(String[] groups) { public synchronized void unloadViewerConfig(@NonNull String[] groups) { unloadViewerConfig(groups, (message) -> {}); } /** * Unload the viewer config from memory. */ public synchronized void unloadViewerConfig(String[] groups, @NonNull ILogger logger) { public synchronized void unloadViewerConfig(@NonNull String[] groups, @NonNull ILogger logger) { for (String group : groups) { if (!mGroupHashes.containsKey(group)) { continue; Loading @@ -90,8 +92,10 @@ public class ProtoLogViewerConfigReader { } } private Map<Long, String> loadViewerConfigMappingForGroup(String group) throws IOException { Long targetGroupId = loadGroupId(group); @NonNull private Map<Long, String> loadViewerConfigMappingForGroup(@NonNull String group) throws IOException { long targetGroupId = loadGroupId(group); final Map<Long, String> hashesForGroup = new TreeMap<>(); final ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream(); Loading Loading @@ -140,7 +144,7 @@ public class ProtoLogViewerConfigReader { return hashesForGroup; } private Long loadGroupId(String group) throws IOException { private long loadGroupId(@NonNull String group) throws IOException { final ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream(); while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) { Loading Loading
core/java/android/tracing/perfetto/DataSource.java +7 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.tracing.perfetto; import android.annotation.Nullable; import android.annotation.NonNull; import android.util.proto.ProtoInputStream; /** Loading @@ -41,6 +43,7 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * @param configStream A ProtoInputStream to read the tracing instance's config. * @return A new data source instance setup with the provided config. */ @NonNull public abstract DataSourceInstanceType createInstance( ProtoInputStream configStream, int instanceIndex); Loading Loading @@ -102,8 +105,8 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan /** * Override this method to create a custom TlsState object for your DataSource. A new instance * will be created per trace instance per thread. * */ @Nullable public TlsStateType createTlsState(CreateTlsStateArgs<DataSourceInstanceType> args) { return null; } Loading @@ -112,6 +115,7 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * Override this method to create and use a custom IncrementalState object for your DataSource. * */ @Nullable public IncrementalStateType createIncrementalState( CreateIncrementalStateArgs<DataSourceInstanceType> args) { return null; Loading Loading @@ -141,6 +145,7 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * @return The DataSourceInstance at index instanceIndex. * Null if the datasource instance at the requested index doesn't exist. */ @Nullable public DataSourceInstanceType getDataSourceInstanceLocked(int instanceIndex) { return (DataSourceInstanceType) nativeGetPerfettoInstanceLocked(mNativeObj, instanceIndex); } Loading @@ -159,6 +164,7 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * @param rawConfig byte array of the PerfettoConfig encoded proto. * @return A new Java DataSourceInstance object. */ @NonNull private DataSourceInstanceType createInstance(byte[] rawConfig, int instanceIndex) { final ProtoInputStream inputStream = new ProtoInputStream(rawConfig); return this.createInstance(inputStream, instanceIndex); Loading
core/java/com/android/internal/protolog/ProtoLogDataSource.java +33 −15 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.COLL import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.GROUP_NAME; import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.LOG_FROM; import android.annotation.NonNull; import android.internal.perfetto.protos.DataSourceConfigOuterClass.DataSourceConfig; import android.internal.perfetto.protos.ProtologCommon; import android.tracing.perfetto.CreateIncrementalStateArgs; Loading @@ -51,18 +52,26 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, ProtoLogDataSource.IncrementalState> { private static final String DATASOURCE_NAME = "android.protolog"; @NonNull private final Instance.TracingInstanceStartCallback mOnStart; @NonNull private final Runnable mOnFlush; @NonNull private final Instance.TracingInstanceStopCallback mOnStop; public ProtoLogDataSource(Instance.TracingInstanceStartCallback onStart, Runnable onFlush, Instance.TracingInstanceStopCallback onStop) { public ProtoLogDataSource( @NonNull Instance.TracingInstanceStartCallback onStart, @NonNull Runnable onFlush, @NonNull Instance.TracingInstanceStopCallback onStop) { this(onStart, onFlush, onStop, DATASOURCE_NAME); } @VisibleForTesting public ProtoLogDataSource(Instance.TracingInstanceStartCallback onStart, Runnable onFlush, Instance.TracingInstanceStopCallback onStop, String dataSourceName) { public ProtoLogDataSource( @NonNull Instance.TracingInstanceStartCallback onStart, @NonNull Runnable onFlush, @NonNull Instance.TracingInstanceStopCallback onStop, @NonNull String dataSourceName) { super(dataSourceName); this.mOnStart = onStart; this.mOnFlush = onFlush; Loading @@ -70,7 +79,8 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, } @Override public Instance createInstance(ProtoInputStream configStream, int instanceIndex) { @NonNull public Instance createInstance(@NonNull ProtoInputStream configStream, int instanceIndex) { ProtoLogConfig config = null; try { Loading Loading @@ -100,7 +110,8 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, } @Override public TlsState createTlsState(CreateTlsStateArgs<Instance> args) { @NonNull public TlsState createTlsState(@NonNull CreateTlsStateArgs<Instance> args) { try (Instance dsInstance = args.getDataSourceInstanceLocked()) { if (dsInstance == null) { // Datasource instance has been removed Loading @@ -111,14 +122,17 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, } @Override public IncrementalState createIncrementalState(CreateIncrementalStateArgs<Instance> args) { @NonNull public IncrementalState createIncrementalState( @NonNull CreateIncrementalStateArgs<Instance> args) { return new IncrementalState(); } public static class TlsState { @NonNull private final ProtoLogConfig mConfig; private TlsState(ProtoLogConfig config) { private TlsState(@NonNull ProtoLogConfig config) { this.mConfig = config; } Loading Loading @@ -269,26 +283,30 @@ public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance, public static class Instance extends DataSourceInstance { public interface TracingInstanceStartCallback { void run(int instanceIdx, ProtoLogConfig config); void run(int instanceIdx, @NonNull ProtoLogConfig config); } public interface TracingInstanceStopCallback { void run(int instanceIdx, ProtoLogConfig config); void run(int instanceIdx, @NonNull ProtoLogConfig config); } @NonNull private final TracingInstanceStartCallback mOnStart; @NonNull private final Runnable mOnFlush; @NonNull private final TracingInstanceStopCallback mOnStop; @NonNull private final ProtoLogConfig mConfig; private final int mInstanceIndex; public Instance( DataSource<Instance, TlsState, IncrementalState> dataSource, @NonNull DataSource<Instance, TlsState, IncrementalState> dataSource, int instanceIdx, ProtoLogConfig config, TracingInstanceStartCallback onStart, Runnable onFlush, TracingInstanceStopCallback onStop @NonNull ProtoLogConfig config, @NonNull TracingInstanceStartCallback onStart, @NonNull Runnable onFlush, @NonNull TracingInstanceStopCallback onStop ) { super(dataSource, instanceIdx); this.mInstanceIndex = instanceIdx; Loading
core/java/com/android/internal/protolog/ProtoLogDataSourceBuilder.java +7 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.protolog; import android.annotation.NonNull; public interface ProtoLogDataSourceBuilder { /** * Builder method for the DataSource the PerfettoProtoLogImpl is going to us. Loading @@ -24,6 +26,9 @@ public interface ProtoLogDataSourceBuilder { * @param onStop The onStop callback that should be used by the created datasource. * @return A new DataSource that uses the provided callbacks. */ ProtoLogDataSource build(ProtoLogDataSource.Instance.TracingInstanceStartCallback onStart, Runnable onFlush, ProtoLogDataSource.Instance.TracingInstanceStopCallback onStop); @NonNull ProtoLogDataSource build( @NonNull ProtoLogDataSource.Instance.TracingInstanceStartCallback onStart, @NonNull Runnable onFlush, @NonNull ProtoLogDataSource.Instance.TracingInstanceStopCallback onStop); }
core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java +11 −7 Original line number Diff line number Diff line Loading @@ -24,7 +24,9 @@ import java.util.TreeMap; public class ProtoLogViewerConfigReader { @NonNull private final ViewerConfigInputStreamProvider mViewerConfigInputStreamProvider; @NonNull private final Map<String, Set<Long>> mGroupHashes = new TreeMap<>(); @NonNull private final LongSparseArray<String> mLogMessageMap = new LongSparseArray<>(); public ProtoLogViewerConfigReader( Loading @@ -41,14 +43,14 @@ public class ProtoLogViewerConfigReader { return mLogMessageMap.get(messageHash); } public synchronized void loadViewerConfig(String[] groups) { public synchronized void loadViewerConfig(@NonNull String[] groups) { loadViewerConfig(groups, (message) -> {}); } /** * Loads the viewer config into memory. No-op if already loaded in memory. */ public synchronized void loadViewerConfig(String[] groups, @NonNull ILogger logger) { public synchronized void loadViewerConfig(@NonNull String[] groups, @NonNull ILogger logger) { for (String group : groups) { if (mGroupHashes.containsKey(group)) { continue; Loading @@ -69,14 +71,14 @@ public class ProtoLogViewerConfigReader { } } public synchronized void unloadViewerConfig(String[] groups) { public synchronized void unloadViewerConfig(@NonNull String[] groups) { unloadViewerConfig(groups, (message) -> {}); } /** * Unload the viewer config from memory. */ public synchronized void unloadViewerConfig(String[] groups, @NonNull ILogger logger) { public synchronized void unloadViewerConfig(@NonNull String[] groups, @NonNull ILogger logger) { for (String group : groups) { if (!mGroupHashes.containsKey(group)) { continue; Loading @@ -90,8 +92,10 @@ public class ProtoLogViewerConfigReader { } } private Map<Long, String> loadViewerConfigMappingForGroup(String group) throws IOException { Long targetGroupId = loadGroupId(group); @NonNull private Map<Long, String> loadViewerConfigMappingForGroup(@NonNull String group) throws IOException { long targetGroupId = loadGroupId(group); final Map<Long, String> hashesForGroup = new TreeMap<>(); final ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream(); Loading Loading @@ -140,7 +144,7 @@ public class ProtoLogViewerConfigReader { return hashesForGroup; } private Long loadGroupId(String group) throws IOException { private long loadGroupId(@NonNull String group) throws IOException { final ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream(); while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) { Loading