Я пытаюсь создать автоматизированный тест профилирования производительности для нашего приложения. На данный момент dart позволяет собирать образцы процессора и информацию о временной шкале, а также выгружать их в файл 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);
Но просмотреть файл timeline.json можно только в инструментах разработчика Chrome, которые не предоставляют достаточно информации о выполнении дротика. Что я ищу что-то, что предоставит мне те же возможности, что и веб-страница Observatory, но с импортированными main.timeline.json
результатами. Вы знаете что-нибудь подобное?
В идеале я хотел бы открыть страницу Observatory и загрузить туда эту временную шкалу, чтобы иметь возможность видеть временную шкалу, таблицу процессоров, дерево вызовов, перемещаться по исполняемому коду и видеть, какие части не были выполнены и т. д. Ну, делать все, что я могу сделать с Обсерватория работает для живой виртуальной машины. Есть ли у вас какие-либо инструменты в виду?
Вопрос 2: Почему в этом коде у меня есть пустой список cpuSamples.samples, в то время как cpuSamples.functions полностью заполнен?
Вопрос 3: Почему инструменты chrome dev могут видеть имена функций моего приложения, используя дамп из приведенного выше кода, в то время как инструменты dart dev не могут их читать и ссылаться на закодированные имена функций в динамической библиотеке (скомпилированный файл .so моего приложения). Приложение пока работает в режиме --debug, потому что у меня нет банкомата физического устройства.