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

Commit 65bfe59d authored by Zimuzo Ezeozue's avatar Zimuzo Ezeozue
Browse files

Added Perfetto tests to TracePerfTest

For a better comparison, added PerfettoTrace#instant
vs Trace#instant.

Bug: 303199244
Flag: android.os.perfetto_sdk_tracing_v2
Test: atest TracePerfTest

Change-Id: I9cf48ab6b4178d7bec36f0556260990a038633b2
parent ea0f2553
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ android_test {
        "junit-params",
        "core-tests-support",
        "guava",
        "perfetto_trace_java_protos",
    ],

    libs: ["android.test.base.stubs.system"],
+75 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@

package android.os;

import static android.os.PerfettoTrace.Category;

import android.perftests.utils.BenchmarkState;
import android.perftests.utils.PerfStatusReporter;
import android.perftests.utils.ShellHelper;
@@ -31,19 +33,35 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import perfetto.protos.DataSourceConfigOuterClass.DataSourceConfig;
import perfetto.protos.TraceConfigOuterClass.TraceConfig;
import perfetto.protos.TraceConfigOuterClass.TraceConfig.BufferConfig;
import perfetto.protos.TraceConfigOuterClass.TraceConfig.DataSource;
import perfetto.protos.TrackEventConfigOuterClass.TrackEventConfig;

@RunWith(AndroidJUnit4.class)
public class TracePerfTest {
    @Rule
    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();

    private static final String FOO = "foo";
    private static final Category FOO_CATEGORY = new Category(FOO);
    private static PerfettoTrace.Session sPerfettoSession;

    @BeforeClass
    public static void startTracing() {
        ShellHelper.runShellCommandRaw("atrace -c --async_start -a *");
        PerfettoTrace.register(false /* isBackendInProcess */);
        FOO_CATEGORY.register();
        sPerfettoSession = new PerfettoTrace.Session(false /* isBackendInProcess */,
                                                      getTraceConfig(FOO).toByteArray());
    }

    @AfterClass
    public static void endTracing() {
        ShellHelper.runShellCommandRaw("atrace --async_stop");
        FOO_CATEGORY.unregister();
        sPerfettoSession.close();
    }

    @Before
@@ -84,4 +102,61 @@ public class TracePerfTest {
            Trace.setCounter("testCounter", 123);
        }
    }

    @Test
    public void testInstant() {
        Trace.instant(Trace.TRACE_TAG_APP, "testInstantA");

        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
            Trace.instant(Trace.TRACE_TAG_APP, "testInstantA");
        }
    }

    @Test
    public void testInstantPerfetto() {
        PerfettoTrace.instant(FOO_CATEGORY, "testInstantP").emit();

        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
            PerfettoTrace.instant(FOO_CATEGORY, "testInstantP").emit();
        }
    }

    @Test
    public void testInstantPerfettoWithArgs() {
        PerfettoTrace.instant(FOO_CATEGORY, "testInstantP")
                .addArg("foo", "bar")
                .addFlow(1)
                .emit();

        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
            PerfettoTrace.instant(FOO_CATEGORY, "testInstantP")
                    .addArg("foo", "bar")
                    .addFlow(1)
                    .emit();
        }
    }

    private static TraceConfig getTraceConfig(String cat) {
        BufferConfig bufferConfig = BufferConfig.newBuilder().setSizeKb(1024).build();
        TrackEventConfig trackEventConfig = TrackEventConfig
                .newBuilder()
                .addEnabledCategories(cat)
                .build();
        DataSourceConfig dsConfig = DataSourceConfig
                .newBuilder()
                .setName("track_event")
                .setTargetBuffer(0)
                .setTrackEventConfig(trackEventConfig)
                .build();
        DataSource ds = DataSource.newBuilder().setConfig(dsConfig).build();
        TraceConfig traceConfig = TraceConfig
                .newBuilder()
                .addBuffers(bufferConfig)
                .addDataSources(ds)
                .build();
        return traceConfig;
    }
}