Loading tests/Tracing/src/android/tracing/perfetto/DataSourceTest.java +26 −26 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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), Loading Loading @@ -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(); Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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]); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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)); } } } } Loading Loading @@ -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); Loading Loading @@ -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); } } Loading Loading @@ -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 { Loading Loading @@ -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) -> { Loading @@ -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 Loading Loading @@ -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) -> { Loading @@ -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 Loading Loading @@ -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) -> { Loading @@ -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 Loading Loading @@ -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 Loading tests/Tracing/src/android/tracing/perfetto/TestUtils.java 0 → 100644 +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); } } } tests/Tracing/src/com/android/internal/protolog/ProcessedPerfettoProtoLogImplTest.java +96 −70 File changed.Preview size limit exceeded, changes collapsed. Show changes tests/Tracing/src/com/android/internal/protolog/UnprocessedPerfettoProtoLogImplTest.java +5 −12 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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), Loading Loading @@ -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(); Loading @@ -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); Loading Loading
tests/Tracing/src/android/tracing/perfetto/DataSourceTest.java +26 −26 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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), Loading Loading @@ -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(); Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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]); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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)); } } } } Loading Loading @@ -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); Loading Loading @@ -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); } } Loading Loading @@ -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 { Loading Loading @@ -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) -> { Loading @@ -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 Loading Loading @@ -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) -> { Loading @@ -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 Loading Loading @@ -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) -> { Loading @@ -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 Loading Loading @@ -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 Loading
tests/Tracing/src/android/tracing/perfetto/TestUtils.java 0 → 100644 +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); } } }
tests/Tracing/src/com/android/internal/protolog/ProcessedPerfettoProtoLogImplTest.java +96 −70 File changed.Preview size limit exceeded, changes collapsed. Show changes
tests/Tracing/src/com/android/internal/protolog/UnprocessedPerfettoProtoLogImplTest.java +5 −12 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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), Loading Loading @@ -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(); Loading @@ -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); Loading