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

Commit 6e5ba679 authored by Pablo Gamito's avatar Pablo Gamito
Browse files

Add nullability annotations

Bug: 364254249
Test: n/a
Flag: EXEMPT annotions only
Change-Id: Id953945ed340ca6d99820ec911eb35e88593cb39
parent 58eee2b3
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.tracing.perfetto;

import android.annotation.Nullable;
import android.annotation.NonNull;
import android.util.proto.ProtoInputStream;

/**
@@ -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);

@@ -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;
    }
@@ -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;
@@ -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);
    }
@@ -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);
+33 −15
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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 {
@@ -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
@@ -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;
        }

@@ -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;
+7 −2
Original line number Diff line number Diff line
@@ -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.
@@ -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);
}
+11 −7
Original line number Diff line number Diff line
@@ -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(
@@ -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;
@@ -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;
@@ -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();
@@ -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) {