blob: fad0eda245bfd0afd109f6ea6f53e582ac8c96ec [file] [log] [blame]
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:observatory/service_io.dart';
import 'package:unittest/unittest.dart';
import 'test_helper.dart';
fib(n) {
if (n < 0) return 0;
if (n == 0) return 1;
return fib(n - 1) + fib(n - 2);
}
testeeDo() {
print("Testee doing something.");
fib(30);
print("Testee did something.");
}
var tests = <IsolateTest>[
(Isolate isolate) async {
var params = {'tags': 'None'};
var result =
await isolate.invokeRpcNoUpgrade('_writeCpuProfileTimeline', params);
print(result);
expect(result['type'], equals('Success'));
result = await isolate.vm.invokeRpcNoUpgrade('getVMTimeline', {});
expect(result['type'], equals('Timeline'));
expect(result['traceEvents'], new isInstanceOf<List>());
var events = result['traceEvents'];
print(events);
var profilerSampleEvents = result['traceEvents'].where((event) {
return event['name'] == "Dart CPU sample";
}).toList();
var isString = new isInstanceOf<String>();
var isInt = new isInstanceOf<int>();
expect(profilerSampleEvents.length, greaterThan(10),
reason: "Should have many samples");
for (Map event in profilerSampleEvents) {
print(event);
// Sadly this is an "Instant" event because there is no way to add a
// proper "Sample" event in Fuchsia's tracing.
expect(event['ph'], equals('i'));
expect(event['pid'], isInt);
expect(event['tid'], isInt);
expect(event['ts'], isInt);
expect(event['cat'], equals("Profiler"));
expect(event['args']['backtrace'], isString);
}
},
];
var vmArgs = [
'--profiler=true',
'--profile-vm=false', // So this also works with DBC and KBC.
'--timeline_recorder=ring',
'--timeline_streams=Profiler'
];
main(args) async =>
runIsolateTests(args, tests, testeeBefore: testeeDo, extraArgs: vmArgs);