blob: 32c5508b18c2211fcacdd0813aa4b40d6866f78c [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// TODO(https://fxbug.dev/84961): Fix null safety and remove this language version.
// @dart=2.9
import 'package:sl4f/trace_processing.dart';
import 'package:test/test.dart';
import 'helpers.dart';
const _trace2jsonPath = 'runtime_deps/trace2json';
void main() {
enableLoggingOutput();
// This test checks that the perftest library produces the expected set
// of trace events when tracing is enabled.
//
// It also indirectly tests for a race condition in trace provider
// startup (https://fxbug.dev/22911) in which early trace events can be
// lost.
const testName = 'perftest_library_trace_events_test';
test(testName, () async {
final helper = await PerfTestHelper.make();
final traceSession = await helper.performance
.initializeTracing(categories: ['kernel', 'perftest'], bufferSize: 36);
await traceSession.start();
final result = await helper.sl4fDriver.ssh
.run('/bin/fuchsia_microbenchmarks -p --quiet'
' --runs 4 --enable-tracing --filter="^Null\$"');
expect(result.exitCode, equals(0));
await traceSession.stop();
final fxtTraceFile = await traceSession.terminateAndDownload(testName);
final jsonTraceFile = await helper.performance
.convertTraceFileToJson(_trace2jsonPath, fxtTraceFile);
final Model model = await createModelFromFile(jsonTraceFile);
final events = filterEventsTyped<DurationEvent>(getAllEvents(model),
category: 'perftest');
expect(events.map((event) => event.name), [
'test_group',
'test_setup',
'test_run',
'test_run',
'test_run',
'test_run',
'test_teardown'
]);
}, timeout: Timeout.none);
}