0

我正在尝试为我们的应用程序创建自动性能分析测试。目前 dart 允许收集 cpu 样本和时间线信息并将其转储到 json 文件中。例子:

driver = await FlutterDriver.connect(printCommunication: true).timeout(appConnectTimeout);
vms = await vmServiceConnectUri(vmUrl);
isolate = await driver.appIsolate.loadRunnable();
expect((await vms.setFlag("profiler", "true")), isA<Success>());
await driver.startTracing();
...
CpuSamples cpuSamples = await vms.getCpuSamples(
    (await vms.getVM()).isolates.first.id,
    isolate.startTime.microsecondsSinceEpoch,
    (new DateTime.now()).microsecondsSinceEpoch
  );
flutter_timeline.Timeline timeline = await driver.stopTracingAndDownloadTimeline();
await TimelineSummary.summarize(timeline).writeTimelineToFile("main", pretty: true);    

但是只能在 chrome 开发人员工具中查看 timeline.json 文件,这些工具没有提供有关 dart 执行的足够信息。我正在寻找能够为我提供与天文台网页相同的功能但具有导入main.timeline.json结果的东西。你知道这样的事吗?

理想情况下,我想打开 Observatory 页面并将这个时间线上传到那里,并能够看到时间线、cpu 表、调用树、浏览已执行的代码并查看哪些部分未执行等。好吧,做我能做的所有事情为实时虚拟机运行的天文台。你有什么工具吗?

问题 2:为什么在这段代码中我有 cpuSamples.samples 空列表,而 cpuSamples.functions 已完全填充?

问题 3:为什么 chrome 开发工具能够使用上面代码中的转储查看我的应用程序函数名称,而 dart 开发工具无法读取这些并引用动态库中的编码函数名称(我的应用程序的编译 .so 文件)。该应用程序现在以 --debug 模式运行,因为我没有物理设备 ATM

4

1 回答 1

0

这个问题在与谷歌讨论时自行消失了,所以在线程中寻找解决方案以及源代码: https ://github.com/dart-lang/sdk/issues/42591

于 2020-07-08T14:55:37.603 回答