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

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

Merge "Create a new writer for each test instead of re-using the same one" into main

parents 161235ad f8376063
Loading
Loading
Loading
Loading
+26 −26
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket
import static android.tools.traces.Utils.busyWaitForDataSourceRegistration;
import static android.tools.traces.Utils.busyWaitForDataSourceRegistration;
import static android.tools.traces.Utils.busyWaitTracingSessionExists;
import static android.tools.traces.Utils.busyWaitTracingSessionExists;
import static android.tools.traces.Utils.busyWaitTracingSessionDoesntExist;
import static android.tools.traces.Utils.busyWaitTracingSessionDoesntExist;
import static android.tracing.perfetto.TestUtils.createTempWriter;


import static java.io.File.createTempFile;
import static java.io.File.createTempFile;
import static java.nio.file.Files.createTempDirectory;
import static java.nio.file.Files.createTempDirectory;
@@ -68,12 +69,6 @@ import java.util.concurrent.atomic.AtomicReference;
public class DataSourceTest {
public class DataSourceTest {
    private final File mTracingDirectory = createTempDirectory("temp").toFile();
    private final File mTracingDirectory = createTempDirectory("temp").toFile();


    private final ResultWriter mWriter = new ResultWriter()
            .forScenario(new ScenarioBuilder()
                    .forClass(createTempFile("temp", "").getName()).build())
            .withOutputDir(mTracingDirectory)
            .setRunComplete();

    private final TraceConfigs mTraceConfig = new TraceConfigs(
    private final TraceConfigs mTraceConfig = new TraceConfigs(
            new TraceConfig(false, true, false),
            new TraceConfig(false, true, false),
            new TraceConfig(false, true, false),
            new TraceConfig(false, true, false),
@@ -119,6 +114,7 @@ public class DataSourceTest {
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                        .setName(sTestDataSource.name).build()).build();
                        .setName(sTestDataSource.name).build()).build();


        final var writer = createTempWriter(mTracingDirectory);
        try {
        try {
            traceMonitor.start();
            traceMonitor.start();


@@ -131,10 +127,10 @@ public class DataSourceTest {
                protoOutputStream.end(forTestingToken);
                protoOutputStream.end(forTestingToken);
            });
            });
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(writer);
        }
        }


        final ResultReader reader = new ResultReader(mWriter.write(), mTraceConfig);
        final ResultReader reader = new ResultReader(writer.write(), mTraceConfig);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        assert rawProtoFromFile != null;
        assert rawProtoFromFile != null;
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
@@ -170,7 +166,7 @@ public class DataSourceTest {
                actualStateTestValue.set(state.testStateValue);
                actualStateTestValue.set(state.testStateValue);
            });
            });
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(createTempWriter(mTracingDirectory));
        }
        }


        Truth.assertThat(actualStateTestValue.get()).isEqualTo(expectedStateTestValue);
        Truth.assertThat(actualStateTestValue.get()).isEqualTo(expectedStateTestValue);
@@ -205,10 +201,10 @@ public class DataSourceTest {
                    actualStateTestValues[index.getAndIncrement()] = state.testStateValue;
                    actualStateTestValues[index.getAndIncrement()] = state.testStateValue;
                });
                });
            } finally {
            } finally {
                traceMonitor1.stop(mWriter);
                traceMonitor1.stop(createTempWriter(mTracingDirectory));
            }
            }
        } finally {
        } finally {
            traceMonitor2.stop(mWriter);
            traceMonitor2.stop(createTempWriter(mTracingDirectory));
        }
        }


        Truth.assertThat(actualStateTestValues[0]).isEqualTo(expectedStateTestValues[0]);
        Truth.assertThat(actualStateTestValues[0]).isEqualTo(expectedStateTestValues[0]);
@@ -271,7 +267,7 @@ public class DataSourceTest {
            setOutStateLatch.await(3, TimeUnit.SECONDS);
            setOutStateLatch.await(3, TimeUnit.SECONDS);


        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(createTempWriter(mTracingDirectory));
        }
        }


        Truth.assertThat(thread1ActualStateValue.get()).isEqualTo(thread1ExpectedStateValue);
        Truth.assertThat(thread1ActualStateValue.get()).isEqualTo(thread1ExpectedStateValue);
@@ -299,7 +295,7 @@ public class DataSourceTest {
            sTestDataSource.trace(ctx ->
            sTestDataSource.trace(ctx ->
                    testStateValue.set(ctx.getIncrementalState().testStateValue));
                    testStateValue.set(ctx.getIncrementalState().testStateValue));
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(createTempWriter(mTracingDirectory));
        }
        }


        Truth.assertThat(testStateValue.get()).isNotEqualTo(1);
        Truth.assertThat(testStateValue.get()).isNotEqualTo(1);
@@ -328,7 +324,7 @@ public class DataSourceTest {
        try {
        try {
            monitor.start();
            monitor.start();
        } finally {
        } finally {
            monitor.stop(mWriter);
            monitor.stop(createTempWriter(mTracingDirectory));
        }
        }


        int configDummyIntValue = 0;
        int configDummyIntValue = 0;
@@ -474,7 +470,7 @@ public class DataSourceTest {
            latch.await(3, TimeUnit.SECONDS);
            latch.await(3, TimeUnit.SECONDS);
            Truth.assertThat(callbackCalled.get()).isTrue();
            Truth.assertThat(callbackCalled.get()).isTrue();
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(createTempWriter(mTracingDirectory));
        }
        }
    }
    }


@@ -510,7 +506,7 @@ public class DataSourceTest {
                protoOutputStream.end(forTestingToken);
                protoOutputStream.end(forTestingToken);
            });
            });
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(createTempWriter(mTracingDirectory));
        }
        }


        latch.await(3, TimeUnit.SECONDS);
        latch.await(3, TimeUnit.SECONDS);
@@ -544,7 +540,7 @@ public class DataSourceTest {
            Truth.assertThat(callbackCalled.get()).isFalse();
            Truth.assertThat(callbackCalled.get()).isFalse();
            busyWaitTracingSessionExists(sessionName);
            busyWaitTracingSessionExists(sessionName);
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(createTempWriter(mTracingDirectory));
            busyWaitTracingSessionDoesntExist(sessionName);
            busyWaitTracingSessionDoesntExist(sessionName);
        }
        }


@@ -590,7 +586,7 @@ public class DataSourceTest {
        } finally {
        } finally {
            // stop tracing in a different thread (asynchronously) because it blocks (busy wait)
            // stop tracing in a different thread (asynchronously) because it blocks (busy wait)
            // till the tracing sessions actually stops (perfetto process exits)
            // till the tracing sessions actually stops (perfetto process exits)
            new Thread(() -> traceMonitor.stop(mWriter)).start();
            new Thread(() -> traceMonitor.stop(createTempWriter(mTracingDirectory))).start();
        }
        }


        try {
        try {
@@ -624,6 +620,7 @@ public class DataSourceTest {
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                        .setName(sTestDataSource.name).build()).build();
                        .setName(sTestDataSource.name).build()).build();


        final var writer = createTempWriter(mTracingDirectory);
        try {
        try {
            traceMonitor.start();
            traceMonitor.start();
            sTestDataSource.trace((ctx) -> {
            sTestDataSource.trace((ctx) -> {
@@ -640,10 +637,10 @@ public class DataSourceTest {
                }
                }
            });
            });
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(writer);
        }
        }


        final ResultReader reader = new ResultReader(mWriter.write(), mTraceConfig);
        final ResultReader reader = new ResultReader(writer.write(), mTraceConfig);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        assert rawProtoFromFile != null;
        assert rawProtoFromFile != null;
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
@@ -686,6 +683,7 @@ public class DataSourceTest {
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                        .setName(sTestDataSource.name).build()).build();
                        .setName(sTestDataSource.name).build()).build();


        final var writer = createTempWriter(mTracingDirectory);
        try {
        try {
            traceMonitor.start();
            traceMonitor.start();
            sTestDataSource.trace((ctx) -> {
            sTestDataSource.trace((ctx) -> {
@@ -697,10 +695,10 @@ public class DataSourceTest {
                protoOutputStream.end(forTestingToken);
                protoOutputStream.end(forTestingToken);
            });
            });
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(writer);
        }
        }


        final ResultReader reader = new ResultReader(mWriter.write(), mTraceConfig);
        final ResultReader reader = new ResultReader(writer.write(), mTraceConfig);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        assert rawProtoFromFile != null;
        assert rawProtoFromFile != null;
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
@@ -745,6 +743,7 @@ public class DataSourceTest {
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                        .setName(sTestDataSource.name).build()).build();
                        .setName(sTestDataSource.name).build()).build();


        final var writer = createTempWriter(mTracingDirectory);
        try {
        try {
            traceMonitor.start();
            traceMonitor.start();
            sTestDataSource.trace((ctx) -> {
            sTestDataSource.trace((ctx) -> {
@@ -756,10 +755,10 @@ public class DataSourceTest {
                protoOutputStream.end(forTestingToken);
                protoOutputStream.end(forTestingToken);
            });
            });
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(writer);
        }
        }


        final ResultReader reader = new ResultReader(mWriter.write(), mTraceConfig);
        final ResultReader reader = new ResultReader(writer.write(), mTraceConfig);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        assert rawProtoFromFile != null;
        assert rawProtoFromFile != null;
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
@@ -797,13 +796,14 @@ public class DataSourceTest {
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                .enableCustomTrace(PerfettoConfig.DataSourceConfig.newBuilder()
                        .setName(sTestDataSource.name).build()).build();
                        .setName(sTestDataSource.name).build()).build();


        final var writer = createTempWriter(mTracingDirectory);
        try {
        try {
            traceMonitor.start();
            traceMonitor.start();
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(writer);
        }
        }


        final ResultReader reader = new ResultReader(mWriter.write(), mTraceConfig);
        final ResultReader reader = new ResultReader(writer.write(), mTraceConfig);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        final byte[] rawProtoFromFile = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        assert rawProtoFromFile != null;
        assert rawProtoFromFile != null;
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
        final perfetto.protos.TraceOuterClass.Trace trace = perfetto.protos.TraceOuterClass.Trace
+45 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2025 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.tracing.perfetto;

import static java.io.File.createTempFile;

import android.tools.ScenarioBuilder;
import android.tools.traces.io.ResultWriter;

import java.io.File;
import java.io.IOException;

public class TestUtils {

    /**
     * Creates a temporary ResultWriter for testing.
     * @param tracingDirectory The directory to write the temporary file to.
     * @return The temporary ResultWriter.
     */
    public static ResultWriter createTempWriter(File tracingDirectory) {
        try {
            return new ResultWriter()
                    .forScenario(new ScenarioBuilder()
                            .forClass(createTempFile("temp", "").getName()).build())
                    .withOutputDir(tracingDirectory)
                    .setRunComplete();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
+96 −70

File changed.

Preview size limit exceeded, changes collapsed.

+5 −12
Original line number Original line Diff line number Diff line
@@ -17,18 +17,15 @@
package com.android.internal.protolog;
package com.android.internal.protolog;


import static android.tools.traces.Utils.busyWaitForDataSourceRegistration;
import static android.tools.traces.Utils.busyWaitForDataSourceRegistration;
import static android.tracing.perfetto.TestUtils.createTempWriter;


import static perfetto.protos.TracePacketOuterClass.TracePacket.SequenceFlags.SEQ_NEEDS_INCREMENTAL_STATE;
import static perfetto.protos.TracePacketOuterClass.TracePacket.SequenceFlags.SEQ_NEEDS_INCREMENTAL_STATE;


import static java.io.File.createTempFile;

import android.tools.ScenarioBuilder;
import android.tools.Tag;
import android.tools.Tag;
import android.tools.io.TraceType;
import android.tools.io.TraceType;
import android.tools.traces.TraceConfig;
import android.tools.traces.TraceConfig;
import android.tools.traces.TraceConfigs;
import android.tools.traces.TraceConfigs;
import android.tools.traces.io.ResultReader;
import android.tools.traces.io.ResultReader;
import android.tools.traces.io.ResultWriter;
import android.tools.traces.monitors.PerfettoTraceMonitor;
import android.tools.traces.monitors.PerfettoTraceMonitor;
import android.tracing.perfetto.DataSourceParams;
import android.tracing.perfetto.DataSourceParams;


@@ -57,12 +54,6 @@ public class UnprocessedPerfettoProtoLogImplTest {
    private final File mTracingDirectory = InstrumentationRegistry.getInstrumentation()
    private final File mTracingDirectory = InstrumentationRegistry.getInstrumentation()
            .getTargetContext().getFilesDir();
            .getTargetContext().getFilesDir();


    private final ResultWriter mWriter = new ResultWriter()
            .forScenario(new ScenarioBuilder()
                    .forClass(createTempFile("temp", "").getName()).build())
            .withOutputDir(mTracingDirectory)
            .setRunComplete();

    private final TraceConfigs mTraceConfig = new TraceConfigs(
    private final TraceConfigs mTraceConfig = new TraceConfigs(
            new TraceConfig(false, true, false),
            new TraceConfig(false, true, false),
            new TraceConfig(false, true, false),
            new TraceConfig(false, true, false),
@@ -108,6 +99,8 @@ public class UnprocessedPerfettoProtoLogImplTest {
        PerfettoTraceMonitor traceMonitor = PerfettoTraceMonitor.newBuilder()
        PerfettoTraceMonitor traceMonitor = PerfettoTraceMonitor.newBuilder()
                .enableProtoLog(true, List.of(), TEST_PROTOLOG_DATASOURCE_NAME)
                .enableProtoLog(true, List.of(), TEST_PROTOLOG_DATASOURCE_NAME)
                .build();
                .build();

        final var writer = createTempWriter(mTracingDirectory);
        try {
        try {
            traceMonitor.start();
            traceMonitor.start();


@@ -116,10 +109,10 @@ public class UnprocessedPerfettoProtoLogImplTest {
            sProtoLog.log(LogLevel.DEBUG, TestProtoLogGroup.TEST_GROUP,
            sProtoLog.log(LogLevel.DEBUG, TestProtoLogGroup.TEST_GROUP,
                    "My Unprocessed Message");
                    "My Unprocessed Message");
        } finally {
        } finally {
            traceMonitor.stop(mWriter);
            traceMonitor.stop(writer);
        }
        }


        final ResultReader reader = new ResultReader(mWriter.write(), mTraceConfig);
        final ResultReader reader = new ResultReader(writer.write(), mTraceConfig);
        final var traceBytes = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        final var traceBytes = reader.readBytes(TraceType.PERFETTO, Tag.ALL);
        final var trace = Trace.parseFrom(traceBytes);
        final var trace = Trace.parseFrom(traceBytes);