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

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

Merge "Add nullability annotations" into main

parents c645174d 6e5ba679
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) {